ERLEDIGT
JA
JA
ANTWORTEN
8
8
ZUGRIFFE
251
251
EMPFEHLEN
-
Hallo Forum,
ich habe ein Problem bei der Berechnung folgender Formel (Anhang).

Bei diesem kleinen Programm soll der Wert für P und Q vom User eingegeben werden.
Für P soll -5 eingegeben werden und für Q 3.
Also
P = -5
Q = 3
Leider komme ich mit meiner Berechnung nicht auf die "Musterlösung".
Musterlösung
x1 = 4.30
x2 = 0.70
Habe ich einen Fehler innerhalb meiner Berechnung, oder nutze ich den Befehl Sqrt flasch?
Ich würde mich über eure Hilfe sehr freuen.
Danke.
Hier Mein Code:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
#include <stdio.h> #include <math.h> int main() { int p, q; double x1, x2; double s; //Zwischenvar für qurzel double wurzel; //Var für Sqrt double sqrt(double wurzel); //double sqrt(double); printf("Bitte geben Sie P ein : "); scanf("%d",&p); printf("Bitte geben Sie Q ein : "); scanf("%d",&q); //Rechnung s = ( -p ^ 2 / 4 ) - q; wurzel = sqrt(s); x1 = -0.5 * p + wurzel; x2 = -0.5 * p - wurzel; //ausgabe printf("x1 = %.2f \n ", x1); printf("x2 = %.2f", x2); //x^2 + p + x + q = 0 return 0; }Geändert von Go-Autoit (04.11.11 um 12:59 Uhr) Grund: Rechtschreibung
-
Hi
vllt. gibts noch Fehler, aber einen hätt ich schon:
^ ist nicht das math. Potenzieren. (Außerdem gehört das - bei -p weg)Code cpp:1
s = ( -p ^ 2 / 4 ) - q;
Weils nur Quadrat ist:
Für höhere Potenzen kann man pow nehmen.Code cpp:1
s = ( p * p / 4 ) - q;
GrußNetiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
Super Danke
.
Das hätte ich nicht so schnell entdeckt.
Nun komme ich auf folgende Werte.
X1= 4.23
X2 = 0.77
Leider unterscheidt sich meine Lösung mit der Musterlösung.
Musterlösung
x1 = 4.30
x2 = 0.70
Kann es sein, dass ich noch einen Fehler im Code habe, oder etwas nicht beachtet hab?
Grüße
-
Hab den Code mal etwas aufgeräumt und Casts eingefügt, geht:
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
#include <stdio.h> #include <math.h> int main() { int p, q; double a, b; printf("Bitte geben Sie P ein : "); scanf("%d", &p); printf("Bitte geben Sie Q ein : "); scanf("%d", &q); //Rechnung a = -0.5 * (double)p; b = sqrt(((double)p * (double)p / 4.0 ) - (double)q); //ausgabe printf("x1 = %.2f\n ", a + b); printf("x2 = %.2f\n", a - b); return 0; }
GrußNetiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
Ich danke dir
.
Kannst du mir erklären was dies bewrikt?
a = -0.5 * >>> (double)p <<<<;
Hätte man nicht einfach p schreiben können?
-
Wenn man Kommatypen mit Nichtkommatypen verrechnet ist nicht immer ganz eindeutig,
was der Compiler macht. (In dem Fall eigentlich schon, aber um sicher zu gehen...)
Der Normalfall wäre (ohne (double)): Es wird intern aus p ein double gemacht
und dann dieses double mit dem double -0.5 multipliziert.
Das Extrembeispiel, wie es nicht sein sollte:
Weil p ja ein int ist, wird aus -0.5 ein int gemacht (=0) und dann 0 mit p multipliziert.
Die Zeile hätte ziemlich sicher ohne (double) auch funktioniert,
aber so kann man dem Compiler jedenfalls sagen, was wohin umzuformen ist.
Besser mehr casten als zu wenig.
Das Problem vorher war wahrscheinlich das
p * p / 4
in der Wurzel.
Das sind alles int, also war das Ergebnis auch ein int.
Das bei der Division eventuell Kommastellen anfallen, ist dem Computer egal.
Deshalb einfach alle drei Teile in double umformen:
(double)p * (double)p / 4.0
GrußNetiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
04.11.11 13:39 #7
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.Das nennt man Cast und es bewirkt, das der Wert der int-Variablen p in einen double Wert "umgewandelt" wird.
Ja, hätte man. Aber nur weil der andere Operand (das Literal -0.5) ein double ist und somit die automatische Typ-Beförderung (von int zu double) durchgeführt wird.
\edit: zu langsam....
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Ich danke dir. Hatte grade im Handbuch nachgeschlagen und nun erklärt sich auch mit deinem Post die Datenypumwandlung.
Danke dir.
Thread kann geschlossen werden.
Problem gelöst.
Problemlösung:
Keine Datentypumwandlung und Computer hat mit falschen Zahlen gerechnet.
Weitere Infos
-
Schließen bzw. als "Erledigt" markieren kannst du selber (und außer Moderatoren nur du):
Ein Klick auf den blau-weißen Haken unten neben "Auf Thema Antworten"
oder das "Nein" bei Erledigt oben.Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
Ähnliche Themen
-
Probleme bei der FLoat-Berechnung
Von Lautsprecher im Forum C/C++Antworten: 2Letzter Beitrag: 20.01.10, 17:03 -
Formel für Berechnung von Photovoltaik-Anlagen
Von Jellysheep im Forum JavaAntworten: 2Letzter Beitrag: 28.12.09, 13:51 -
Formel zur Berechnung einer gewissen Dauer
Von Thopeto im Forum Coders TalkAntworten: 6Letzter Beitrag: 30.04.09, 16:51 -
Probleme bei Umsetzung der Semiversus Formel
Von preko im Forum PHPAntworten: 8Letzter Beitrag: 21.04.09, 19:19 -
probleme mit formel
Von X2k im Forum Visual Basic 6.0Antworten: 8Letzter Beitrag: 23.12.04, 20:12





Zitieren


Login






