Formsache einer Funktion verbessern - Ableitungsfunktion



  • Ich habe gelesen das eine Funktion nur einen return -Wert haben darf/soll und keine eigene Ausgabe in form eines cout mit sich führen. Da nun meine Funktion verwertbar sein soll, möchte ich sie gern umgebaut haben. Weiß aber nicht wie das geht. Das Thema ist ja wie gesagt, dass das Programm von einer Funktion die erste Ableitung ausgiebt.

    #include <iostream>
    #include <conio.h>
    using namespace std;
    
    //Diese Funktion führt die eigentliche Ableitung durch
    int ableitung(int grad, double *koeff)
    {
        double koeffA[grad];
        int i;
        for(i=0;i<grad;i++)
        {
         koeffA[i]=(grad - i)*koeff[i];
         cout << "+" << koeffA[i] << "x^" << grad-i-1;
         return 0;
        }
    }
    
    //Die main dient zur ermittelung der benötigten Daten
    int main (void)
    {
        char r;
        do
        {
        int grad;
        cout << "Grad der Funktion: ";
        cin >> grad;
        double koeff[grad];
        int i;
        cout << "Geben Sie die Koeffizienten ein (absteigende Reihenfolge der Exponenten und 0 beachten): " << endl;
        for(i=0;i<grad;i++)
        {
         cin >> koeff[i];
        }
        cout << "Ist das Ihre Funktionsgleichung: ";
        for (i=0;i<grad;i++)
        { 
         cout << "+" << koeff[i] << "x^" << grad - i; 
        }
        cout << "? Wenn ja geben sie j ein und bestaetigen Sie mit enter. Anderfalls geben Sie bitte n ein und bestätigen dies: ";
        cin >> r;
    
        cout << endl<< "Ableitung: "; ableitung(grad, koeff);
        }while(r=='n');
        getch();
        return 0;
    }
    

    Komischerweise ist im Programm doch noch ein Fehler. Wenn ich grad=3 und die 3 koeffizienten jeweils mit 2, 3 und 3 belege dann gibt das Programm 6*x^2 aus. Da fehlt somit etwas.. Wieso aber???



  • Du könntest koeffA als dritten Parameter der Funktion angeben - dann kannst du ihn nach der Berechnung weiterverwenden.

    PS: und du solltest das "return 0;" aus der Schleife rausnehmen - das beendet die komplette Funktion und damit naturgemäß auch die for()-Schleife.



  • Hallo,

    Das mit der ableitung-Funktion war doch eigentlich hier
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-143116-and-postdays-is-0-and-postorder-is-asc-and-start-is-0.html
    schon geklärt, oder?
    Mich irritiert allerdings immernoch, das der Compiler das hier akzeptiert.

    cin >> grad;
    double koeff[grad];
    

    Das entspricht eigentlich ja nicht dem Standard.



  • ich weiß. war ein versuch von mir und DevC++ nimmt es auf jeden fall hin und es ist einfacher handzuhaben als mit new zu arbeiten weil cih das eh nicht verstehe^^
    und wie kann ich koeffA als dritten parameter übergeben? Weil die werte sind ja erst nach funktionsaufruf bekannt..?



  • Du brauchst auch "nur" ein entsprechend großes Array, das du dann füllen kannst:

    void ableitung(int grad,double* koeff,double* koeffA)
    {
      ...
    }
    
    int main()
    {
      double func[10]={...};
      double funcA[10];
      ableitung(5,func,funcA);
      ...
    }
    


  • wenn man eine funktion n-ten Grades ableiten will?



  • Dann übergibst du der Funktion halt zwei Arrays mit je n Elementen (und den Grad der Funktion als ersten Parameter).



  • Wobei ein Polynom n-ten Grades eigentlich n+1 Koeffizienten hat. Für die Ableitung ist das allerdings unerheblich, da hier ja der konstante Teil wegfällt.



  • Braunstein schrieb:

    Wobei ein Polynom n-ten Grades eigentlich n+1 Koeffizienten hat. Für die Ableitung ist das allerdings unerheblich, da hier ja der konstante Teil wegfällt.

    Ich weiß, ich habs auch ergänzt gestern Nacht. Ist für die Ableitung selbst nicht relevant. Nur für die Zwischenkontrolle in der Schleife.


Log in to reply