Решение квадратного уравнения, написать полностью корректный код для решения любого квадратного уравнения
Задача состоит в следующем: Дано уравнение:
ax2 + bx + c = 0.
Необходимо написать программу, которая по введённым целочисленным параметрам a,b,c решит это уравнение. На вход даются три целых числа - a,b,c, по модулю не превышающих 1000. В выходной файл через пробел необходимо вывести количество корней этого уравнения, после этого все корни этого уравнения в порядке неубывания, если этого сделать нельзя, то вывести -1.
Казалось бы, простая задача? Не тут-то было. Я перепробовала все способы, но чтобы ее приняли, необходимо рассмотреть все варианты решения. Вот мой код:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int a, b, c;
cin >> a >> b >> c;
int d;
d = (b * b) - (4 * a * c);
if (a == 0)
{
if (b != 0)
{
cout << 1 << " " << (-c / b);
}
if (b == 0)
{
cout << -1;
}
}
if ((a != 0) and (b == 0) and (c == 0))
{
cout << 1 << " " << 0;
}
else
{
if (d >= 0){
int x1, x2;
x1 = (-b + sqrt(d)) / (2 * a);
x2 = (-b - sqrt(d)) / (2 * a);
if (x1 == x2)
{
cout << 1 << " " << x1;
}
if (x1 > x2)
{
cout << 2 << " " << x2 << " " << x1;
}
if (x2 > x1)
{
cout << 2 << " " << x1 << " " << x2;
}
}
}
}
Ответы (1 шт):
Вы делаете расчеты с целыми числами, а это неправильно. Да коэффициенты у вас - целые числа, но результаты операций - нет.
cout << 1 << " " << (-c / b); // неправильно
// должно быть например так
cout << 1 << " " << static_cast<double>(-c) / b;
// или в "старом" стиле с
cout << 1 << " " << double(-c) / b;
Или сразу объявить коэффициенты числами типа double
// аналогично здесь результат с плавающей точкой присваивается целому числу
int x1, x2;
x1 = (-b + sqrt(d)) / (2 * a);
x2 = (-b - sqrt(d)) / (2 * a);
И ещё вы пропустили вариант с отрицательным дискриминантом.
if (d >= 0)
{
double x1 = (-b + sqrt(d)) / (2.0 * a);
double x2 = (-b - sqrt(d)) / (2.0 * a);
if (x1 == x2)
cout << 1 << " " << x1;
else
if (x1 > x2)
cout << 2 << " " << x2 << " " << x1;
else
cout << 2 << " " << x1 << " " << x2;
}
else // вариант с отрицательным дискриминантом
cout << -1;