Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Решите задачу на C#

Dksi7 Ученик (92), на голосовании 3 недели назад
Даны коэффициенты квадратного уравнения a, b, c. Написать
программу для поиска корней этого квадратного уравнения. Программа
должна быть универсальной и выдавать правильные ответы для любых
исходных данных:
Голосование за лучший ответ
Zonas_51 Мастер (1432) 1 месяц назад
запрограммируй её решать по дискриминанту и всё, и проверяй на наличие корней дискриминант, ну и сами корни совпадают они или нет
Jurijus ZaksasИскусственный Интеллект (445726) 1 месяц назад
Если все три коэффициента равны нулю, что там у нас по дискриминанту будет?
Zonas_51 Мастер (1432) Jurijus Zaksas, по идее такого быть не должно но по сути он будет 0, можно сделать как крайний случай с отдельной проверкой на это
Jurijus Zaksas Искусственный Интеллект (445726) 1 месяц назад
Дык это... Дык лысенький! Приведенная тобой таблица выдает правильные ответы далеко не для любых данных. Ты пока выясни у своего препода, что именно должна делать программа (с учетом того, что у полинома 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+ε) в ряд по малому параметру ε. Мне лично об этом ещё в школе было известно, где мы разбирали "Систематическое программирование. Введение" Вирта с его глупыми ошибками
Похожие вопросы