Oppure

Loading
27/05/07 18:24
nicola.
Ciao,
cercando di imparare il C ho trovato quest'esercizio

L’altezza e la velocità di un oggetto che viene lanciato con una velocità
iniziale v0 e un angolo A (rispetto all’orizzonte) sono dati dalle
seguenti formule:

h(t) = v0*t*sin(A) - 0.5*g*t^2
v(t) = sqrt(v0^2 - 2*v0*g*t + g^2*t^2)

dove con '^' si indica l'elevazione a potenza. Il termine g rappresenta
l’accelerazione di gravità. L’oggetto cadrà al suolo quando h(t) = 0,
nell’istante t_suolo = 2(v0/g)sinA.
Siano dati i seguenti valori: A=30 gradi, v0 = 40 m/s, g = 9.81 m/s2.
Realizzare un programma per calcolare gli istanti in cui:
a) L’altezza non è minore di 15 m.
b) L’altezza non è minore di 15 m e contemporaneamente la velocità non
è maggiore di 36 m/s.
NB: rammentare che la funzione sin richiede l'angolo in radianti...

ho provato a farlo in questo modo

#include<math.h>
#include<stdio.h>
#include<stdlib.h>

#define PI 3.14
#define ANGOLO 30
#define VEL_INIZIALE 40
#define ACC_GRAVITAZIONALE 9.81

int main(){
float tempo,
altezza,
velocita,
radianti;

radianti = (30*PI)/180;

do{
altezza = (VEL_INIZIALE*tempo*sin(radianti));
altezza = altezza - (0.5*ACC_GRAVITAZIONALE*tempo*tempo);

velocita = VEL_INIZIALE*VEL_INIZIALE;
velocita = velocita - (2*VEL_INIZIALE*ACC_GRAVITAZIONALE*tempo);
velocita = velocita + (ACC_GRAVITAZIONALE*ACC_GRAVITAZIONALE*tempo*tempo);
velocita = sqrt(velocita);

if((altezza >= 15) && (velocita <= 36)){
printf("l'oggetto ad un istante t = %f si trova a %f metri dal suolo\n", tempo, altezza);
printf("ad una velocita di %f metri al secondo\n\n", velocita);
}

tempo = tempo + 0.1;

}while(tempo<5);

system("pause";);
}

solo che, pur non sapendo niente di fisica, io credo che la velocità debba diminuire finchè l'oggetto non sia arrivato alla massima altezza per poi aumentare e non riesco a trovare cosa ci sia di sbagliato nel mio programma, spero possiate aiutarmi

grazie
aaa
29/05/07 14:20
pierotofy
#define VEL_INIZIALE 40 
#define ACC_GRAVITAZIONALE 9.81 


Attenzione: se non ricordo male, quando esegui operazioni con la direttiva #define, ad esempio

velocita = velocita - (2*VEL_INIZIALE*ACC_GRAVITAZIONALE*tempo); 


viene eseguito un cast implicito da float a int, quindi se in questo momento tempo vale 0.4, il cast implicito lo trasforma in 0. Quindi viene fuori una moltiplicazione per 0.

Puoi risolvere cambiando le direttive define con

const float VEL_INIZIALE = x;
...
Il mio blog: piero.dev
03/06/07 10:18
andry89mm
-
Ultima modifica effettuata da andry89mm 07/07/07 10:08
aaa