C-Programm



  • [code]Hey und zwar habe ich eine Hausaufgabe ,bei der ich nicht so richtig voran komme!!!! 😕
    Also in der Hausaufgabe müssen wir das Polynom P(x)=a3*X3+a2*x2+a1*x+a0 betrachten.Wir müssen ein c-Programm schreiben ,dass die reelen Koeffiziente a3 ,a2,a1,a0 einliest,in der vorne eine zahl n.
    Es sol eine Tabelle mit den Werten für x,p´(x),und p"(x)ausgegeben werden
    und zwar von -3bis+3 mit einer schrittweite von 0,2.
    Also hier meine Hausaufgabe :
    Ich wäre sehr erfreut wenn sie mir ein paar tipps geben konnten.

    include<stdio.h>
    #include<math.h>

    int main()
    {
    double a3,a2,a1,a0;
    double p(x),p'(x),p"(x);
    double x;
    schrittweite=0,2;

    printf("a3= ");
    scanf("%d",&a3);
    printf("a2= ");
    scanf("%d",&a2);
    printf("a1= ");
    scanf("%d",&a1);
    printf("a0= ");
    scanf("%d",&a0);

    for(x=-3;x<=3;x=x+0,2)//Zeile ausgabe
    {printf("%lf\n",x);

    for(??????????)
    `
    p(x)=a3*x*x*x+a2*x*x+a1*x+a0;
    {printf("%lf\n",p(x));}

    P'(x) = 3*a3*x*x+2*a2*x+a1;//Berechnung der 1.Ableitung
    {printf("%lf\n",p'(x));}

    p(x)"=6*a3*x+2*a2;//Berechnung der 2.Ableitung
    {printf("%lf\n",p"(x));}

    }
    printf("\n");
    }
    return 0;
    }



  • PROG. schrieb:

    include<stdio.h> //scheinst es ja recht fix hier reingerickelt zu haben: missing #
    #include<math.h>

    int main()
    {
    double a3,a2,a1,a0;
    double p(x),p'(x),p"(x); //bezweifle, dass dein Compiler mit den Namen zurecht kommt
    double x;
    schrittweite=0,2; //kein Variablentyp

    printf("a3= ");
    scanf("%d",&a3); // %d falscher specifier für double
    printf("a2= ");
    scanf("%d",&a2); // %d falscher specifier für double
    printf("a1= ");
    scanf("%d",&a1); // %d falscher specifier für double
    printf("a0= ");
    scanf("%d",&a0); // %d falscher specifier für double

    for(x=-3;x<=3;x=x+0,2) // wozu die nicht richtig angelegte Variable Schrittweite, wenn du jetzt hartcodierst
    {printf("%lf\n",x);

    ...

    printf("\n");
    }
    return 0;
    }

    Ich hoffe du willst nicht iwie Programmierer etc. werden. Denn dann würde ich dir raten, dich mal richtig reinzustressen 😉

    Fang nochmal bei den Grundlagen an. Selbst wenn die Aufgabe bis morgen auf seien könnte, würde es dir gut tun, dir die Zeit für die Grundlagen zu nehmen.



  • Was sagt denn der Compiler dazu?
    Gerade die Zeile

    double p(x),p'(x),p"(x);
    

    1. Ist ' in Bezeichnern nicht erlaubt.
    2. Sind Bezeichner mit () dranm Funktionen. Und zwar von C, nicht mathematische.

    Du solltest die also in

    double p, p1 ,p2;
    

    ändern.



  • Na dann fangen wir doch mal vorne an:
    - include braucht ein #
    - wie schon erwähnt, kennen nur Funktionen (); diese mathematische Schreibweise versteht C nicht; -> double p, p1, p2;
    - Kommazahlen werden nicht durch Komma, sondern durch Punkt getrennt
    - je nach Compiler und verwendeter Mathe-Funktion brauchst Du eventuell ein "-lm" am Ende des Compile-Aufrufs (gcc -o programm programm.c -lm)
    - scanf liest mit %d keine doubles ein, sondern Ganzzahlen. %f steht für floats / doubles
    - im scanf-Aufruf solltest Du lieber " %f" statt "%f" verwenden - das Leerzeichen vor dem % "verschluckt" das newLine, das vom Enter-Drücken noch im Eingabepuffer steht und von einem "%f" nicht angenommen wird.
    - die for-Zeile mit der schrittweite: Variable benutzen, wenn Du sie schon deklarierst

    Versuche so weit wie möglich in funktionierendem C-Quellcode auszudrücken, was Du möchtest. Wo Du nicht weiter weißt, benutze aussagekräftigen Pseudocode à la "Schleife: solange x ausgeben, bis y gleich 0"
    Ansonsten überlege Dir, welche Rechenschritte notwendig sind und bau die dann in C nach.

    #include<stdio.h>
    #include<math.h>
    
    int main()
    {
    double  a3, a2, a1, a0;
    double  p, p1, p2;
    double  x;
    double schrittweite=0.2;
    
    printf("a3= ");
    scanf(" %f",&a3);
    printf("a2= ");
    scanf(" %f",&a2);
    printf("a1= ");
    scanf(" %f",&a1);
    printf("a0= ");
    scanf(" %f",&a0);
    
    for(x=-3;x<=3;x=x+schrittweite)//Zeile ausgabe
    {
       printf("%lf\n",x);
    }
    
    for(??????????) p=a3*x*x*x+a2*x*x+a1*x+a0;
    {
       printf("%lf\n",p);
    }
    
    p1 = 3*a3*x*x+2*a2*x+a1;//Berechnung der 1.Ableitung
    {
       printf("%lf\n",p1);
    }
    
    p2=6*a3*x+2*a2;//Berechnung der 2.Ableitung
    {
       printf("%lf\n",p2);
    }
    
    }
    printf("\n");
    }
    return 0;
    }
    


  • h0rst schrieb:

    - scanf liest mit %d keine doubles ein, sondern Ganzzahlen. %f steht für floats / doubles

    Der zweite Satz ist falsch!

    Bei scanf() steht %f für float und %lf für double.
    Bei printf() steht %f für float und double



  • h0rst schrieb:

    - im scanf-Aufruf solltest Du lieber " %f" statt "%f" verwenden - das Leerzeichen vor dem % "verschluckt" das newLine, das vom Enter-Drücken noch im Eingabepuffer steht und von einem "%f" nicht angenommen wird.

    Das ist totaler Unsinn und falsch.
    Geh mal selber nochmal in die Schule, bevor du anderen Leuten solchen Quatsch erzählst.



  • @DirkB: Danke für die Korrektur!

    @Wutz: Solange es Dir jetzt besser geht...
    Ich hatte da etwas in der Art in Erinnerung:

    DirkB schrieb:

    Probier mal

    scanf(" %[^\n]",suche); 
    //     ^ Da ist ein Leerzeichen
    

    Das Leerzeichen am Anfang überliest die Whitespaces (das \n von der Zahleneingabe) und zumindest ein ' ist zuviel (eher beide).

    Sollte sich das nicht auch auf Zahleneingaben beziehen, tut's mir leid.


Anmelden zum Antworten