Programma non funzionante

di il
6 risposte

Programma non funzionante

Ciao ragazzi sto provando a fare un programmino che dato un istante iniziale t mi calcoli "t=t+dt" con "dt" fissato e mi stampi tutti i risultati. A dir la verità il programma l'ho fatto ma non funziona,cioè non mi restituisce nessun risultato..eccolo qui,mi dareste una mano perfavore?perchè non funziona?
#include <iostream>
#include <iomanip>

using namespace std;
typedef double DB;

DB t,dt,tstampa,tFINE =100;


void inizia();
void tempo(DB  t,DB  dt);
void evolvi(DB  t, DB  dt, DB tFINE);
void stampa();




main() {
inizia();
evolvi(t,dt,tFINE);
stampa();
    }

void inizia(){
t = 0.0;
dt = 0.05;
}

void tempo(DB  t,DB  dt){
 t = t + dt;
}

void evolvi (DB  t, DB  dt, DB tFINE){
while (t<tFINE){
      tempo(t,dt);
      }
} 



void stampa(){
cout<<setw(4)<<t<<endl;
}

6 Risposte

  • Re: Programma non funzionante

    Perché hai impostato delle variabili globali ma poi hai usato degli argomenti per le funzioni?

    Se usi delle variabili globali allora le funzioni devono essere

    void tempo();
    void evolvi();

    Se non vuoi usare variabili globali allora è un'altra storia ...
  • Re: Programma non funzionante

    Si hai ragione!!!comunque ho riprovato lasciando vuoti gli argomenti di tutte le funzioni.
    stavolta mi restituisce un risultato e cioè l'ultimo valore di t calcolato..(100).
    siccome 100 è il valore finale cui ho detto all'algoritmo di fermarsi quindi credo proprio che per come l'ho impostato il programma ha eseguito prima la funzione "evolvi" da 0 a tFINE e poi la funzione "stampa" ha stampato il risultato finale...come fare invece per far stampare tutti i risultati intermedi??
  • Re: Programma non funzionante

    Beh ... riflettici un attimo ... non mi sembra difficile ...

    Ovviamente dovrai visualizzarlo ogni volta che varia ... quindi ...
  • Re: Programma non funzionante

    Allora avevo pensato di fare cosi..
    richiamare la funzione stampa all'interno del ciclo while della funzione "evolvi"subito dopo aver richiamato la funzione "tempo"...in questo modo:
    void evolvi (){
    while (t<tFINE){
          tempo();
          stampa();
         }
    } 
    
    per poi richiamare,nella funzione "main" sono la funzione "evolvi ovviamente. Cosi in effetti l'ho testato e funziona.
    Cosi mi sembra di aver risolto il problema in modo poco elegante..volevo un modo per richiamare nel main entrambe le funzioni evolvi e stampa..
  • Re: Programma non funzionante

    Non è questione di eleganza ma di come organizzi il codice ...

    In quel caso dovresti fare nella funzione evolvi solamente il calcolo e spostare il ciclo while nel main.
  • Re: Programma non funzionante

    Capito!
    va bene ,grazie;)
Devi accedere o registrarti per scrivere nel forum
6 risposte