Решение квадратного уравнения -Pascal(Паскаль)

Уравнение вида a⋅x2 + b⋅x + c = 0квадратное уравнение.

a, b, c — действительные числа, a ≠ 0.

Для того чтобы вычислить корни квадратного уравнения, нужно сначала найти дискриминант.

D = b2 — 4⋅a⋅c;

  • если D < 0, то квадратное уравнение не имеет корней;
  • если D = 0, то уравнение имеет один действительный корень(иногда говорят, что корней два, но они одинаковые):
    • x1 = x2 = -b / (2⋅a);
  • если D > 0, то уравнение имеет два действительных корня:
    • x1 = (-b + √D) / (2⋅a);
    • x2 = (-b + √D) / (2⋅a).
program QuadraticEquation;
var
  a, b, c, x1, x2, discriminant : real;
begin
  {ввыод данных}
  write('a = ');
  readln(a);
  write('b = ');
  readln(b);
  write('c = ');
  readln(c);
  
  {дискриминант}
  discriminant := sqr(b) - 4 * a * c;  

  if discriminant < 0 then
    writeln('Квадратное уравнение не имеет корней')
  else
    begin
      if discriminant = 0 then
        begin
          {квадратное уравнение имеет два одинаковых корня}
          x1 := -b / (2 * a);
          x2 := x1;
        end
       else
         begin
           {уравнение имеет два разных корня}
           x1 := (-b + sqrt(discriminant)) / (2 * a);
           x2 := (-b - sqrt(discriminant)) / (2 * a);
         end;
       
       {вывод корней уравнения}
       writeln('x1 = ', x1:8:3);
       writeln('x2 = ', x2:8:3);
     end;
  writeln('Press Enter to Exit...');
  readln;
end.

Вариант № 2

{         Пример 1.5. Решить квадратное уравнение ax^2 + bx + c = 0.

                                Система тестов
     ╔═════╦═══════════════╦══════════════╦══════════════════════════════╗
     ║Номер║  Проверяемый  ║ Коэффициенты ║                              ║
     ║теста║    случай     ╟───┬────┬─────╢         Результаты           ║
     ║     ║               ║ a │  b │  c  ║                              ║
     ╠═════╬═══════════════╬═══╪════╪═════╬══════════════════════════════╣
     ║  1  ║     d>0       ║ 1 │  1 │ -2  ║  x1 = 1,  x2 = -2            ║
     ╟─────╫───────────────╫───┼────┼─────╫──────────────────────────────╢
     ║  2  ║     d=0       ║ 1 │  2 │  1  ║  Корни равны: x1= -1, x2= -1 ║
     ╟─────╫───────────────╫───┼────┼─────╫──────────────────────────────╢
     ║  3  ║     d<0       ║ 2 │  1 │  2  ║  Действительных корней нет   ║
     ╟─────╫───────────────╫───┼────┼─────╫──────────────────────────────╢
     ║  4  ║ a=0, b=0, c=0 ║ 0 │  0 │  0  ║  Все коэффициенты равны нулю,║
     ║     ║               ║   │    │     ║  х - любое число             ║
     ╟─────╫───────────────╫───┼────┼─────╫──────────────────────────────╢
     ║  5  ║ a=0, b=0,c<>0 ║ 0 │  0 │  2  ║  Неправильное уравнение      ║
     ╟─────╫───────────────╫───┼────┼─────╫──────────────────────────────╢
     ║  6  ║ a=0, b<>0     ║ 0 │  2 │  1  ║  Линейное уравнение. Один    ║
     ║     ║               ║   │    │     ║  корень: х= -0,5             ║
     ╟─────╫───────────────╫───┼────┼─────╫──────────────────────────────╢
     ║  7  ║a<>0, b<>0, c=0║ 2 │  1 │  0  ║  x1 = 0,  x2 = - 0,5         ║
     ╚═════╩═══════════════╩═══╧════╧═════╩══════════════════════════════╝
}

 Program QuadraticEquation;
   Uses Crt;  { подключение библиотеки Crt }
   Var a, b, c     : Real;    { a, b, c - коэффициенты уравнения}
       Discr       : Real;    { Discr - дискриминант }
       x1, x2      : Real;    { x1, x2 - корни }
       Test, NTest : Integer; { Ntest - количество тестов }
 BEGIN
  ClrScr;
  Write('Введите количество тестов : ');
  ReadLn(NTest);
  For Test := 1 to NTest do   { цикл по всем тестам задачи }
   begin
    Write('Тест ', Test, '. Введите коэффициенты a, b, c : ');
    ReadLn(a, b, c);
    If (a=0) and (b=0) and (c=0)
      then begin Write('Все коэффициенты равны нулю.');
                 WriteLn('x - любое число ')
           end
      else
        If (a=0) and (b<>0)
          then WriteLn('Линейное уравнение. Oдин корень: x =', (-c/b):6:2)
          else
            If (a=0) and (b=0) and (c<>0)
              then WriteLn('Неправильное уравнение.')
              else
               begin
                 Discr := b*b - 4*a*c;
                 If Discr > 0
                   then begin
                          x1:=(-b + Sqrt(Discr)) / (2*a);
                          x2:=(-b - Sqrt(Discr)) / (2*a);
                          WriteLn('x1=' , x1:6:2 , '; x2=' , x2:6:2)
                        end
                   else
                    If Discr = 0
                     then
                       begin
                         x1 := -b/(2*a);
                         WriteLn('Корни равны: x1=', x1:6:2, ' x2=', x1:6:2)
                       end
                     else WriteLn('Действительных корней нет.');
               end;
    WriteLn
   end;
  ReadLn
 END.

Leave a Comment

66 − = 65