Lösen quadratischer Gleichungen mit C++
-
Hallo, habe folgendes Problem:
Wie bekomme ich es hin die Gleichung a^x+bx+c=0 als Progr. auf C++
zu schreiben?
Für a,b und soll es gleichgültig sein welche Werte ich einsetze.
manchmal kriege ich aber unendlich viele Lösungen raus-> trivial
Wenn a ungleich 0 ist die Diskriminante größer/kleiner/gleich 0
und ich bekomme 2 Lösungen/1 Lösung/keine Lösung in der pq-Formel heraus.
Kann mir jemand helfen?
-
sorry die Formel ist natürlich a*x^2+b*x+c=0
-
Marius59ttp schrieb:
sorry die Formel ist natürlich a*x^2+b*x+c=0
Du musst eine Fallunterscheidung machen. Zuerst berechnest du die Diskriminante. Dann weisst du woran du bist. Je nachdem was da rauskommt, rechnest du weiter.
-
//**** Berechnung der Diskriminante *****
d = sqrt( b*b - 4*a*c ) ;So stimmts glaub ich
Aber wie gehts nu weiter mit der allgmeinen Lösung?Hab da irgendwie nicht soviel Ahnung von.
-
a*x^2+b*x+c=0
also müsste die diskriminate doch anders lauten:
(x^2+((b*x)/a)+(c/a)=0 in der normalform)
d=sqrt((b/a)/2)^2 - c/a)
oder lieg ich da falsch?
-
Wenn die Diskriminante positiv ist, gehts so:
-b +- sqrt(b^2 - 4ac) ----------------------- 2a
Bei Diskriminante = 0 kannst du das ganze ein wenig abkürzen. Es würd ja keinen Sinn machen, + oder - 0 zu rechnen, also
-b ---- 2a
Bei negativer Diskriminante müsstest du komplexe Zahlen verwenden. Wenn du das machst, siehts genauso aus wie bei einer positiven Diskriminante.
-
ohne Unterstützung komplexer Zahlen und Abfrage, ob a==0 (=> 0-Division) ist, kann mans einfach so machen:
#include <iostream> #include <cmath> using namespace std; pair<double,double> pq(double a, double b, double c) { double p = b/a, q = c/a; double diskriminante = (p*p)/4 - q; return make_pair(-p/2 + sqrt(diskriminante), -p/2 - sqrt(diskriminante)); } int main() { pair<double,double> x = pq(2,1,0); cout<<x.first<<endl; cout<<x.second<<endl; cin.get(); }
-
Danke erstmal für eure Hilfe!
Aber habe da nochwas: Wieso können die drei Funktionen(test, x1,x2) nicht genutzt werden (cannot be used as a function)?include <iostream.h>
#include <math.h>using namespace std;
int main()
{
double a;
double b;
double c;
double test;
double x1;
double x2;cout << "Quadratische Gleichungen leicht gelöst" << endl;
cout << "Allgemeine quadratische Gleichung: ax² + bx + c = 0" << endl;
cout << "Geben Sie Werte für a,b und c an (Beispieleingabe: -12 5.54 9): "
<< endl;
cin >> a >> b >> c; // Einlesen der Werte
testb / ( 2 * a )) ( b / ( 2 * a )) - c;
if ( test < 0.0)
cout << "Gleichung für angegebene Werte im Reellen nicht lösbar!" <<
endl;
else
{
x1=( -1)(b/(2*a) +sqrt((b/ (2*a)) (b/ (2a)) -c));
x2=( -1)(b/(2*a) -sqrt((b/ (2*a)) (b/ (2a)) -c));
}
cout << "Lösungen: x1 = " << x1 << " x2 = " << x2 << " ! " << endl;
system("Pause") ;
return 0;
}
-
Der Compiler denkt, Du willst einen Ausdruck als Funktion nutzen.
Marius59ttp schrieb:
test =( b / ( 2 * a )) ( b / ( 2 * a )) - c;
Da fehlt wahrscheinlich der Multiplikations-Operator, da das in Mathe so üblich ist, dass man die weglässt. In C++ muss es dann aber heissen:
[cpp] testb / ( 2 * a )) ***** ( b / ( 2 * a )) - c; [/cpp]
Das gleiche gilt für die beiden anderen Zuweisungen.
-
#include <iostream> #include <math.h> #include <conio.h> using namespace std; float potenz(float zahl) { return zahl * zahl; } int main() { float a, b, c; // Vorfaktoren float D; // Diskriminante float x1, x2; cout << " ax^2 + bx + c = 0 \n====================\n\n"; cout << "Geben Sie einen Wert fuer a ein: "; cin >> a; cout << "\nGeben Sie einen Wert fuer b ein: "; cin >> b; cout << "\nGeben Sie einen Wert fuer c ein: "; cin >> c; cout << "\n\n"; D = (potenz(b) - 4*a*c) / (4 * potenz(a)); if(D < 0) // wenn D < 0, L = {}, da ein Quadrat nicht negativ sein kann { cout << "Diskriminante = " << D; cout << "\n=> Loesungsmenge = { }"; } if(D == 0) // wenn D = 0, dann hat L einen Wert { cout << "Diskriminante = " << D << " = (x + " << b / (2*a) << ")^2"; cout << "\n=> Loesungsmenge = { " << -b / (2*a) << " }"; } if(D > 0) { cout << "Diskriminante = " << D << " = (x + " << b / (2*a) << ")^2"; x1 = sqrt(D) - b / (2*a); x2 = -sqrt(D) - b / (2*a); cout << "\n=> Loesungsmenge = { " << x1 << "; " << x2 << " }"; } cout << endl; getch(); }
-
hey wow besten dank! bis zum nächsten mal