Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 25
  1. #1

    [C] - Implementare un cronometro...

    Si può realizzare un cronometro in C, con la libreria time.h?

    Per cronometro intendo hh:mm:ss
    con i secondi che si incrementano ed ogni 60 si incrementa il minuto, ed ogni 60 minuti si incrementano le ore...etc, ovviamente a tempo di esecuzione, cioè devo comunque vedere a schermo il tempo che passa....

    Se si può fare, c'è qualcuno che mi delucida su come impostare l'algoritmo ( o programma )?

  2. #2

    Si

    Si puo realizzare, basta che sfrutti le funzioni della librearia time.h. Ad esempio con questa semplice funzioncina che ho preso pari pari dal C refernce puoi impostare l attesa a quanto vuoi.

    void wait ( int seconds )
    {
    clock_t endwait;
    endwait = clock () + seconds * CLK_TCK ;
    while (clock() < endwait) {}
    }

    nel tuo caso gli passerai il valore 1 cosi attende un secondo. Dopo di che con questo "mattoncino" puoi implemetare il tuo cronometro con un po di while e di if.
    Queste sono le linee guida credo, poi tieni conto che sono sveglio da 1 ora....

    saluti!

  3. #3
    grazie per la risposta! sei stato gentilissimo!

    Ora mi chiedo una cosa, se volessi implementare un cronometro, e per esempio stampare il tempo che passa, ma nello stesso tempo permettere al programma di eseguire altre operazioni...tipo:


    ho una cosa del genere:



    Cronometro: 00:00:01

    Menu
    1) Inserisci elemento in Lista
    2) Visualizza lista
    3) Svuota Lista

    permettendo poi all'utente di uscire da programma quando vuole...

    ho scritto questo piccolo programmino sulla base della tua funzione:

    codice:
    #include <time.h>
    #include <stdlib.h>
    #include <stdio.h>
    
    void wait ( int seconds )
    {
    clock_t endwait;
    endwait = clock () + seconds * CLK_TCK ;
    while (clock() < endwait) {}
    }
    
    int main()
    {
    int i=0;
        do
        {
          system("CLS");
          printf("%d",i);       
          wait( 1 );
          i++;
        }
        while(i<=60);
    }
    Questo mi stampa a video un cronometro di secondi, quando arriva a 60 esce...

    ok ma se volessi inserire nel main qualche altra istruzione questa non sarà eseguita fin quando non finisce il ciclo do-while...

    Non so se sono stato chiaro, il problema è questo, faccio il cronometro.

    Come posso utilizzarlo includendolo nel mio programma, per esempio in alto al menu?

  4. #4
    Codice PHP:

    #include <time.h>
    #include <stdlib.h>
    #include <stdio.h>

    void wait int seconds )
    {
    clock_t endwait;
    endwait clock () + seconds CLK_TCK ;
    while (
    clock() < endwait) {}
    }

    int main()
    {
    int Ore=0,
        
    Minuti=0,
        
    Secondi=0;
        for( ; ; )
        {
          
    system("CLS");
          
    printf("%2.2d:%2.2d:%2.2d",OreMinutiSecondi);       
     
          do
          {
            
    system("CLS");
            
    printf("%2.2d:%2.2d:%2.2d",OreMinutiSecondi);       
     
            do
            {
              
    system("CLS");
              
    printf("%2.2d:%2.2d:%2.2d",OreMinutiSecondi);       
              
    wait);
              
    Secondi++;        
            }
            while(
    Secondi<60);
            
    Secondi=0;
            
    Minuti++;
          }
          while(
    Minuti<60);
          
    Minuti=0;
          
    Ore++;
        }

    Ecco il cronometro finito...

    resta sempre il problema che, si ho fatto il cronometro, ma non lo posso utilizzare nel mio programma, perchè non uscendo più dal for ovviamente, non passa alle istruzioni successive.

    Non esiste un modo per ovviare al problema?

  5. #5
    C'è un problema con
    codice:
    ...
    while (clock() < endwait) {}
    ...
    Questa soluzione occupa quasi interamente la CPU, per non 'fare niente' (attende il trascorrere del tempo).
    E rallenta tutto il sistema :rollo:

    Il tuo programma è per sistemi windows ?
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  6. #6

  7. #7
    Allora è meglio se fai così :
    codice:
    #include <windows.h>
    #include <stdlib.h>
    #include <stdio.h>
    
    int main()
    {
    	int Ore=0, Minuti=0, Secondi=0;
    	printf("\n\n\n");
    	for( ; ; )
    	{
    		do
    		{
    			do
    			{
    				printf("\r TIME %02d:%02d:%02d ", Ore, Minuti, Secondi);
    				Sleep(1000);
    				Secondi++;
    			}
    			while(Secondi<60);
    			Secondi=0;
    			Minuti++;
    		}
    		while(Minuti<60);
    		Minuti=0;
    		Ore++;
    	}
    }
    Per renderti conto della differenza, guarda nel task-manager come si riduce drasticamente
    l'utilizzo della cpu, grazie all'apposita funzione Sleep(ms).
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  8. #8
    grazie mille!

    Ma il mio problema è un altro!

    Come posso usare il cronometro in un mio programma?

    Voglio dire, come posso far apparire il cronometro in alto alla console, e nello stesso tempo eseguire il mio programma di gestione di una Lista?

  9. #9
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  10. #10
    Non capisco a che mi serve il tempo di esecuzione per risolvere il mio problema...?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.