PQ Formel
-
Hey, kann mir wer sagen wo der Fehler ist ? Ich bekomme immer falsche Ergebnisse
#include <stdio.h> #include <math.h> int main() { int p,q,x1,x2; printf("Bitte P eingeben:\n"); scanf("%d",&p); printf("Bitte Q eingeben:\n"); scanf("%d",&q); x1=(-(p/2))+sqrt((-p/2)*(-p/2)-q); printf("Ergebnis 1: %d\n", x1); system( "pause" ); }
-
Vielleicht wäre es eine gute Idee, nicht nur mit Ganzzahlen zu rechnen. Beispielsweise ist p/2 eine Ganzzahldivision (d.h. z.B. 3/2=1). Das Ergebnis x1 wird ebenfalls auf die ganze Stelle gerundet.
-
und wie änder ich das ?
Sry ich hab gestern mal versucht mich mit programmieren ausseinander zusetzen dashalb weiss ich nicht wirklich viel
-
Du musst auch darauf achten, dass der Ausdruck unter der Wurzel nicht negativ wird.
-
Aber dann würde er doch 0 oder einen Fehler geben und nicht ein anderes Ergebnis, oder ? wenn ich p=5 und q=5 eingebe kommt was mit -2,irgendwas raus, obwohl es -1,irgendwas sein müsste
-
BastiH schrieb:
Aber dann würde er doch 0 oder einen Fehler geben und nicht ein anderes Ergebnis, oder ? wenn ich p=5 und q=5 eingebe kommt was mit -2,irgendwas raus, obwohl es -1,irgendwas sein müsste
Nach dem obigen Quelltext dürfte überhaupt nichts mit "komma irgendwas" rauskommen. Und der Grund, warum der Teil vor dem Komma nicht stimmt dürfte auf die vielen Rundungsfehler zurückzuführen sein, die entstehen, weil Du nur mit Ganzzahlen rechnest.
Ändern kannst Du das, indem Du double statt int für die Variablen nimmst und sämtliche Konstanten als Dezimalzahlen angibst (2.0 statt 2). Das Formatsymbol für double ist %f (bzw. %lf bei scanf) statt %d.
P.S.:
Wenn der Term unter der Wurzel negativ ist, schlägt sqrt fehl. Der Rückgabewert ist dann nicht 0, sondern undefiniert.
-
LordJaxom schrieb:
Ändern kannst Du das, indem Du double statt int für die Variablen nimmst und sämtliche Konstanten als Dezimalzahlen angibst (2.0 statt 2). Das Formatsymbol für double ist %f statt %d.
Achtung! Bei der Eingabe ist es %lf.
-
SeppJ schrieb:
Achtung! Bei der Eingabe ist es %lf.
Danke, hab's geändert. Verdammte Ellipsen
-
Dann rechne nochmal nach, mit dem Wissen, dass 5/2 = 2 ist.
int
steht für Integer (Ganzzahl) und kann somit keine Nachkommastellen aufnehmen.
Und da 2 auch eine Ganzzahl ist wird die Berechnung p/2 als Ganzzahlberechnung durchgeführt.
-
Danke, jetzt funktionierts
Hier nochmal der Source Code:#include <stdio.h> #include <math.h> int main() { double p,q,x1,x2; printf("Bitte P eingeben:\n"); scanf("%lf",&p); printf("Bitte Q eingeben:\n"); scanf("%lf",&q); x1=(-(p/2.0))+sqrt((-p/2.0)*(-p/2.0)-q); printf("Ergebnis 1: %f\n", x1); system( "pause" ); }
Kann ich denn auch irgendwie mehr Nachkommastellen anzeigen lassen ?
Er gibt mir nur 6
-
printf("Ergebnis 1: %.10f\n", x1); // %.10f gibt 10 Nachkomastellen aus
Und vergiß nicht die Überprüfung der Wurzel auf < 0.0