Tabelle Polynom



  • Hallo,

    ich muss eine Hausaufgabe lösen, die Aufgabenstellung lautet:
    WIr betrachten ein Polynom p(x)=a3 x^3 + a2 x² + a1 x + a0 mit rellen Koeffizienten a3, a2, a1 und a0. Schreiben Sie ein C-Programm, das zunächst die Werte für a3,a2,a1 und a0 einliest. Danach sol eine Tabelle mit den Werten für x,p(x),p'(x) und p''(x) ausgegeben werden, und zwar von -3 bis +3 mit einer Schrittweite von 0,2. (p' bzw. p'' ist die ertse bzw. zweite Ableitung von p.)

    Ich saß jetzt schon sehr lange an der Aufgabe, komme aber irgendwie garnicht mehr weiter.
    Denn mein Programm scheitert schon darin, allein die x-Werte richtig auszugeben und gibt anstelle dieser nur Nullen aus.
    Woran kann das liegen? Was mache ich da nur falsch?

    und die Werte für p(x),p'(x) und p''(x) könnte ich dann nur mit printf-Anweisungen ausgeben. Ist das auch mit for-Schleifen zu machen?? Ich habe lange überlegt, aber ich wüsste nicht, wie man diese in for-Schleifen bringen soll, ist das möglich?
    Ich hoffe mir kann jemand helfen, wäre sehr dankbar!!

    [/code]
    #include <stdio.h>
    #include <math.h>

    double a3,a2,a1,a0;
    double p(double x)
    {
    return (a3*x*x*x) + (a2*x*x) + (a1*x) + a0;
    }

    int main()
    {
    double a3,a2,a1,a0,x;
    printf("Geben Sie für das Polynom p(x) Die Koeffizinten an:\n");
    printf("a3="); scanf("%f", &a3);
    printf("a2="); scanf("%f", &a2);
    printf("a1="); scanf("%f", &a1);
    printf("a0="); scanf("%f", &a0);
    printf("\nx | p(x) p'(x) p''(x)\n");
    printf("----------------------------------------------------------\n");

    for(x=-3;x<=3;x=x+0.2)/*Spalte AUFGABE in 0.2er Schritten!!??*/
    {
    printf("%f\n" ,&x);
    }

    return 0;
    }
    [code]



  • Noch einer, der scheint noch bessere Nerven zu haben.



  • Du hast die gleichen Fehler wie bei http://www.c-plusplus.net/forum/296401



  • Ansatzweise besser.

    Die lokalen Variablen in main (fehlt übrigens void) überdecken die globalen Variablen. Sollte also eigentlich zu einem Problem führen. Das solltest du aber sicher iwie lösen können.

    P.S. Paul23 wie 23 Jahre alt? Student oder Ausbildung? Auch egal, schlage eurer Bildungseinrichtung einen vorherigen Kurs in HTML vor, danach solltet ihr wissen, was der Unterschied von "[code ]" und "[/code ]" ist und wie man solche "Befehle" korrekt schließt.

    Edit:
    "printf("%f\n" ,&x);"
    Der klägliche Versuch deine Funktion p aufzurufen?
    printf("%f\n" ,p(x));



  • Alle Namen die ich versucht habe waren vergeben, die 23 habe ich deshalb einfach so geschrieben, eigentlich bin ich 21 Jahre alt und studiere. Habe auch erst seit einem Monat Programmierung..

    #include <stdio.h>
    #include <math.h>
    
    double a3,a2,a1,a0,x;
    double p(double x)
    {
        return (a3*x*x*x) + (a2*x*x) + (a1*x) + a0;
    }
    
    int main(void)
    {
        printf("Geben Sie für das Polynom p(x) Die Koeffizinten an:\n");
        printf("a3="); scanf("%f", &a3);
        printf("a2="); scanf("%f", &a2);
        printf("a1="); scanf("%f", &a1);
        printf("a0="); scanf("%f", &a0);
        printf("\nx               |  p(x)             p'(x)             p''(x)\n");
        printf("----------------------------------------------------------\n");
    
        for(x=-3;x<=3;x=x+0.2)/*Spalte AUFGABE in 0.2er Schritten!!??*/
        {
            printf("%f\n" ,&x);
        }
    
    return 0;
    }
    

    VIELEN DANK
    nach deinen Ratschlägen bsschen verbessert aber ich verstehe immernoch nicht, warum er nicht mindestens die x-Werte richtig ausgibt :S

    und da will ich noch nciht die Funktion aufrufen, sondern möchte nur, dass die X-Werte der for-Schleife wiedergegeben werde, also in 0.2er Schritten von -3 bis 3 die Zahlen.



  • DaRe schrieb:

    Edit:
    "printf("%f\n" ,&x);"
    Der klägliche Versuch deine Funktion p aufzurufen?
    printf("%f\n" ,p(x));

    DirkBs Antwort ist auch noch relevant für dich.

    Vllt. sollte der andere Threadersteller sich mit dir zusammentun(seid ja scheinbar von der gleichen Uni/FH) und ihr versucht euch gegenseitig ein wenig euren Programmcode um die Ohren zu hauen. Verwundert immer wieder welche Fehler man selbst so übersieht.



  • paul23 schrieb:

    ... aber ich verstehe immernoch nicht, warum er nicht mindestens die x-Werte richtig ausgibt :S

    Weil printf() nicht scanf() ist. Auch wenn der Formatstring ähnlich aussieht, erwarten sie doch gänzlich andere Parameter.
    scanf() erwartet Adressen. printf() erwartet Werte.

    printf("%f\n" , x);
                   ^ DA ist der Unterschied
    


  • scanf für double braucht %lf.
    Mit p benennt man keine Funktion.



  • achsoo, klaar lf :S irgendwie die ganze Zeit übersehen!
    Und stimmt, bei scanf speichert er ja die gescannte Zahl unter dem was hinter & steht aber hier soll er ja nur den Wert für x ausgeben..DANKE! Dumm von mir merke grad....jetzt kriege ich die x Zahlen richtig ausgegeben

    #include <stdio.h>
    #include <math.h>
    
    double a3,a2,a1,a0,x;
    double p(double x)
    {
        return (a3*x*x*x) + (a2*x*x) + (a1*x) + a0;
    }
    
    int main(void)
    {
        printf("Geben Sie für das Polynom p(x) Die Koeffizinten an:\n");
        printf("a3="); scanf("%f", &a3);
        printf("a2="); scanf("%f", &a2);
        printf("a1="); scanf("%f", &a1);
        printf("a0="); scanf("%f", &a0);
        printf("\nx\t\tp(x)\t\tp'(x)\t\tp''(x)\n");
    
        for(x=-3;x<=3;x=x+0.2)
        {
            printf("%lf\n" ,x);
        }
    
    return 0;
    }
    

    und wie kann ich die Funktion p(x) aufrufen, ausgeben lassen??
    so einfach mit printf("%lf" , p(x)) geht das irgendwie nicht. Müsste es nicht, eigentlich so gehen??
    und wie kriege ich es so hin, dass das dann immer neben der x gezeigt wird und nicht darunter??



  • Wutz schrieb:

    scanf für double braucht %lf.
    Mit p benennt man keine Funktion.

    Schau die mal die Steuerzeichen in ASCII an 😉



  • Mache ich, danke, das mit f und lf weiß ich, war ein Tippfehler, dass ich dummerweise die ganze Zeit übersehen habe.
    Aber wie gebe ich den Wert für p(x) aus? ich glaubte ja zu wissen wie es geht, aber so klappt es grad irgendwie nicht.
    Und wie kriege ich diesen Wert neben den x-Werten hin, und nicht darunter??
    Damit es auch wirklich in der Tabelle unter p(x) ist?



  • Lies dir die 'Anleitung' zu printf() durch.

    Schau dir die Bedeutung von \t und \n an.



  • wieso, habe ich \t und \n falsch verwendet???
    \t macht doch Leerzeichen und \n springt eine Zeile runter, also einen Absatz, oder nicht??



  • paul23 schrieb:

    und wie kriege ich es so hin, dass das dann immer neben der x gezeigt wird und nicht darunter??

    Du möchtest die Ausgabe ändern, also versuche selbst mal die Steuerzeichen anders einzusetzen.
    Und, ja '\n' KANN einen Absatz darstellen. Andere Systeme andere Sitten... MAC Windows und Linux/Unix machen das jeder anders. Probier da selber ruhig mal rum 😉

    '\t' ist afaik immer ein Tabulator. Glaube 4 Leerzeichen müssten das sein. Könnte aber sicher auch wieder iwie Systemabhängig sein. Wie gesagt probieren geht über studieren.



  • Der Sinn von einem Tabulator ist eigentlich, dass er auf eine bestimmte Stelle springt. Also nicht 4 Leerzeichen weiter, sondern auf eine durch 4 teilbare Position (oder sind es 8 ?).

    Zudem dürfen auch mehrere Formatspecifier im Formatstring sein.
    Und der Formatstring muss auch nicht mit \n aufhören.



  • DirkB schrieb:

    Der Sinn von einem Tabulator ist eigentlich, dass er auf eine bestimmte Stelle springt. Also nicht 4 Leerzeichen weiter, sondern auf eine durch 4 teilbare Position (oder sind es 8 ?).

    Oh ja, natürlich 🙂


Anmelden zum Antworten