
Zitat von
BLUESCREEN3D
Einfach mal vor dem
if dies einfügen:
Code:
cout << "vieta: " << ((vieta(x1,x2,p,q))?"true":"false") << endl;
Diese Abfrage spuckt bei mir "false" aus. Vielleicht wäre es ja am einfachsten, wenn ich das ganze Programm mal poste:
Code:
#include<iostream>
#include<cmath>
using namespace std;
//Prototyp für die Wurzelsatz von Vieta-Funktion
double vieta(double prot_x1, double prot_x2, double prot_p, double prot_q);
int main()
{
cout << "###################################################################" << endl;
cout << "# #" << endl;
cout << "# Programm zur L\224sung der Gleichung a*x^2 + b*x + c = 0 #" << endl;
cout << "# mit dem Wurzelsatz von Vieta #" << endl;
cout << "# #" << endl;
cout << "###################################################################" << endl;
double a, b, c; //Koeffizienten
double x1, x2; //Lösungen
double wurzel; //Lösung der Wurzel
//abbrechen, wenn Eingabe fehlschlägt
cout << "\nBitte drei Zahlen eingeben: \n";
if(!(cin >> a >> b >> c))
{
cerr << "\nFehler: Eingabe der Variablen ist fehlgeschlagen";
return 0;
}
//anpassen des Ausdrucks an die p-q-Formel
double p;
double q;
cout << "\nDie drei Koeffizienten sind a = " << a
<< ", b = " << b << " und c = " << c << endl;
//prüft, ob es sich um eine quadratische oder lineare Gleichung handelt
if(a > 0 || a < 0) //Gleichung ist quadratische
{
p = b/a;
q = c/a;
cout << "\np = " << p << endl;
cout << "q = " << q << endl;
}
else if(a == 0) //Gleichung ist linear
{
//lösen der linearen Gleichung
if(b!=0)
{
double x_linear = -(c/b);
cout << "Die L\224sung der linearen Gleichung \"b*x + c = 0\" ist: "
<< "-c/b = x => " << x_linear << endl;
return 0;
}
}
//Variable zum Testen, ob der Wert unter der Wurzel 0 oder kleiner 0 wird
double test = pow(p/2,2)-q;
if(test <= 0)
{
//bricht ab, weil der Wurzelausdruck keine Lösung ergibt
cout << "\nGleichung hat keine L\224sung" << endl;
return 0;
}
else
{
//Berechne die Lösungen nach p-q-Formel
wurzel = sqrt((pow(p/2,2))-q);
x1 = (-p/2)+wurzel;
x2 = 0;//(-p/2)-wurzel;
//cout << "vieta: " << ((vieta(x1,x2,p,q))?"true":"false") << endl;
//falls x1 oder x2 Null ergeben sollten, wir der Wurzelsatz von Vieta angewendet
if(vieta(x1,x2,p,q)==false)
{
return 0;
}
cout << "\nWurzelergebnis: " << wurzel << endl;
cout << endl;
cout << "L\224sungen der Gleichung: " << endl;
cout << "x1 = -(p/2)+Wurzelausdruck " << x1 << endl;
cout << "x2 = -(p/2)-Wurzelausdruck " << x2 << endl;
}
return 0;
}
double vieta(double prot_x1, double prot_x2, double prot_p, double prot_q)
{
if(prot_x1 == 0 && prot_x2 != 0)
{
//Wurzelsatz von Vieta
cout << "\nWurzelsatz von Vieta => x1+x2=-p => x1=-p-x2" << endl;
cout << "x1 = " << -prot_p-prot_x2
<< "\nx2 = " << prot_x2 << endl;
return 0;
}
else if(prot_x1 != 0 && prot_x2 == 0)
{
//Wurzelsatz von Vieta
cout << "Wurzelsatz von Vieta => x1+x2=-p => x2=-p-x1" << endl;
cout << "x1 = " << prot_x1
<< "\nx2 = " << -prot_p-prot_x1 << endl;
return 0;
}
return 0;
}
Lesezeichen