Ciao ragazzi
guardate questo programmino..serve per implementare la risoluzione di una equazione differenziale del primo ordine...ma al di la di questo..come si può vedere vengono utilizzate delle funzioni e il passaggio delle variabili avviene per referenza. Cosa dovrei cambiare in questo programma se volessi invece passare le variabili per valore??(mantenendo gli stessi risultati ovviam)
#include<iostream>
#include<fstream>
#include<iomanip>
using namespace std;
// typedef double DB;
typedef float DB;
void inizia(DB & x0, DB & y0, DB & dx, int & niter);
DB deriv (DB x, DB y);
void eulero(DB & x, DB & y, DB dx, int niter);
void stampa(DB x, DB y, DB dx);
int main(){
int niter;
DB x, y, dx;
inizia( x, y, dx, niter);
stampa( x, y, dx);
eulero( x, y, dx, niter);
// stampa( x, y, dx);
return 0;
}
void inizia(DB & x0, DB & y0, DB & dx, int & niter){
x0 = 0; y0 = 1; // Condizioni iniziali per x e y
dx = 0.25; // incremento x
niter = 4;
}
void eulero(DB & x, DB & y, DB dx, int niter){
for(int i = 1; i<= niter; i++){
DB der = deriv( x, y);
y = y + der * dx;
x = x + dx;
stampa (x, y, dx);
}
}
DB deriv (DB x, DB y){
// return 2 * x;
return(2 * x * y);
}
void stampa(DB x, DB y, DB dx){
cout <<setw(10)<<x<<setw(10)<<y<<setw(10)<<2*x*y<<setw(10)<<2*x*y*dx<<endl;
// cout <<setw(10)<<x<<setw(10)<<y<<setw(10)<<dx<<endl;
}