Дык это... Дык лысенький! Приведенная тобой таблица выдает правильные ответы далеко не для любых данных. Ты пока выясни у своего препода, что именно должна делать программа (с учетом того, что у полинома n-ной степени ВСЕГДА будет n корней), а я тебе напишу программу, которая таки выдает ПРАВИЛЬНЫЙ ответ для любых введенный действительных чисел:
static void Main(string[] args)
{
double a = double.Parse(Console.ReadLine());
double b = double.Parse(Console.ReadLine());
double c = double.Parse(Console.ReadLine());
double d = b * b - 4 * a * c;
Complex x1 = (-b + Complex.Sqrt(d)) / 2 / a;
Complex x2 = (-b - Complex.Sqrt(d)) / 2 / a;
if (a == 0)
{
x1 = -c / b;
x2 = x1;
}
if (double.IsNegativeInfinity(x1.Real))
Console.WriteLine("No solutions");
else
if (double.IsNaN(x1.Real))
Console.WriteLine("Any solution possible");
else
Console.WriteLine($"{x1} {(a == 0 && x1.Equals(x2) ? string.Empty : x2)}");
}
Ксения РайтГений (97171)
1 месяц назад
Чтобы программа правильно работала при любых исходных данных, нужны три вещи:
1) проверка вводимых данных на корректность, а в случае некорректного ввода должно следовать сообщение об этом
2) всегда абсолютно корректное сравнение дискриминанта с нулём, которое возможно только в спецклассе рациональных чисел и который надо сначала найти и научиться им пользоваться или на крайняк самим создать
3) школьная формула вычисления
корней х=(-b±√D)/2 изначально некорректна с вычислительной точки зрения так как есть один неприятный случай, а именно
|4ac/b²|<<1
, поэтому специально для этого случая надо воспользоваться разложением √(1+ε) в ряд по малому параметру ε. Мне лично об этом ещё в школе было известно, где мы разбирали "Систематическое программирование. Введение" Вирта с его глупыми ошибками
программу для поиска корней этого квадратного уравнения. Программа
должна быть универсальной и выдавать правильные ответы для любых
исходных данных: