Laboratorio di Calcolo I AA2007/08
Esercitazione individuale - primo gruppo - 17/1/08


Create nell'account indicato dal docente una cartella prova_cognome e svolgete li' la prova. La prova e' valutata su 10 punti.
Se il programma non compila perdete 5 punti,
se il programma compila ma ha seri problemi in fase di esecuzione (loop infiniti, mancanza di protezioni...) perdete 3 punti,
se il programma compila, gira ma non fornisce i risultati richiesti perdete 2 punti.
I punti rimanenti possono essere ulteriormente ridotti se non sono state seguite tutte le indicazioni (ad esempio se si sceglie di non utilizzare delle funzioni), se i file header non sono protetti contro la doppia inclusione o se il programma non sia comprensibile per mancanza di commenti. Se non vi trovate sul vostro account e avete bisogno di usare come esempio programmi svolti nel corso delle esercitazioni precedenti potete trovarne degli esempi al link programmi


Un grave viene fatto cadere da una quota di 10 m al tempo t=0.
                                                                               
Alle quote 9.5,7.5,6.,5.,4.,3.5,3,2.5,2,1.5,1,.5 m sono posti dei traguardi (cellule fotoelettriche) usati per determinare il tempo di transito da una certa quota.

I tempi sono misurati da un "orologio digitale", il time to digital converter (TDC) che in questo caso ha 12 bit e un suo conteggio corrisponde a 350 microsecondi.
                                                                               
Si richiede:
                                                                               
1. di scrivere in un file func.c (con il prototipo in func.h) la funzione double legge_del_moto(double t) che dato un tempo t in secondi restituisca
h=0.5*g*t*t+v0*t+h0,
con h0=10 (metri),
g=-10 (metri/s2)
e v0=0 velocita' iniziale
                                                                               
2. di scrivere nel file esp.c il programma main che calcoli il tempo al quale il grave supera ciascun traguardo.
Cio' puo' essere fatto i vari modi, preferibilmente scrivendo una funzione per la ricerca degli zeri con il metodo di bisezione.
Il prototipo della funzione (da inserire in func.h) potrebbe essere double zeri(double (*f)(double),double quota,double tmin,double tmax,double epsilon). La funzione zeri (in func.c) , chiamata per la funzione legge_del_moto dovra' restituire il tempo t per il quale la funzione legge_del_moto
assume il valore  quota entro un'approssimazione epsilon. IN ALTERNATIVA usate il prototipo double zeri(double quota,double tmin,double tmax,double epsilon) e utilizzate direttamente nella funzione zeri la funzione legge_del_moto.
(potete modificare l'esempio sul testo par 4.3.2 che trovate anche sul sito all'indirizzo http://chimera.roma1.infn.it/SP/PROGRAMMI/cap04/cap04_bisezione.c).
In alternativa all'uso della funzione zeri (perdendo 1 punto) potete scegliere di trovare il tempo facendo variare il tempo da 0 a 1.5s in intervalli di 1 microsecondo (0.000001s), chiamando la funzione legge_del_moto e confrontando la quota raggiunta con quella dei traguardi.

3. scrivere su un file le quote dei traguardi ed i tempi corrispondenti