с ++ квадратное уравнение. неправильные результаты

Я написал этот код, чтобы найти корни квадратных уравнений.
Код такой:

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
double a,b,c;
double x,x2;
cout<<"Give a: ";
cin>>a;
cout<<"Give b: ";
cin>>b;
cout <<"Give c: ";
cin>>c;
if (a==0)
{
if (b==0)
{
if (c==0)
{
cout<<"Solution indeterminable";
return 0;
}
else
{
cout<<"No solution";
return 0;
}
}
else
{
x=-c/b;
cout<<"The only root is x: "<<x;
return 0;
}

}
else
{
double b_sqr=b*b;
if (b_sqr>4*b*c)
{
cout<<"Complex roots: ";
return 0;
}
else if (b_sqr==4*b*c)
{
x=-b/(2*a);
cout<<"The only solution is x: "<<x;
return 0;
}
else
{
x=-b+(sqrt((b*b)-(4*a*c)))/(2*2);
x2=-b-(sqrt((b*b)-(4*a*c)))/(2*2);
cout<<"The first root is x1: "<<x;
cout<<"The first root is x2: "<<x2;
return 0;
}
}
}

Независимо от того, что я печатаю, он либо находит два корня -1, либо один корень -1.
Я не могу понять, что не так в моей логике. Все кажется хорошим

РЕДАКТИРОВАТЬ:

Это тот случай, когда у вас нет ошибок компилятора, но код, похоже, не работает. Это происходит, когда код на 100% корректен, но ошибки связаны не с синтаксисом или грамматикой языка в вашем коде, а с логикой, лежащей в основе.

Перед тем, как приступить к написанию кода, вы должны убедиться, что ссылки, которые вы используете, подробно описывая алгоритмические решения проблемы, которую вы пытаетесь решить, являются правильными.

Если вы не получили ошибок компилятора, но программа не работает должным образом, вам следует проверить «детали» вашей программы. Ваши формулы верны? Вы уверены, что используете правильные уравнения? (И, как я уже говорил, убедитесь, что те, на которые вы ссылаетесь, действительно верны).

В любом случае, этот вопрос косвенно ответил на важную тему разработки программного обеспечения. Но для тех, кто пришел сюда и заинтересовался программой на C ++, которая решает квадратное уравнение, вот рабочий код:

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
double a,b,c;
double x,x2;
cout<<"Give a: ";
cin>>a;
cout<<"Give b: ";
cin>>b;
cout <<"Give c: ";
cin>>c;
if (a==0)
{
if (b==0)
{
if (c==0)
{
cout<<"Solution indeterminable";
return 0;
}
else
{
cout<<"No solution";
return 0;
}
}
else
{
x=-c/b;
cout<<"The only root is x: "<<x;
return 0;
}

}
else
{
double b_sqr=b*b;
if (b_sqr<4*a*c)
{
cout<<"Complex roots ";
return 0;
}
else if (b_sqr==4*a*c)
{
x=-b/(2*a);
cout<<"The only solution is x: "<<x;
return 0;
}
else
{
x=-b+(sqrt((b*b)-(4*a*c)))/(2*a);
x2=-b-(sqrt((b*b)-(4*a*c)))/(2*a);
cout<<"The first root is x1: "<<x;
cout<<"The second root is x2: "<<x2;
return 0;
}
}
}

-1

Решение

Следующее может помочь: http://ideone.com/o8nLlV

bool solve_quadratic(double a, double b, double c, double& x1, double& x2)
{
assert(a != 0);

const double delta = b * b - 4 * a * c;
if (delta < 0) {
return false;
}
if (delta == 0) {
x1 = -b / (2 * a);
x2 = x1;
} else {
const double sqrt_delta = sqrt(delta);
x1 = (-b + sqrt_delta) / (2 * a);
x2 = (-b - sqrt_delta) / (2 * a);
}
return true;
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]