Hallo,
Hi,
ich bin gerade dabei, ein wenig c++ zu lernen, habe aber ein sehr komisches Problem bei der Funktionsübergabe eines long double. Am besten gebe ich einfach mal die source her, ich habe mit g++ kompiliert.
#include <iostream>
using namespace std;long double summe(long double s, long double *f, int n)
{
if(n>1)
Hier muss - wie schon gesagt wurde - if(n>0) stehen.
{
summe(s+*f++, f, n-1);
Zunächst: Wenn das Programm hierhin kommt, wird die Funktion beendet,
ohne einen return-Wert zurückzugeben.
Weiterhin scheint das mit dem Zeiger-Inkrement nicht zu
funktionieren, da ja an die tiefere Rekursionsebene
immer wieder f übergeben wird. In meinem Testlauf wurde
10 mal das erste Listenelement addiert.
Funktionieren tut dagegen
return summe(s+f[n-1], f, n-1);
[...]
Also im Ganzen nochmal meine geänderte Summenfunktion:
long double summe(long double s, long double *f, int n)
{
if(n>0)
{
return summe(s+f[n-1], f, n-1);
}
else
{
cout << "Berechneter Wert ist " << s << "\n" << s << ", jetzt erfolgt die funktionsuebergabe: \n";
return s;
}
}
Das ganze ist übrigens in Form einer rekursiven Funktion
reichlich kompliziert und tendeziell ressourcenfressend.
Einfacher wäre es z. B. so:
long double summe2(long double *f, int n) {
long double s(0);
do { s+= f[n---1]; } while(n);
return s;
}
Wer will, kann s+= f[(n--)-1]; auch mit Klammerung schreiben ;-)
MfG
Andreas