C++ P/Q-Formel berechnen



  • Hallo Leute
    Ich habe von der Schule den Auftrag ein Programm zu schreiben, welches die Nullstellen folgender Funktion ausrechnen kann: f(x)=x²+bx+c

    Folgendes habe ich als Code aufgestellt:

    #include "stdafx.h"
    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    double p;
    double q;
    double x1;
    double x2;
    double wurzel;
    
    int main()
    {
    	cout << ("Geben Sie bitte den Wert P ein:	") << endl;
    	cin >> p;
    	cout << ("Geben Sie bitte den Wert Q ein:	") << endl;
    	cin >> q;
    
    	wurzel = sqrt((p / 2) * (p / 2) - q);
    
    	if (wurzel < 0)
    	{
    		x1 = 0;
    		x2 = 0;
    	}
    	else
    	{
    		x1 = -p / 2 + wurzel;
    		x2 = -p / 2 - wurzel;
    	}
    
    	cout << ("Nullstelle 1=	");
    	cout << x1 << endl;
    
    	cout << ("Nullstelle 2=	");
    	cout << x2 << endl;
    
    	cout << ("Druecken Sie bitte eine beliebige Taste zum beenden!");
    	system("pause>nul");
        return 0;
    }
    

    Nur wird mir leider WENN der Wurzelwert kleiner als 0 ist, folgendes ausgegeben

    Nullstelle 1=   -nan(ind)
    Nullstelle 2=   -nan(ind)
    

    Wieso wird dann nicht ausgegeben:

    Nullstelle 1=   0
    Nullstelle 2=   0
    

    Ich bedanke mich schonmal für eure Hilfe 😋



  • vor dem wurzeln testen, ob (p / 2) * (p / 2) - q kleiner als 0 ist



  • So würde dann das überarbeitete aussehen:

    #include "stdafx.h"
    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    double p;
    double q;
    double x1;
    double x2;
    double wurzel;
    char x3;
    
    int main()
    {
    	cout << ("Geben Sie bitte den Wert P ein:	") << endl;
    	cin >> p;
    	cout << ("Geben Sie bitte den Wert Q ein:	") << endl;
    	cin >> q;
    
    	if ((p / 2) * (p / 2) - q < 0)
    	{
    		cout << ("Keine Nullstellen vorhanden!");
    		cout << "" << endl;
    		cout << ("Beliebige Taste zum Beenden druecken!");
    		system("pause>nul");
    		return 0;
    	}
    	else
    	{
    		wurzel = sqrt((p / 2) * (p / 2) - q);
    		x1 = -p / 2 + wurzel;
    		x2 = -p / 2 - wurzel;
    	}
    
    	cout << ("Nullstelle 1=	");
    	cout << x1 << endl;
    
    	cout << ("Nullstelle 2=	");
    	cout << x2 << endl;
    
    	cout << ("Druecken Sie bitte eine beliebige Taste zum beenden!");
    	system("pause>nul");
        return 0;
    }
    

Log in to reply