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 Variablentypprintf("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 doublefor(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 Zeiledouble 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 deklarierstVersuche 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.