Salve a tutti, questo programma simula la caduta di un oggetto, ma verso la fine mi da un problema, dice che deve essere inserito qualcosa prima del float;
ve lo posto grazie a tutti
#include <iostream>
using namespace std;
void esegui_integrazione();
int main (int argc, char *argv[])
{
cout << "Integrazioine numerca dell'equazione del moto a = F_tot / m\n" << endl;
esegui_integrazione();
cout<< " Fine del programma\n";
system("pause");
}
/*******************************************************************************/
#define REALE float
//il tipo di virgola mobile usato nelle computazioni
#define MASSA 1.0
//la massa è intesa in kg
#define VELOCITA_INIZIALE 3.0
//velocità iniziale del corpo in metri al secondo
#define POSIZIONE_INIZIALE 5
//posizione iniziale in metri
#define T_MAX 3
//durata massima del tempo di caduta in secondi
#define ACC_GRAVITA 9.81
// è il modulo di g in m/s^2
#define A 0.1
//resistenza del mezzo A
#define B 0.1
//resistenza del mezzo B
//Asse delle poszioni y verso l'alto
/********************************************************************************/
REALE forza_gravita()
{
return -MASSA * ACC_GRAVITA;
// il meno è perchè la forza è contraria rispetto all'asse y delle posizioni
}
REALE forza_resistenza_mezzo(REALE velocita)
{
return (velocita*A)+(velocita*B*B);
}
REALE forza_totale()
{
return forza_gravita();
}
/*******************************************************************************/
#define DELTA_T_SCRITTURA 0.1
//Non scriviamo i dati dopo ogni iterazione, ma solo dopo ogni DELTA_T_SCRITTURA
REALE t_ultima_scrittura = -100;//negativo così scrive il primo valore 0
//void significa che fa ma non restituisce valori
void output_variabili( REALE t, REALE s, REALE v, REALE a )
{
if ( (t- t_ultima_scrittura) >= DELTA_T_SCRITTURA )
{
cout << t <<"\t"<< s <<"\t"<< v <<"\t"<< a << endl;
t_ultima_scrittura = t;
}
}
/*******************************************************************************/
#define DELTA_T 1E-3
//intervallo di tempo in secondi
//durante questo intervallo consideriamo che l'accelerazione sia costante
void esegui_integrazione()
{REALE accelerazione, cambiamento_velocita, velocita_iniziale, t;
REALE posizione, spostamento;
cout<< " Esecuzione\n";
t=0.0; // ISTANTE INIZIALE
velocita_iniziale= VELOCITA_INIZIALE;//la velocità iniziale del sottoprogramma prende il valore definito iniziale
posizione= POSIZIONE_INIZIALE;// posizione iniziale della caduta dell'oggetto
do{
//seconda legge di Newton
accelerazione = forza_totale(REALE velocita) / MASSA;//qui sta il problema, devo mettere li qual velocita...ma mi da errore se lo inserisco. solo che dovrebbe essere giusto!!
//Mostra sullo schermo gli attuali valori di t, s, v, a
output_variabili( t, posizione, velocita_iniziale, accelerazione );
//uso le leggi del moto uniformemente accelerato:
cambiamento_velocita = accelerazione * DELTA_T;
spostamento = velocita_iniziale * DELTA_T
+ 0.5 * accelerazione * DELTA_T * DELTA_T;
//trovo i nuovi valori di t,s e v:
t = t + DELTA_T;
velocita_iniziale = velocita_iniziale + cambiamento_velocita; //alla prossima assegnazione la velocità iniziale prende velocità iniziale + a*delta t
posizione = posizione + spostamento;
}
while(t<T_MAX);
}