Оглавление 2-я программа. Решает квадратное уравнение при любых (вещественных) исходных данных.


Добавим в программу следующие идеи:

Очевидно, комплексные корни находим по формулам:
                  -b                sqrt(-diskr)
X1.вещественн. = ----  X1.мнимое = -------------;
                  2*a                   2*a


                  -b               -sqrt(-diskr)
X2.вещественн. = ----  X2.мнимое = -------------;
                  2*a                   2*a

Текст программы (Турбо-Паскаль)

Program Uravn3;
Var a,b,c,diskr,x1,x2,x_re,x_im: real; yesno: Boolean;
begin
write('Введите a,b,c (3 числа, разделяя пробелом)');
readln(a,b,c);
diskr := b*b - 4*a*c;
if diskr > 0 then
  begin
    x1 := (-b + sqrt(diskr))/(2*a);
    x2 := (-b - sqrt(diskr))/(2*a);
    writeln('X1 = ',x1:0:3,' X2 = ',x2:0:3);    
  end else
if diskr = 0 then
  begin
    x1 := (-b)/(2*a);
    writeln('Корни кратные, X = ',x1:0:3);    
  end else
  begin
    write('Действительных корней нет. Нужны комплексные? (0/1)-->');
    readln(Byte(yesno));
     if yesno then
       begin
         x_re := -b/(2*a);
         x_im := sqrt(-diskr)/(2*a);
         writeln('X1 = ',x_re:0:3,'+ I*',x_im:0:3);
         writeln('X2 = ',x_re:0:3,'- I*',x_im:0:3);
       end;
  end; readln;
end.
--------
Оказывается, преобразование типов применимо и в таком виде:
Byte(yesno) и это играет роль переменной типа byte,  в которую 
вводится 0 или 1. А переменная yesno в итоге хранит false или true!
---------
Результаты работы программы:
---------
Turbo Pascal  Version 7.0  Copyright (c) 1983,92 Borland
Введите a,b,c (3 числа, разделяя пробелом)1 8 2
X1 = -0.258 X2 = -7.742
Введите a,b,c (3 числа, разделяя пробелом)1 8 2
X1 = -0.258 X2 = -7.742

Введите a,b,c (3 числа, разделяя пробелом)8 1 2
Действительных корней нет. Нужны комплексные? (0/1)-->0

Введите a,b,c (3 числа, разделяя пробелом)8 1 2
Действительных корней нет. Нужны комплексные? (0/1)-->1
X1 = -0.063+ I*0.496
X2 = -0.063- I*0.496
------------
Rambler's Top100
Hosted by uCoz