Pers.narod.ru. Алгоритмы. Нахождение всех корней заданного квадратного уравнения |
Найти все корни заданного квадратного уравнения.
Единственный "подвох" этой элементарной задачи - учесть особые случаи, когда различные комбинации коэффициентов квадратного уравнения a, b, c равны 0, а также комплексные корни (для которых дискриминант меньше 0). Поэтому корректная в отношении особых случаев программа может выглядеть так:
var a,b,c,d,x1,x2:real;
begin
writeln ('Квадратное уравнение AX^2+BX+C=0');
writeln ('Введите коэффициенты A B C');
repeat {$I-}readln (a,b,c);{$I+} until IoResult=0;
if a=0 then
if b=0 then
if c=0 then writeln ('Тождество 0=0')
else writeln ('Уравнение вида C=0 несовместно')
else writeln ('X=',(-c/b):0:3)
else begin
d:=sqr(b)-4*a*c;
if d<0 then begin
x1:=-b/(2*a);
x2:=sqrt(abs(d))/(2*a);
writeln ('X1=',x1:0:3,'+',x2:0:3,'i',',X2=',x1:0:3,'-',x2:0:3,'i');
end
else if d=0 then writeln ('X=',(-b/(2*a)):0:3)
else begin
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a);
writeln ('X1=',x1:0:3,',X2=',x2:0:3);
end;
end;
reset (input); readln;
end.
Конструкция
repeat {$I-}readln (a,b,c);{$I+} until IoResult=0;
позволяет проверить, что вводятся действительно 3 вещественных (целых) числа (см. лекции).
Указание вида переменная:0:3 в операторе writeln в большинстве компиляторов с Паскаля позволяет вывести значение переменной с 3 знаками после запятой, не задавая общую ширину поля вывода.
|
|