Nickolay.info. Алгоритмы. Нахождение всех корней заданного квадратного уравнения

Найти все корни заданного квадратного уравнения.

Единственный "подвох" этой элементарной задачи - учесть особые случаи, когда различные комбинации коэффициентов квадратного уравнения 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 знаками после запятой, не задавая общую ширину поля вывода.

Рейтинг@Mail.ru

вверх гостевая; E-mail