INTRODUZIONE ALLA PROGRAMMAZIONE IN C



Times Up!!



L'ultimo argomento che verra' affrontato in questo corso e' quello degli accessi al time del clock con le chiamate di sistema UNIX. L'utilizzo delle funzioni di time include:

time_ttime(time_t*tloc) - ritorna il tempo, misurato in secondi, a partire da 00:00:00 GMT, Jan. 1, 1970. Se "tloc" non e' nullo, il valore di ritorno viene anche memorizzato nella locazione a cui punta tloc. time() ritorna il valore del tempo, in caso di successo. In caso di insuccesso, ritorna (time_t) -1. "time_t" risulta definito come tipo long(int) nei file header e . int ftime(struct timeb *tp) - riempie una struttura puntata da tp, come definito in : struct timeb {time_t time; unsigned short millitm; short timezone; short dstflag; }; La struttura contiene il tempo espresso in secondi a partire dall'epoca, con l'intervallo di massima precisione che arriva fino a 1000 millisecondi, il fuso orario locale (misurata in minuti in direzione ovest a partire da Greenwich) ed un flag che, se non e' uguale a 0, indica l'ora legale applicata localmente negli appropriati periodi dell'anno. In caso di successo, ftime() non ritorna alcun valore utile, mentre ritorna -1 in caso di errore. Altre due funzioni definite in "#include <time.h>" sono: char *ctime(time_t*clock) char *asctime(struct tm *tm) ctime() converte un long integer (puntato da clock) ad una stringa di 26 caratteri nella forma: Sun Sep 16 01:03:52 1973 asctime() ritorna un puntatore alla stringa. Esempio 1: Tempo (in secondi) per eseguire alcune operazioni: /* timer.c */ #include <stdio.h> #include <sys/types.h> #include <time.h> main() {int i; time_t t1,t2; (void) time(&t1); for (i=1;i<=300;++i) printf("%d %d %d \N",1,i*i,i*i*i); (void) time(&t2); printf("\n Time to do 300 squares and cubes = %d seconds \n", (int)t2-t1); } Esempio 2: Settaggio di un gruppo di numeri casuali: /* random.c */ #include <stdio.h> #include <sys/types.h> #include <time.h> main() {int i; time_t t1; (void) time(&t1); srand48((long)t1); /* use time in seconds to set seed */ printf("5 random numbers (Seed = %d):\n",(int)t1); for (i=0;i<5;++i) printf("%d", lrand48()); printf("\n\n"); /* flush print buffer */ } lrand48() ritorna dei log integers non negativi uniformemente distribuiti nell'intervallo (0, 2**31). Una funzione simile drand48() ritorna numeri a doppia precisione compresi nel range [0.0, 1.0]. srand48() setta l'origine per questi generatori di numeri random. E' importante avere gamme diverse quando si richiamano le funzioni, altrimenti verra' generato lo stesso set di numeri pseudo-random. time() fornisce sempre un'unica gamma d'origine.