Даны 2 отрезка A и B. Вычислить угол в градусах, под которым они расположены друг относительно друга - Free Pascal
Формулировка задачи:
Даны два отрезка А и В, заданные координатами их концов (АX1,АY1),(АX2,АY2) и (ВX1,ВY1),(ВX2,ВY2) – целыми числами. Вычислить угол в градусах (вещественное число), под которым они расположены относительно друг друга.
Решение задачи: «Даны 2 отрезка A и B. Вычислить угол в градусах, под которым они расположены друг относительно друга»
textual
Листинг программы
var ax1,ay1,ax2,ay2,bx1,by1,bx2,by2:integer;
dx1,dy1,dx2,dy2:integer;
a:Real;
Begin
repeat
writeln('Введите координаты концов первого отрезка, целые числа');
readln(ax1,ay1,ax2,ay2);
dx1:=ax2-ax1;
dy1:=ay2-ay1;
if(dx1=0)and(dy1=0)then writeln('Это не отрезок, повторите ввод');
until (dx1<>0)or(dy1<>0);
repeat
writeln('Введите координаты концов второго отрезка, целые числа');
readln(bx1,by1,bx2,by2);
dx2:=bx2-bx1;
dy2:=by2-by1;
if(dx2=0)and(dy2=0)then writeln('Это не отрезок, повторите ввод');
until (dx2<>0)or(dy2<>0);
if dx1*dx2+dy1*dy2=0 then a:=pi/2
else a:=arctan(abs((dx1*dy2-dx2*dy1)/(dx1*dx2+dy1*dy2)));
writeLn('Меньший угол между отрезками =',a*180/pi:0:2,' градусов');
readLn;
end.
Объяснение кода листинга программы
- Объявление переменных: ax1, ay1, ax2, ay2, bx1, by1, bx2, by2 (координаты концов отрезков), dx1, dy1, dx2, dy2 (разности координат), a (для хранения угла).
- Повторяющийся блок ввода координат концов отрезков с помощью функции readln().
- Проверка, является ли введенная последовательность отрезков корректной (не является точкой).
- Если отрезок корректен, то вычисление разностей координат для обоих отрезков.
- Вычисление угла между отрезками по формуле arctan(abs((dx1dy2-dx2dy1)/(dx1dx2+dy1dy2))).
- Если произведение разностей координат равно нулю, то угол равен 90 градусам.
- Вывод меньшего угла между отрезками в градусах.
- Завершение работы программы с помощью функции readLn().