Технологии программирования | страница 129
Для надежного сравнения двух вещественных чисел используют прием использования неравенства |f — g| ≤ ε, где ε — заведомо малое число. На языке программирования это неравенство имеет вид
>Abs (f — g) <= 1е — 6
Продолжаем кодирование структуры. Глядя на действия, записываем логические условия выполнения действий. Входная информация: a, b, c.
>{ Само решение квадратного уравнения }
>if (Abs(а) > 1e — 6)
>then
>begin
>{ Продолжение решения с вычислением дискриминанта }
>end;
>if ((Abs (a) <= 1e — 6) and (Abs (b) > 1e — 6))
>then
>begin
>{ Решение линейного уравнения }
>end;
>if ((Abs(a) <= 1e — 6) and (Abs(b) <= 1e — 6 and (Abs(c) >
>1e — 6))
>then
>begin
>{ Вывод сообщения: линейное уравнение не имеет решения }
>WriteLn ('Нет решения');
>end;
>if ((Abs(a) <= 1e — 6) and (Abs(b) <= 1e — 6 and
>(Abs(c) <= 1e — 6))
>then
>begin
>{ Вывод сообщения: бесчисленное множество решений уравнения }
>Write ('бесчисленное множество решений уравне');
>WriteLn ('ния (корни — любые числа)');
>end;
Осуществим сборку получившейся программы. При сборке удалим избыточные комментарии и избыточные операторные скобки begin — end, охватывающие лишь один оператор. Испытаем полученную программу на тестах a = 0, b = 0, c = 0 a = 0, b = 0, c = 2. Собранный вариант программы:
>Program Kvadrat;
>{ Программа решения квадратного уравнения
>вида a*x*x + b*x + c = 0 с произвольными значениями
>коэффициентов a, b, c типа вещественный }
>Uses
>Crt, Dos;
>Var
>a, b, c: Real; {Коэффициенты квадратного уравнения}
>xl, x2: Real; {Корни квадратного уравнения}
>begin
>ClrScr; { Очистка экрана }
>{Вывод информации о назначении программы}
>WriteLn ('Программа решения квадратного уравнения');
>Write (
>'вида a*x*x + b*x + c = 0 с произвольными');
>Write ('значениями');
>WriteLn ('коэффициентов a, b, c типа вещественный');
>WriteLn;
>{Ввод значений коэффициентов а, b, с};
>Write ('Укажите значение коэффициента а = ');
>ReadLn(a); { Ввод а}
>Write ('Укажите значение коэффициента b = ');
>ReadLn(b); { Ввод b}
>Write ('Укажите значение коэффициента с = ');
>ReadLn(c); { Ввод с}
>{ Вывод проверочно-протокольной информации
>о введенных значениях коэффициентов a, b, c }
>WriteLn;
>WriteLn ('Решается квадратное уравнение');
>Write (a:10:4, '*x*x + ', b:10:4, '*x + ');