Frage von KleinerFetzen, 29

C++ programm das mit Funktionen rechnet?

Ich bin ein ziemlicher Anfänger bei c++ und soll ein Programm schreiben mit dieser Angabe:

Die Funktionen f(n), g(n) und h(n) sind für natürliche Zahlen n wie folgt definiert:
f(0) = 0

g(0) = 0

h(0) = 1

f(n) = h(n)+g(n-1)

g(n) = 2*f(n)

h(n) = n*h(n-1)

Schreiben Sie ein Programm, das die Berechnung der Funktion f für ein beliebiges n erlaubt.

Mein Programm sieht bis jetzt so aus:

        #include <iostream>
    using namespace std;
    int main () {
    int n;
cout <<"Bitte n eingeben: ";
cin >> n;
cout << f(n);

}

        int f(int n) {
            f(n)= h(n)+g(n-1);
            if(n==0) return 0;
            else return f(n);
    } ;     

    int h(int n) {
        if(n==0) return 1;
        h(n)=n*h(n-1);
        return h(n);
    };
    
    int g(int n) {
    g(n) = f(n)*2;
    return g(n);
    };

Mein Compiler sagt jedoch immer dass zb. "f was not declared in this scope"

Ich bin verwirrt, da ich es eingentlich initialisiert habe, oder?

Weiters bin ich mir sicher, dass noch irgendwo anders Fehler drinnen sind, ich weiß aber nicht wo.

Freue mich über jede Hilfe!

Antwort
von TeeTier, 6

Die Rede ist doch von "natürlichen Zahlen", also ist int schon mal nicht korrekt. Nimm unsigned stattdessen. Und dein Compiler meckert, weil die Prototypen fehlen:

// Erstmal die Prototypen:
unsigned f(unsigned);
unsigned g(unsigned);
unsigned h(unsigned);

// Dann die Implementierung:
unsigned f(unsigned n) {
return n ? h(n) + g(n - 1) : 0;
}

unsigned g(unsigned n) {
return n ? 2 * f(n) : 0;
}

unsigned h(unsigned n) {
return n ? n * h(n - 1) : 1;
}

// Kleiner Test:
int main(void) {
using namespace std;

for (unsigned i = 0; i < 10; ++i) {
cout << "f(" << i << "): " << f(i) << endl;
cout << "g(" << i << "): " << g(i) << endl;
cout << "h(" << i << "): " << h(i) << endl;
cout << endl;
}
}

Damit erhältst du folgende Ausgabe:

f(0): 0                                                                                  
g(0): 0
h(0): 1

f(1): 1
g(1): 2
h(1): 1

f(2): 4
g(2): 8
h(2): 2

f(3): 14
g(3): 28
h(3): 6

f(4): 52
g(4): 104
h(4): 24

f(5): 224
g(5): 448
h(5): 120

f(6): 1168
g(6): 2336
h(6): 720

f(7): 7376
g(7): 14752
h(7): 5040

f(8): 55072
g(8): 110144
h(8): 40320

f(9): 473024
g(9): 946048
h(9): 362880

Soweit alles klar? Falls nicht, suche bei Google mal nach "Elvis-Operator" ... das ist der einzige Punkt bei der Aufgabe, bei dem ein Anfänger Probleme haben könnte, denke ich mir. :)

Schönen Abend noch! :)

PS: Verzeih mir bitte die grauenhafte Codeformatierung, aber der WYSIWYG-Editor hier auf GF ist leider total verbuggt! ><

Antwort
von ThomasAral, 12

int f(int n) { if (n==0) return 0; else return h(n) + g(n - 1); }

so einfach:

du darfst nicht die funktion auf die linke seite der anweisung schreiben, also

a = f(n)  ist ok

aber   f(n) = a    ist nicht ok, links mit f(n) angefangen heisst du machst eine funktionsdefinition mit default rückgabewert und default parameterwert ... ich denke ist jedesmal int.

Antwort
von Maimaier, 18

https://de.wikipedia.org/wiki/Funktionsprototyp

am Anfang der Funktionen muss der Vergleich mit 0 hin, nicht erst in der Mitte oder so


Keine passende Antwort gefunden?

Fragen Sie die Community