Funktion aufrufen



  • Hi,
    muss n Programm umschreiben. Das eigentliche Programm berechnet die Nullstelle der Funktion f(x)=x5-5x3-4x^2+10x+51 über Numerik
    Jetzt soll ich das Programm so abändern, dass die Funktion "als separate Funktion deklariert wird"
    Mit Funktionen hatte ich vorher keinen Kontakt.
    HILFE!



  • Du hast schon mindestens eine Funktion angelegt - namens main(). Analog kannst du beliebige andere Funktionen deklarieren:

    double polynom(double x)
    {
      return pow(x,5)-5*pow(x,3)+10*x+51;
    }
    
    int main()
    {
      ...
      double pos = ...;
      double res = polynom(pos);//und damit kannst du dann weiter rechnen
    }]
    


  • klingt schon ganz gut soweit. Hab jetzt
    double polynom(double x)
    {
    return pow(x,5)-5*pow(x,3)+10*x+51;
    }

    vor der eigentlichen main eingefügt.

    Jetzt die Frage: Was ist "pos" und was ist "res"?



  • Xands schrieb:

    Jetzt die Frage: Was ist "pos" und was ist "res"?

    Das sind zwei Variablen, in denen du den aktuellen x-Wert für deine Nullstellen-Bestimmung und den dazugehörigen y-Wert unterbringen kannst (leider kenne ich dein bisheriges Programm nicht, da mußte ich raten :D).



  • ganz ehrlich gesagt versteh ichs immernoch nicht ganz.
    Kannst vllt n Beispiel machen, n kompletten Quelltext, hab ja kein Plan, was ich wohin schreibe...
    Danke 🙂



  • Ich kann's versuchen, aber das wird jetzt keine Nullstellen-Berechnung:

    #include <cmath>
    #include <iostream>
    using namespace std;
    
    //das hier ist deine Funktion - die übernimmt einen x-Wert und liefert den zugehörigen Funktionswert:
    double polynom(double x)
    {
      return pow(x,5)-5*pow(x,3)+10*x+51;
    }
    
    //das Hauptprogramm:
    int main()
    {
      cout<<"x\ty\n";
      for(int i=0;i<100;++i)
        cout<<i<<'\t'<<polynom(i)<<endl;//wir lassen die Funktionswerte an der aktuellen Stelle berechnen und geben sie als Wertetabelle aus
    }
    

    Ich war nach deinem Eröffnungspost davon ausgegangen, daß du bereits einen funktionsfähigen Ansatz zur Nullstellenberechnung hast (Intervallhalbierung o.ä.*) - da müsstest du nur noch die Berechnung deiner Zwischenwerte ersetzen durch den entsprechenden Funktionsaufruf.

    * Newton wäre etwas komplizierter, weil du noch die Ableitung der Funktion brauchst (und die kann C++ nicht automatisch bestimmen).



  • das fertige und vollfunktionsfähige Prog hab ich schon, nur dass ich voll kein Peil hab, wo ich bzw wie ich die Sachen ersetze. Hab da was gelesen mit"Funktionsprototyp" vor dem ganzen
    dann Funktionsdeklaration usw, und da weis ich halt gar nicht wo ich des hinschreiben soll.
    Am schönsten und besten wäre es, wenn ich dir mein Quelltext schicken kann und du mir das auskommentiert einfügen würdest...

    Warum schreibst du '\t' nur mit Hochkommas? Muss ich das nicht mit "\t" schreiben?

    i++ ist i=i+1
    aber was ist ++i ?

    Grüße



  • Xands schrieb:

    das fertige und vollfunktionsfähige Prog hab ich schon, nur dass ich voll kein Peil hab, wo ich bzw wie ich die Sachen ersetze. Hab da was gelesen mit"Funktionsprototyp" vor dem ganzen
    dann Funktionsdeklaration usw, und da weis ich halt gar nicht wo ich des hinschreiben soll.
    Am schönsten und besten wäre es, wenn ich dir mein Quelltext schicken kann und du mir das auskommentiert einfügen würdest...

    Das mag ich aber nicht. Schließlich sollst du auch nicht mitdenken 😉

    Im Prinzip hast du dort oben schon die Funktion - dazu einen Prototyp zu bilden dürfte nicht so schwer sein ( double polynom(double); ). Jetzt mußt du nur noch in deinem Programm die Stelle finden, wo du den Funktionswert berechnest - und diesen Block ersetzen durch den Funktionsaufruf.

    Warum schreibst du '\t' nur mit Hochkommas? Muss ich das nicht mit "\t" schreiben?

    Muß man nicht - cout schluckt auch Einzelzeichen 😉

    i++ ist i=i+1
    aber was ist ++i ?

    Im Endeffekt das selbe, nur der Rückgabewert des Ausdrucks (der hier aber nicht betrachtet wird) unterscheidet sich.


Anmelden zum Antworten