Esercitazioni
del corso di Laboratorio di Programmazione e Calcolo
n.
4
Uso
delle istruzioni di selezione
Attenzione: il programma di questa esercitazione verra' valutato
controllate che nella HOME directory sia presente il file con i vostri nomi
create una sottodirectory es_4
spostatevi in es_4 Solo i files contenuti in /home/did.../es_4 verranno presi in considerazione!
copiate nella directory es_4 i file CorpoCeleste.h e CorpoCeleste.cc che avete scritto durante le scorse esercitazioni
usate emacs per creare il codice del programma richiesto (esempio: emacs esercit_4.cpp &): ricordatevi che ogni programma dovra' iniziare con una riga di commento in cui indicherete i nomi dei componenti del gruppo presenti all'esercitazione
il programma verra' valulatato se funziona (compilazione, linking e corretta esecuzione secondo quanto richiesto) e in base alla chiarezza con cui e' scritto (inserite alcuni commenti nel testo e organizzate iterazioni e selezioni in maniera chiara)
L'esercitazione vuole aiutarvi ad acquisire una maggiore familiarita' con la programmazione ad oggetti (attraverso l'uso della classe CorpoCeleste) e a fornirvi l'occasione di utilizzare le istruzione di selezione if oppure if ... elseif ... else. Per svolgere quanto richiesto dall'esercitazione sara' necessario utilizzare anche procedure di iterazione gestite dall'istruzione for e da while o do ... while. Sara' inoltre utile utilizzare la libreria cmath per poter calcolare le potenze ed ottenere il valore di pi greco. Potreste inoltre utilizzare degli array per memorizzare le diverse costanti.
Una biglia di diametro d = 1 cm e di densita' rho viene lasciata cadere da un'altezza h dentro una vasca che contiene un un liquido viscoso, ad esempio olio minerale o glicerina. La velocita' iniziale della sfera e' quindi nulla, mentre per il calcolo della velocita' di ingresso nella vasca si puo' usare il programma elaborato nella esercitazione precedente oppure utilizzare la formula analitica
vx = 0 ; vy = -sqrt(2*g*h) [ sqrt indica la radice quadrata ]
Il problema si riduce quindi a studiare il moto di una sfera che entra verticalmente in un liquido con una velocita' iniziale v le cui due componenti hanno il valoe indicato sopra.
Le forze a cui e' soggetta la sfera sono:
i) Forza di gravita'
FG = m · g
diretta verso il basso
g = 9.8 m/s2 -
m e' la massa del corpo
ii) Forza
idrodinamica FK =
6*π*k*R*|v|
diretta lungo la direzione del moto ed in senso opposto alla
direzione del moto
(questa relazione puo' essere usata per studiare questo
problema. In altri casi e sotto diverse condizioni, e' necessario
usare una diversa formulazione)
R e' il raggio della sfera
k e' una costante, detta viscosita', che dipende dal fluido. Ad esempio ( https://it.wikipedia.org/wiki/Viscosit%C3%A0 )
Glicerina 1.2 N s/m2
Olio Minerale (SAE 40) 0.32 N s/m2
Sciroppo di Mais 1.38 N s/m2
iii) Forza di Archimede
FA = d · Vol
· g
diretta verso l'alto -
d e' la densita' del fluido nel quale si muove il corpo
Glicerina 1249 kg/m3
Olio Minerale (SAE 40) 860 kg/m3
Sciroppo di Mais 1400 kg/m3
Supponete inizialmente che la sfera sia di Ferro (Densita' 8000 kg/m3 )
Scopo del programma e' determinare la velocita' con cui la pallina raggiunge il fondo della vasca. Potete assumere che la vasca sia alta 50 cm e che la sfera venga lancitaa da un'altezza di un metro.
1. Potete inizare scegliendo un tipo di fluido
2. Successivamente costruite una tabella in cui la velocita' finale viene calcolata per i tre fluidi
Glicerina v = ...... m/s
Olio Minerale (SAE 40) v = ...... m/s
Sciroppo di Mais v = ...... m/s
3. Potete ripetere i punti 1 e 2 precedenti supponendo che la sfera sia di Alluminio (Densita' 2700 kg/m3 )
Sfera di Ferro
Glicerina v = ...... m/s
Olio Minerale (SAE 40) v = ...... m/s
Sciroppo di Mais v = ...... m/s
Sfera di Allumino
Glicerina v = ...... m/s
Olio Minerale (SAE 40) v = ...... m/s
Sciroppo di Mais v = ...... m/s
Osservazioni:
1. Per affrontare il punto 1, utilizzate il programma scritto durante la scorsa esercitazione, inserendo le modifiche (poche) che ritenete necessarie.
2. per affrontare il punto 2, potete utilizzare un vettore per le densita' del fluido ed un ciclo for
3. per affrontare il punto 3, potete utilizzare un altro vettore per le densita' delle sfere ed un ulteriore ciclo for
- - - - - - - - - -
Per ottenere il risultato richiesto, non e' strettamente necessario utilizzare l'istruzione di seezione if
Potreste pero' provare ad utilizzarla in sede di assegnazione delle densita', nel caso 1:
........................
string materiale ;
double rhomat ;
cout << " Assegnare il materiale (Ferro o Alluminio) " << endl ;
cin >> materiale ;
if(materiale=="Ferro" || materiale=="ferro") {
rhomat= 8000 :
} else if(materiale=="Alluminio" || materiale=="alluminio") {
rhomat = 2700 :
} else {
cout << " Materiale non noto " << endl
<< " Programma interrotto " << endl :
return 0 ;
}
.........................
- - - - - - - - - - - - -
Materiale |
Densita (Kg/m3) |
Gomma Rigida |
150 |
Legno |
500 |
Alluminio |
2700 |
Ferro |
8000 |
Tabella 1. Valori
approssimati delle densita' di alcuni materiali
Potete
utilizzare un array a 2 componenti
per memorizzare i valori della densita' dei materiali ( double
rho[2] ) ed il
loro nome ( string
mater[2] )
Per il loop potete
effettuare il controllo sulla posizione quando il corpo si trova in
aria e su posizione e velocita' quando si trova in acqua.
Il
programma dovebbe avere questa struttura (per
il punto 1)
i)
dichiarazione di tutte le variabili necessarie
(iniziate con quelle che ritenete utili, e poi, a mano a mano che
emerge la necessita' di altre variabili, aggiungetele)
ii)
inizializzazione delle variabili ai loro valori
iii) istanza di un oggetto di tipo CorpoCeleste
iv) ciclo while nel
fluido (come nella scorsa esercitazione) (pero' con i valori delle
forze nel fluido)
v)
stampa dei risultati finali