Accedi

Ho dimenticato la password

Ultimi argomenti
» argomento
Dom Giu 02, 2013 4:30 pm Da ruggiero98

» problema con la funzione SE aiutoooo x favore?????
Dom Giu 02, 2013 4:18 pm Da ruggiero98

» aiuto in programma con if
Dom Mag 26, 2013 5:39 pm Da ruggiero98

»  CALCOLO PERCENTUALE IN C
Sab Apr 20, 2013 8:22 pm Da ruggiero98

» Costruire un temporizzatore software per accensione luci a led
Lun Mar 25, 2013 2:34 pm Da Cristina Shady

» Ciao a tutti!
Gio Mar 22, 2012 4:19 am Da cosmos91

» Virtualbox VS le periferiche USB
Mar Apr 06, 2010 1:49 pm Da dandeciani

» PROGRAMMA: BINARY CODE
Mar Dic 23, 2008 7:28 pm Da Thalionwen

» saluti a tutti
Mar Dic 23, 2008 7:12 pm Da Thalionwen

» GUIDA : CAP 1 LEZIONE 1 Elementi di base dei programmi in C [Prima Parte]
Sab Nov 29, 2008 11:44 am Da ya89

» un semplice ciao
Sab Nov 29, 2008 11:38 am Da ya89

» Aiuto per alice 7 mega
Ven Nov 14, 2008 4:03 pm Da root

» FORUM: I nuovi banner
Ven Nov 14, 2008 2:48 pm Da Thalionwen

» Zooming Ricorsivo, questo sconosciuto.
Ven Nov 14, 2008 2:43 pm Da Thalionwen

» GUIDA : LEZIONE 4 : UTILIZZARE GLI ARRAY IN C#
Ven Nov 14, 2008 1:54 pm Da ab89

» GUIDA : CAP 1 LEZIONE 1 Elementi di base dei programmi in C [Terza e Ultima Parte]
Ven Nov 14, 2008 12:41 am Da ab89

» GUIDA : CAP 1 LEZIONE 1 Elementi di base dei programmi in C [Seconda Parte]
Mer Nov 12, 2008 12:59 am Da ab89

» [PS2] Dark Cloud
Mar Nov 11, 2008 6:50 pm Da ab89

» [PC] Sacred 2
Lun Nov 10, 2008 10:49 pm Da ab89

» GUIDA : CAP 1 LEZIONE 3 INTRODUZIONE AGLI ARRAY
Lun Nov 10, 2008 1:37 pm Da ab89

Flusso RSS


Yahoo! 
MSN 
AOL 
Netvibes 
Bloglines 



PROGRAMMA : Realizzare un timer

Andare in basso

PROGRAMMA : Realizzare un timer

Messaggio Da ab89 il Lun Ott 27, 2008 4:39 pm

Realizzare questo programma significa scrivere del codice che simuli il funzionamento di un timer.
Insomma, creare un CountDown.

Generalmente ci si aspetta di vedere un tempo espresso in ore minuti e secondi che decresce ad ogni secondo fino ad arrivare a 0.
Del tipo :

0:0:5
0:0:4
0:0:3
0:0:2
0:0:1
0:0:0

Tralasciando momentaneamente come funziona il timer bisogna prima definire una base tempi iniziale.
Ossia un tempo di "scansione" delle operazioni in modo tale da frazionare il tempo di decremento del contatore.
Dato che nel nostro caso arriviamo a mostrare i secondo come unità più piccola ci conviene definire come base tempi un intervallo di 1 sec.

Detto questo passiamo a vedere l'implementazione a livello quanto meno teorico.

La logica che vado ad applicare è la seguente :

  • salvo lo stato del timer (quindi ore minuti e secondi che devono trascorrere)
  • leggo l'orario di sistema
  • salvo il valore dei secondi dell'orario
  • poi leggo l'orario, i il valore dei secondi salvati è diverso da quello nuovo (implica trascorso 1 secondo) allora aggiorno stato timer, altrimenti continuo a leggere
Infine si mostra in output il timer e si ripete il tutto Very Happy

A livello di codice, si utilizza la libreria time.h per implementare quanto appena scritto, e un oggetto struct per definire il timer Very Happy.
Infine una funzione che al passare di un secondo aggiorni lo stato del timer qualsiasi esso sia Very Happy .
Questa è la spiegazione generale e soprattutto teorica di come realizzare il programma.

Passo ora scrivere il codice Very Happy

Codice:

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

struct orologio{
    int hh,mm,ss;
};

void tick (struct orologio *o);

main(int argc, char *argv[])
{
    struct tm *orario; //orario di sistema
   
    int sec_prec = 0; //ultimo secondo letto
    int ss = 1, mm = 0, hh = 0; //secondi minuti e ore
    struct orologio o;
   
    time_t tempo; //tempo calendario di sistema   
   
    //lettura timer
   
    printf("Inserisci il tempo del timer nel formaro [hh:mm:ss] : ");
    scanf("%d:%d:%d",&o.hh,&o.mm,&o.ss);
   
    http://o.hh = hh;
    http://o.mm = mm;
    http://o.ss = ss;
   
    do
    {
        system("clear");
       
        //registra tempo calendario di sistema
       
        time(&tempo);
       
        //calcola il tempo come ora locale
       
        orario = localtime(&tempo);
       
        printf("%d:%d:%d \n", o.hh, o.mm, o.ss);
       
        sec_prec = orario->tm_sec;    //salva lo stato precedente
       
        //continua a leggere il tempo finchè non passa un secondo
       
        while (sec_prec == orario->tm_sec){
            time(&tempo);
            orario = localtime(&tempo);
        }
               
        tick(&o);
       
    }while ((o.ss >= 0 && o.mm >= 0 && o.hh >= 0));
}

void tick (struct orologio *o)
{
    o->ss --;
    if (o->ss < 0){
        o->ss = 59;
        o->mm--;
        if (o->mm < 0){
            o->mm = 59;
            o->hh--;
        }
    }
   
    return;
}
Per domande e/o chiarimenti sono a disposizione Very Happy

_________________
生きるためにもあまり変過ぎるし、死ぬためにもあまり珍し過ぎる。

What D.Gray-man Character Are You?
Hosted By theOtaku.com: Animee

avatar
ab89
Admin
Admin

Numero di messaggi : 74
Età : 29
Località : Rovigo
Data d'iscrizione : 29.09.08

Scheda personaggio
PF:

Visualizza il profilo

Torna in alto Andare in basso

Torna in alto

- Argomenti simili

 
Permessi di questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum