Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Altezza e velocità di un oggetto
Forum - C/C++ - Altezza e velocità di un oggetto

Avatar
nicola. (Normal User)
Newbie


Messaggi: 1
Iscritto: 27/05/2007

Segnala al moderatore
Postato alle 20:24
Domenica, 27/05/2007
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

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 16:20
Martedì, 29/05/2007
Codice sorgente - presumibilmente C/C++

  1. #define VEL_INIZIALE 40
  2. #define ACC_GRAVITAZIONALE 9.81



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

Codice sorgente - presumibilmente Plain Text

  1. 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

Codice sorgente - presumibilmente C/C++

  1. const float VEL_INIZIALE = x;
  2. ...



Il mio blog: https://piero.dev
PM Quote
Avatar
andry89mm (Member)
Pro


Messaggi: 128
Iscritto: 21/12/2006

Segnala al moderatore
Postato alle 12:18
Domenica, 03/06/2007
-

Ultima modifica effettuata da andry89mm il 07/07/2007 alle 12:08
PM Quote