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