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 знаками после запятой, не задавая общую ширину поля вывода.
гостевая; E-mail |