Работа 3.3 Упр.17 Задание 1 ГДЗ Семакин 10 класс (Информатика)
Рассмотрим вариант решения задания из учебника Семакин, Хеннер, Шеина 10 класс, Бином: 17. Написать программу, определяющую, будут ли прямые A1X + В1у + C1 = 0 и А2х + В2у + С2 = 0 перпендикулярны. Если нет, то найти угол между ними. *Цитирирование задания со ссылкой на учебник производится исключительно в учебных целях для лучшего понимания разбора решения задания. 10 semakin10 pract/3-3/zad1/17 98
Для прямых $$A_1x + B_1y + C_1 = 0$$ и $$A_2x + B_2y + C_2 = 0$$ угловые коэффициенты равны
$$k_1 = -\frac{A_1}{B_1}, \qquad k_2 = -\frac{A_2}{B_2}.$$
Прямые перпендикулярны тогда и только тогда, когда
$$k_1k_2 = -1,$$
то есть
$$A_1A_2 + B_1B_2 = 0.$$
Если это условие не выполняется, угол между прямыми находим по формуле
$$\tan \varphi = \left|\frac{k_1-k_2}{1+k_1k_2}\right|.$$
Подставляя $$k_1 = -\frac{A_1}{B_1}$$ и $$k_2 = -\frac{A_2}{B_2}$$, получаем
$$\varphi = \arctan \left|\frac{A_1B_2-A_2B_1}{A_1A_2+B_1B_2}\right|.$$
Ниже приведена программа на Pascal, которая сначала проверяет, что введённые коэффициенты действительно задают прямую, а затем выводит либо сообщение о перпендикулярности, либо угол между прямыми.
var a1, b1, c1, a2, b2, c2: integer;
u: real;
begin
repeat
writeln(‘Введите коэффициенты первой прямой:’);
readln(a1, b1, c1);
if (a1 = 0) and (b1 = 0) then
writeln(‘Это не прямая, повторите ввод.’);
until (a1 <> 0) or (b1 <> 0);repeat
writeln(‘Введите коэффициенты второй прямой:’);
readln(a2, b2, c2);
if (a2 = 0) and (b2 = 0) then
writeln(‘Это не прямая, повторите ввод.’);
until (a2 <> 0) or (b2 <> 0);if a1 * a2 + b1 * b2 = 0 then
writeln(‘Прямые перпендикулярны’)
else
begin
u := abs(arctan((a1 * b2 — a2 * b1) / (a1 * a2 + b1 * b2)) * 180 / pi);
writeln(‘Прямые не перпендикулярны, угол=’, u:0:2);
end;
readln;
end.
Ответ
Программа определяет, перпендикулярны ли прямые, и при необходимости вычисляет угол между ними по формуле $$\varphi = \arctan \left|\frac{A_1B_2-A_2B_1}{A_1A_2+B_1B_2}\right|.$$