Пример 1.6. Две прямые описываются уравнениями
a1 x + b1 y + c1 = 0;
a2 x + b2 y + c2 = 0.
Напечатать координаты точки пересечения этих прямых, либо сообщить,
что эти прямые совпадают, не пересекаются или вовсе не существуют.
Система тестов
╔═════╦═══════════════════╦═════════════════════╦════════════════════╗
║Номер║ Проверяемый ║ Коэффициенты прямых ║ ║
║теста║ случай ╟──────────┬──────────╢ Результаты ║
║ ║ ║ 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 ║
║ ║ пересекаются ║ │ ║ ║
╚═════╩═══════════════════╩══════════╧══════════╩════════════════════╝
}
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.