quadratische Gleichung was ist hier falsch bitte?
-
ich muss ein program schreiben aber es klappt nich so wie ich geschrieben habe
kann jemand sage wo stehn meine fehlern,es gibt bestimmt nicht nur eine
ich habe noch nicht den operator if gelent und kann ich nicht verwenden#include <cmath> #include <iostream> using namespace std; int main(int argc, char *argv[]) { double p,q,x1,x2,d;//x^2 + px + q d = diskriminante; cout << "p: "; cin >> p; cout<< "q: "; cin >> q; double D=(pow(p/2,2)-q)>0 ? (-p/2)+d :(-p/2)-d ; cout << "X1" << ( D<0 ? " " : " " ) << (-p/2)+d << ( D<0? 'i' : ' ' ) << endl; cout << (D==0? "": "") << (p/2)+d << (D==0 ? '.':'.') << endl; cout << "Diskriminante = " << D << (pow(p/2,2)-q) ; x1 =(-p/2)+d ; x2 = (-p/2)-d; cout << "\n=> Loesungsmenge = { " << x1 << "; " << x2 << " }"; system("PAUSE"); return EXIT_SUCCESS; }wäre sehr dankbar für jede hilfe
mfg
anddy
-
kann jemand mir helfen??
-
anddy007 schrieb:
kann jemand mir helfen??
Was soll den dein Programm machen?
mfg.
-
anddy007 schrieb:
double D=(pow(p/2,2)-q)>0 ? (-p/2)+d :(-p/2)-d ;Hallo Anddy
an dieser Stelle liest Du aus der uninitialisierten Variable 'd'. 'd' und 'D' sind zwei verschiedene Variablen, da C++ case-sensitive ist - also zwischen Klein- und Groß-Schreibung unterscheidet.
Der Ausdruck für das Ziehen einer Wurzel (z.B. aus double x) heißt sqrt( x ).
Versuche zunächst alle benötigten Variablen also D und x1 und x2 zu berechnen und verfahre dann in Abhängigkeit ihrer Werte. Und es reicht auch hin sie genau einmal zu berechnet; das macht das Programm nicht nur schneller (spielt hier wirklich keine Rolle) sondern auch übersichtlicher.
Gruß
Werner
-
@joomoo so lautet die aufgabe:
Für eine quadratische Gleichung der Form lautet die Lösungsformel . Die Diskriminante D errechnet sich nach der Formel . Die Lösungen der quadratischen Gleichung hängen von D wie folgt ab: : und sind reell und verschieden, : und sind reell und gleich, : und sind konjugiert-komplex. Schreiben Sie ein Programm, welches die Werte von p und q in gleichnamige Variablen des Typs double einliest und alle Lösungen, auch die konjugiert-komplexen, ausgibt. Kennzeichnen Sie eine komplexe Zahl in der Ausgabe durch ein nachgestelltes »i«.
-
@Werner Salomon
ja d und D sind uterschidlich aber wenn ich 'd' schreibe das program zegt fehler
double instalirung von var `d`deshalb habe ich verändert
aber das prog ist falsch wel zeigt nicht die richtige werte

-
Wenn d die Diskriminante sein soll, dann musst Du sie auch berechnen:
d = pow(p/2,2)-q;Erst danach kannst Du Deine Variable D berechnen.
Mir ist aber nicht klar, wass Du mit D bezwecken willst. Wenn d < 0, dann hast Du keine Nullstellen, wenn d = 0, dann hast Du eine Nullstelle, wenn d > 0, dann hast Du zwei Nullstellen (-p/2 +/- sqrt(d)).
siehe z.B. http://de.wikipedia.org/wiki/Pq-Formel
-
anddy007 schrieb:
@Werner Salomon
ja d und D sind uterschidlich aber wenn ich 'd' schreibe das program zegt fehler
double instalirung von var `d`deshalb habe ich verändert

