vuoi
o PayPal
tutte le volte che vuoi
Il programma domanda all'utente se rispetto all'aria, e' in moto la sorgente o l'osservatore,a che velocità è, e la frequenza d'onda sonora emessa,il programma esce se:
1)viene dato un input sbagliato alla prima domanda
2)la velocità in modulo eccede quella del suono Vs = 340 m/s
3)la frequenza è negativa
Le formule per la frequenza f' dell'effetto Doppler sono:
Vs * f
I. Sorgente in moto risp. all'aria a velocita' V:f' = --------
Vs - V
(Vs + V) * f
II. Oss. in moto risp. all'aria a velocita' V: f' = ------------
Vs
#include <iostream>
#include <cmath>
using namespace std;
float sorgInMoto (float, float); // se la sorgente e' in moto
float ossInMoto (float, float); // se l'osservatore e' in moto
const int V_SUONO = 340; // m/s
int main(){
float freq; // frequenza a riposo
float speed; // velocita' della sorgente o dell'osservatore
char tipo; // 'S' se si muove la sorgente, 'O' se l'osservatore
cout << "\n Effetto Doppler!!!\n" << " ------------------\n";
cout << " Digitare 's' se si muove la sorgente, 'o' se si muove
l'osservatore: ";
cin >> tipo;
if (tipo=='s' || tipo=='o' || tipo =='S' || tipo =='O'){
cout << " Inserire la velocita' (m/s) (positiva in caso di
avvicinamento): ";
cin >> speed;
//controllo sulla velocita'
if (abs(speed) >= V_SUONO){
cout << "Errore: la velocita' e' maggiore in modulo di quella
del suono.\n"; return -1;}
cout << " Inserire la frequenza 'a riposo' (Hz): ";
cin >> freq;
if (freq<0){
cout << "Errore: la frequenza deve essere positiva!\n";
return -1;}
cout << endl;
//calcoli veri e propri
if (tipo=='o' || tipo=='O')
freq = ossInMoto(speed, freq);
else freq = sorgInMoto(speed, freq);
//output finale
cout << " La frequenza risulta essere " << freq ;
return 0;}
else { //se inserito un carattere errato
cout << "Errore: dati incorretti.\n";
return -1;}
}
float ossInMoto (float vel, float nu){ //user-defined function caso 1: qui vel
e' dell'osservatore
float buffer = nu * (V_SUONO + vel) / V_SUONO;