Array in Funktion
-
Hallo,
Ich bin noch ganz am Anfang vom C++ lernen und hab deshalb mal eine Frage. Also mit der Datei unten wollte ich die DGL vom harmonischen Oszillator mit dem Euler-Verfahren numerisch lösen.
In Zeile 10 wollte ich in eine Funktion ein Array mit zwei werten eingeben und ein Array mit zwei Werten als Ergebnis bekommen. Da bekomm ich jetzt immer eine Fehlermeldung. Wie kann man das anders schreiben oder wo ist bei meinem Ansatz der Fehler? Das gleiche hab ich in Zeile 27.
Vielleicht kann mir da ja jemand helfen.
Viele Grüße//Simulation Harmonischer Oszillator #include <iostream> using namespace std; // Omega festlegen double omega=1; // Funktion für rechte Seite double rs(double x_in[2]){double rhs[2]; rhs[0]=x_in[1]; rhs[1]=-omega*omega*x_in[0]; return rhs;}; int main () { int i; int n=100; double dt=0.001; double x[2]; double k[2]; //Anfangsbedingungen x[0]=0; x[1]=1; //Zeitschritt iterieren for(i=1;i<=n; i++) {k=rs(x); x[0]=x[0]+dt*k[0]; x[1]=x[1]+dt*k[1]; cout<<i*dt <<x[0];} return 0; }
-
Man kann keinen Array als Rückgabewert einer Funktion zurückgeben
-
Es gibt in c++ mehrere möglichkeiten 2 variablen aus einer Funktion zurückzubekommen..
z.B. durch pointer, indem du das array schon mit übergibst, in dem das Ergebnis stehen soll:
#include<iostream> using namespace std; double omega = 1; void rs(double *x_in,double *rhs) { rhs[0]=x_in[1]; rhs[1]=-omega*omega*x_in[0]; } int main() { double x_in_werte[2] = {1.01,3.785}; double rhs[2] = {0}; cout << "rhs[0] = " << rhs[0] << endl; cout << "rhs[1] = " << rhs[1] << endl; rs(x_in_werte,rhs); cout << "rhs[0] = " << rhs[0] << endl; cout << "rhs[1] = " << rhs[1] << endl; system("pause"); return 0; }Oder du machst es über pair (geht halt nur mit 2 werten):
#include<iostream> using namespace std; double omega = 1; pair<double,double> rs(double x_in[2]) { pair<double,double> rhs; rhs.first = x_in[1]; rhs.second = -omega*omega*x_in[0]; return rhs; } int main() { double x_in_werte[2] = {1.01,3.785}; pair<double,double> rhs; cout << "rhs.first = " << rhs.first << endl; cout << "rhs.second = " << rhs.second << endl; rhs = rs(x_in_werte); cout << "rhs.first = " << rhs.first << endl; cout << "rhs.second = " << rhs.second << endl; system("pause"); return 0; }das sind die zwei die mir jetzt auf die schnelle einfallen..
Wobei die zweite variante mit Objekten arbeitet, und ich weis nicht wie weit du jetzt genau bist mit deinen anstrengungen
dein code könnte z.B. so aussehen:
#include<iostream> using namespace std; double omega = 1; void rs(double *x_in, double *rhs) { rhs[0] = x_in[1]; rhs[1] = -omega*omega*x_in[0]; } int main () { int i; int n=100; double dt=0.001; double x[2]; double k[2]; //Anfangsbedingungen x[0]=0; x[1]=1; //Zeitschritt iterieren for(i=1;i<=n; i++) { rs(x,k); x[0]=x[0]+dt*k[0]; x[1]=x[1]+dt*k[1]; cout<< i*dt << " ; " << x[0] << endl; } system("pause"); //warten bis taste gedrückt wird... return 0; }