[ домой ] [ следующий ] [ начало главы ] [ предыдущий ] [ содержание ]

Пример 1.5. Решить квадратное уравнение ax2+ 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
Линейное уравнение.   Один корень:   x = - 0,5
7
a <> 0,   b <> 0,   с = 0
2
1
0
x1 = 0,   x2  =  - 0,5

Демонстрация
 
Школьный АЯ (упрощенный алгоритм)
алг Квур (арг вещ а, b, c, рез вещ x1, x2, рез лит t)
   дано a <> 0
нач вещ d
  d := b**2-4*a*c | d - дискриминант квадратного уравнения
  если d<0
    то t := "Действительных корней нет"
    иначе если d=0
            то t := "Корни равны"; x1 := -b/(2*a); x2 := x1
            иначе t := "Два корня"
                  x1 := (-b + sqrt(d)) / (2*a)
                  x2 := (-b - sqrt(d)) / (2*a)
          все
  все
кон
 
Turbo Pascal
Program QuadraticEquation;
  Uses Crt; { подключение библиотеки Crt }
  Var a, b, c     : Real;         {a, b, c - коэффициенты уравнения}
      Discr       : Real;
      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.
 
QBasic
CLS
INPUT "Введите количество тестов : ", NTest
FOR Test = 1 TO NTest ' цикл по всем тестам задачи
  PRINT "Тест" ; Test ; ". Введите коэффициенты a, b, c : " ;
  INPUT a, b, c
  IF (a = 0) AND (b = 0) AND (c = 0) THEN
    PRINT "Все коэффициенты равны нулю. x - любое число"
   ELSE
    IF (a = 0) AND (b <> 0) THEN
      PRINT "Линейное уравнение, корень один : x = "; -c / b
     ELSE
      IF (a = 0) AND (b = 0) AND (c <> 0) THEN
        PRINT "Неправильное уравнение." 
       ELSE
        Discr = b * b - 4 * a * c
        IF Discr > 0 THEN
          x1 = (-b + SQR(Discr)) / (2 * a)
          x2 = (-b - SQR(Discr)) / (2 * a)
          PRINT "x1 = "; x1; "; x2 = "; x2
         ELSE
          IF Discr = 0 THEN
            x1 = - b / (2 * a) 
            PRINT "Корни равны: x1 = "; x1; "; x2 = "; x1
          ELSE PRINT "Действительных корней нет."
          END IF
        END IF
      END IF
    END IF
  END IF : PRINT
NEXT Test
END
Результаты работы QBasic-программы (фрагмент):
Тест 1 . Введите коэффициенты a, b, c : ? 1, 1, –2 <Enter> 
x1 = 1 ; x2 = – 2  

Тест 2 . Введите коэффициенты a, b, c : ? 1, 2, 1  <Enter> 
Корни равны: x1 = – 1 ; x2 = – 1  

Тест 3 . Введите коэффициенты a, b, c : ? 2, 1, 2  <Enter> 
Действительных корней нет. 

 

[ домой ] [ следующий ] [ начало главы ] [ предыдущий ] [ содержание ]