Esercitazioni
del corso di Laboratorio
di Programmazione e Calcolo
n. 3
Utilizzo e debug della
classe
CorpoCeleste
Studio del moto di caduta di un grave e del moto di un
proiettile
Utilizzo delle istruzioni di iterazione
L'esercitazione vuole utilizzare la classe CorpoCeleste per studiare il moto di caduta di un grave o il moto di un proiettile,
soggetti solo alla forza
gravitazionale, di modulo F = mg e diretta verso il basso ( g =
9.8 m/sec2 )
L'esercitazione permette anche di effettuare il "Debug"
del metodo CorpoCeleste::calcolaPosizione(....)
Per ottenere il
risultato richiesta sara' necessario utilizzare le istruzioni di
iterazione.
Caduta di un grave
Moto di un proiettile
N.B.: I due
problemi sono concettualmete molto simili, e differiscono solo
per le condizioni iniziali
(posizione iniziale e velocita' iniziale)
Il programma dovra' stampare
una tabella con posizione e velocita' ad istanti successivi. Ad
esempio
t (s)
x (m) y (m)
vx (m/s)
vy (m/s)
0.000 0.000
1.000
0.000
-0.098
0.010 0.000
1.000
0.000
-0.098
0.020
0.000 0.998
0.000
-0.196
...........................................
...........................................
0.450
0.000
0.008
0.000
-4.410
0.460
0.000
-0.037
0.000
-4.508
Oppure descrivere il moto sotto forma
di un contatore che si aggiorna
(la prima riga indica le condizioni iniziali, la seconda e' un
contatore che si aggiorna, la
terza riassume il risultato finale
t =
0.000 s x = 0.000 m y =
1.000 m vx = 0.000 m/s vy = 0.000
m/s
t = 0.125 s x = 0.000
m y = 0.924 m vx = 0.000
m/s vy = -1.223 m/s
Tempo di caduta : 0.452 s Velocita finale : vx
= 0.000 m/s vy = -4.427 m/s
( Per scrivere ripetutamente su una stessa riga, dovete
sostituire endl
con "\r" )
Prima di
iniziare a scrivere il programma main,
Riunite due coppie insieme, lavorando in gruppi di quattro
studenti (solo per questa parte, poi continuerete
l'esercitazione lavorando al computer in gruppi di due, come
sempre)
1) Perche’
la classe CorpoCeleste può essere utilizzata per risolvere il problema indicato?
Quali metodi della
classe CorpoCeleste dovranno essere invocati per ottenere il
risultato
richiesto?
2)
Quale e’ la strategia che volete
utilizzare per ottenere il
risultato finale?
3)
Suddividetevi i compiti nel gruppo. Uno di
voi sara’ il
programma main, un altro studente
sara' un oggetto della classe CorpoCeleste, un terzo
dovra' gestire le procedure di iterazione e di controllo, ed il
quarto controllera' che tutto avvenga correttamente
a) Il
main effettui tutte le chiamate necessarie
b) I singoli oggetti eseguano quanto richiesto (se possibile!) ed invochino eventuali altri metodi
4)
Discutete quanto emerso nel corso del punto 3) e
confrontatelo
con la struttura dell’intero programma di SistemaSolare.
N.B. Il punto 3) (e l’eventuale discussione)
potra’ essere
ripetuta più volte cambiando il ruolo degli “attori” ed
in riferimento alle
diverse richiste dell’Esercitazione di Laboratorio n. 3
Scrivete
il programma main()
che esegua quanto richiesto.
Potete iniziare con valori prefissati delle condizioni inziali e
poi rendere il programma piu' flessibile introducendo i valori
da tastiera (utilizzando cin)
.
Interpretate i risultati che
ottenete in termini di tipo di tipo di moto. Provate a variare
la massa del corpo.
Provate a determinare la massima
distanza raggiunta da un proiettile (a parita' di modulo della
velocita' iniziale) in funzione dell'angolo di tiro
(usate angoli semplici, ad esempio 30 - 45 - 60 gradi, di cui
conoscete facilmente il valore di seno e coseno)