.. aber das ist doch keine Lösung
- was soll 'd' den sein? und was willst Du mitanddy007 schrieb:
double D=(pow(p/2,2)-q)>0 ? (-p/2)+d :(-p/2)-d ;bezwecken?
Gruß
Werner
-
#include <cmath> #include <iostream> using namespace std; int main(int argc, char *argv[]) {/*sowei bin ich aber ich weiß nicht was ich schreiben muss damit ich den determinane werte rechnet D<0,D=0,D>0 */ double p,q,x1,x2,d;//x^2 + px + q d = diskriminante; cout << "p: "; cin >> p; cout<< "q: "; cin >> q; double D=(pow(p/2,2)-q)>0 ? -p/2 + sqrt((p/2)*(p/2) - q) : -p/2 - sqrt((p/2)*(p/2) - q) ; cout<< "x1: " <<"=" << -p/2 + sqrt((p/2)*(p/2) - q)<< endl; cout<< "x2: " <<"=" << -p/2 - sqrt((p/2)*(p/2) - q)<<endl; system("PAUSE"); return EXIT_SUCCESS; }
-
Hallo Anddy,
Das Einlesen von 'p' und 'q' war ja Ok
#include <cmath> #include <iostream> using namespace std; int main() { double p,q; //x^2 + px + q cout << "p: "; cin >> p; cout<< "q: "; cin >> q;Die Parameter (int argc, char *argv[]) kannst Du weglassen, da Du sie nicht benötigst. Als nächstes bestimmst Du die Diskriminante
double D = (p/2)*(p/2) - q;und nichts anderes. Dann ist natürlich zu überprüfen, ob dieser Wert >0, ==0 oder <0 ist.
Du schreibst, dass Du kein if benutzen kannst - solltest Du hier aber tun:if( D > 0.0 ) // wenn der Wert von D größer als 0 ist { // dann ... cout<< "x1: = " << p/2 + sqrt(D) << endl; // wert für 1. cout<< "x2: = " << p/2 - sqrt(D) << endl; // und 2. Lösung ausgeben }lt. Deiner Aufgabenstellung sollst Du auch die anderen Fälle abdecken. In C++ geht es dann so weiter
else if( D == 0.0 ) { cout<< "x2: = " << p/2 << endl; } else // hier kann D nur kleiner als 0 sein { cout<< "x1: = " << p/2 << " + i * " << sqrt(-D) << endl; cout<< "x2: = " << p/2 << " - i * " << sqrt(-D) << endl; } system("PAUSE"); return 0; // 0 ist ok }Gruß
Werner
-
danke aber ich habe den if operator noch nicht gelernt
deshalb waollte ich mit
auswahloperator oder( Fragezeichenoperator, ternärer Operator oder Bedingungsoperator) diese aufgabe lösen
mfg
anndy
-
if() ist kein Operator
(und wo lernst du denn, daß solche Bonus-Eigenschaften wie ?: eher durchgenommen werden als die Programmier-Grundlagen (if oder Schleifen)?)*versucht, das if()-Beispiel in ein ?: umzuwandeln*
cout<< (D<0) ? "keine Lösung"<<endl : (D>0) ? "Zwei Lösungen: x0="<< p/2+sqrt(D) <<", x1="<< p/2-sqrt(D) <<endl : "Eine Lösung: x="<< p/2 <<endl;
-
an der uni eistieg in c++
ist sehr schwer diese(?:) zu verstehn if glaube ich ist einfaecher
ich habe wieder werzucht aber es klappt nicht sch......
ich habe den text in tutorium 100 mal gelesen aber dort es gibt keine konkrete
bsp
sind einige bsp die einfach sindmfg anndy
-
so sollte sein
[cpp]ist sehr schwer diese( ? : )zu verstehn if glaube ich ist einfaecher[cpp]
-
anddy007 schrieb:
ist sehr schwer diese ( ? : ) zu verstehn if glaube ich ist einfaecher
Ja, if() ist einfacher zu verstehen und idR auch flexibler, aber wenn du auf ?: bestehst, mußt du da durch.