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
    test 😞 b / ( 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] test 😞 b / ( 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 🙂


Anmelden zum Antworten