PDA

View Full Version : [C] Piccolo aiutino per semplicissimo programmino di fisica


D4rkAng3l
05-11-2008, 10:34
Ciao,
allora devo fare questo semplice programmino e avrei bisogno di qualche consiglio su come impostarlo (non voglio che me lo risolviate...poi ci penso io...ditemi solo se la mia idea va bene).
Il testo completo dell'esercizio è a questo indirizzo: http://www.roma1.infn.it/people/org...boratorio_2.pdf

Praticamente inizialmente chiederò all'utente di immettere il valore della massa di un pianeta e lo andrò a mettere in una variabile chiamata "massa_pianeta", poi chiederò all'utente di inserire il valore del raggio del pianeta e lo andrò ad inserire in una variabile chiamata "raggio_pianeta".
G invece è sempre pari a: 6.674*10^11 e la posso dichiarare come costante visto che è una costante fisica e non cambia mai.

Primo problema: G vale: 6.674 10^11 ed anche i valori da inserire per la massa e per il raggio saranno molto grandi...ad esempio massa_pianeta potrebbe valere qualcosa come: 5.9723*10^24 e raggio_pianeta potrebbe valere qualcosa come: 6.37814*10^6

Che tipo di dato devo usare? int sicuramente no...manco float credo...e sopratutto come posso fare in modo che un utente immetta nel prompt di msdos o di linux un valore espresso nella forma: valore*10^x ?!?! c'è un modo specifico per fare questa cosa?!?!

Vabbè poi una volta preso l'input credo che il resto del programma si riduca semplicemente a calcolare il valore di g con la prima formuletta e metterlo in una variabile chiamata per esempio: accelerazione_gravitazionale oppure anche g stesso...e poi usare tale valore
nella formuletta per calcolare t e mettere il valore ottenuto dal calcolo in una variabile chiamata tempo e poi stampare in output tale valore calcolato...

Mi sapete dire quindi che tipo di dato devo usare per le variabili massa_pianeta, raggio_pianeta e per la costante G (long o unsigned long andranno bene o sono ancora troppo piccoli!?!?)?e come eseguire l'input nella corretta forma con le potenze di 10?
Cioè inizialmente ho pensato che per rappresentare ognuno di questi valori potrei usare 2 variabili....una che contiene il valore che viene moltiplicato per 10^x ed uno appunto per l'esponente x...però mi sembra una rozzata...c'è un modo per poter inserire direttamente nel prompt qualcosa tipo: 6,3424342*10^x ?!?!

Grazie
Andrea

Torav
05-11-2008, 11:43
allora, immagino tu ti sia sbagliato ma ovviamente G vale 6.674 10^-11, cmq quello che ti consiglio di fare è porre G a 1 (o cmq di ordine 1) e utilizzare masse e raggi in modo che ti vengano valori sensati di g. Poi volendo riconverti tutto alla fine quando sputi fuori l'output, ma non utilizzare mai numeri del genere quando fai simulazioni, gli errori di rounding che puoi fare possono arrivare a cifre ragguardevoli...

D4rkAng3l
05-11-2008, 21:17
allora, immagino tu ti sia sbagliato ma ovviamente G vale 6.674 10^-11, cmq quello che ti consiglio di fare è porre G a 1 (o cmq di ordine 1) e utilizzare masse e raggi in modo che ti vengano valori sensati di g. Poi volendo riconverti tutto alla fine quando sputi fuori l'output, ma non utilizzare mai numeri del genere quando fai simulazioni, gli errori di rounding che puoi fare possono arrivare a cifre ragguardevoli...

non ho capito esattamente cosa intendi...perchè dovrei porre G=1 se vale 6.674 10^-11? dici perchè facendo le operazioni su cifre così grosse l'errore nelle operazioni di macchina potrebbe essere elevato?
Come faccio dopo ad utilizzare valori per masse e raggi per fare venire g sensata? te come faresti?

Torav
07-11-2008, 14:10
scusa se non ti ho risposto prima, mi ero dimenticato di questo post :stordita:
cmq, se consideri che g vale 9.82 m/s^2 la massa della terra è circa 6*10^24 kg, il raggio è 6.5*10^6 m e G 6.7*10^-11 m^3/kg*s^2, se poni G = 1 ottieni una massa di circa 1*10^13, se metti anche il raggio a 1 ti viene una massa di circa 10 (tenendo ferma g ovviamente). In questo modo vedi che, con G = 1, ti basta avere raggio e massa che non si discostino troppo da 1 e da 10 per ottenere valori dell'accelerazione gravitazionale più o meno "terrestri"