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

Пример 1.6.
 
Две прямые описываются уравнениями
 
a1 x + b1 y + c1 = 0;
a2 x + b2 y + c2 = 0.
Напечатать координаты точки пересечения этих прямых, либо сообщить, что эти прямые совпадают, не пересекаются или вовсе не cуществуют.
 
Система тестов
 
Номер теста
Проверяемый 
случай
Коэффициенты прямых
Результаты
a1
b1
c1
a2
b2
c2
1
Первая прямая не существует
0
0
1
1
2
2
Это не прямая
2
Вторая прямая не существует
1
2
2
0
0
1
Это не прямая
3
Все коэффициенты одной или обеих прямых равны нулю
0
0
0
1
2
1
Это не прямая (прямые)
4
Коэффициенты попарно равны
1
2
1
1
2
1
Прямые совпадают
5
Коэффициенты попарно пропорциональны
1
2
1
2
4
2
Прямые совпадают
6
Прямые параллельны
2
3
-1
4
6
1
Прямые параллельны
7
Прямые пересекаются
1
2
-4
1
-2
1
x=1.50,   y=1.25
 
Демонстрация
 
Школьный АЯ
алг Пересечение (арг вещ a1, b1, c1, a2, b2, c2, 
                 рез вещ x, y, рез лит t)
нач
  если (a1 = 0 и b1 = 0) или ( a2 = 0 и b2 = 0)
    то t := "Это не прямая (прямые)"
    иначе если (a1*b2 = a2*b1) и (a1*c2 = a2*c1)
            то t := "Прямые совпадают"
            иначе если a1*b2 = a2*b1
                    то t := "Прямые параллельны"
                    иначе x := (c1*b2-c2*b1)/(b1*a2-b2*a1)
                          y := (c2*a1-c1*a2)/(b1*a2-b2*a1)
                  все
          все
    все
кон
 
Turbo Pascal
Program Intersection;
  Uses Crt; {подключение библиотеки Crt }
  Var a1, b1, c1,  {коэффициенты уравнения первой прямой}
      a2, b2, c2,  {коэффициенты уравнения второй прямой}
      x, y : Real; {координаты точки пересечения }
      Test, NTest : Integer;
BEGIN
  ClrScr; {очистка экрана}
  Write('Введите количество тестов : ');
  ReadLn(NTest);
  For Test := 1 to NTest do {цикл по всем тестам задачи}
   begin
     Write('Тест ', Test, '. Введите a1, b1, c1 : ');
     ReadLn( a1, b1, c1);
     Write(' Введите a2, b2, c2 : ');
     ReadLn( a2, b2, c2);
     WriteLn; Write('О т в е т : ');
     If ( (a1=0) and (b1=0) ) or ( (a2=0) and (b2=0) )
      then WriteLn( 'это не прямая (прямые). ' )
      else
        if (a1*b2=a2*b1) and (a1*c2=a2*c1) {условие совпадения}
         then WriteLn( 'прямые совпадают.' )
         else
          if a1*b2 = a2*b1 {условие параллельности}
           then WriteLn('прямые параллельны.')
           else begin x:=(c1*b2-c2*b1)/(b1*a2-b2*a1);
                      y:=(c2*a1-c1*a2)/(b1*a2-b2*a1);
                      WriteLn('координаты точки пересечения :', 
                              ' x = ', x : 5 : 2 , ', y = ', y : 5 : 2);
                end; WriteLn
    end;
   ReadLn
END.
Результаты работы Pascal-программы:
Введите количество тестов : 7 
Тест 1.  Введите a1, b1, c1 : 0  0  1 <Enter> 
Введите a2, b2, c2 : 1  2  2 <Enter> 
О т в е т : это не прямая (прямые). 

Тест 2. Введите a1, b1, c1 : 1  2  2   <Enter> 
  Введите a2, b2, c2 : 0  0  1   <Enter> 
О т в е т : это не прямая (прямые). 

Тест 3. Введите a1, b1, c1 : 0  0  0   <Enter> 
  Введите a2, b2, c2 : 1  2  1   <Enter> 
О т в е т : это не прямая (прямые). 

Тест 4. Введите a1, b1, c1 : 1  2  1   <Enter> 
  Введите a2, b2, c2 : 1  2  1   <Enter> 
О т в е т : прямые совпадают. 

Тест 5. Введите a1, b1, c1 : 1  2  1   <Enter> 
  Введите a2, b2, c2 : 2  4  2   <Enter> 
О т в е т : прямые совпадают. 

Тест 6. Введите a1, b1, c1 : 2  3 –1 <Enter> 
  Введите a2, b2, c2 : 4  6  1 <Enter> 
О т в е т : прямые параллельны. 

Тест 7. Введите a1, b1, c1 : 1  2 –4 <Enter> 
  Введите a2, b2, c2 : 1 –2  1 <Enter> 
О т в е т : координаты точки пересечения : x = 1.50, y = 1.25

QBasic
CLS
INPUT "Введите количество тестов : ", NTest
FOR Test = 1 TO NTest        ' цикл по всем тестам задачи
  PRINT "Тест"; Test;
  INPUT ". Введите a1, b1, c1 : ", a1, b1, c1
  INPUT "     Введите a2, b2, c2 : ", a2, b2, c2
  PRINT : PRINT "О т в е т : ";
  IF (a1 = 0) AND (b1 = 0) OR (a2 = 0) AND (b2 = 0) THEN
     PRINT "это не прямая (прямые)."
   ELSE
     IF (a1*b2=a2*b1) AND (a1*c2=a2*c1) THEN
        PRINT "прямые совпадают."
       ELSE
        IF a1*b2 = a2*b1 THEN
             PRINT "прямые параллельны."
           ELSE x=(c1*b2 - c2*b1) / (b1*a2 - b2*a1)
                y=(c2*a1 - c1*a2) / (b1*a2 - b2*a1)
                PRINT "координаты точки пересечения: x="; x ; ", y="; y
        END IF
     END IF
  END IF
  PRINT
NEXT Test
END

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