Выбрать три точки, составляющие равносторонний треугольник наибольшего периметра - Turbo Pascal
Формулировка задачи:
Выбрать три разные точки заданного на плоскости множества точек, составляющие равносторонний треугольник наибольшего периметра. // [10_3]
Решение задачи: «Выбрать три точки, составляющие равносторонний треугольник наибольшего периметра»
textual
Листинг программы
const
POINTSAMOUNT = 6; {Количество точек. Да, я надмозг.}
EPS = 1E-2; {Точность}
type
TPoint = record
X,Y: Real;
end;
TPoints = array[1..POINTSAMOUNT] of TPoint;
function Dist(P1, P2: TPoint): Real;
begin
Dist := Sqrt(Sqr(P1.X-P2.X)+Sqr(P1.Y-P2.Y));
end;
function Square(const L1, L2, L3: Real): Real;
var
P: Real;
begin
P := (L1+L2+L3)/2;
Square := Sqrt(P*(P-L1)*(P-L2)*(P-L3));
end;
var
Points: TPoints;
I, J, K,
A, B, C: Word;
L1, L2, L3, MaxLength: Real;
begin
A := 0;
for I := 1 to POINTSAMOUNT do
begin
Write('X[',I,'] = '); ReadLn(Points[I].X);
Write('Y[',I,'] = '); ReadLn(Points[I].Y);
end;
for I := 1 to POINTSAMOUNT-2 do
for J := I+1 to POINTSAMOUNT-1 do
for K := J+1 to POINTSAMOUNT do
begin
L1 := Dist(Points[I],Points[J]);
L2 := Dist(Points[I],Points[K]);
L3 := Dist(Points[K],Points[J]);
if (Abs(Square(L1,L2,L3))>EPS) and (Abs((L1+L2+L3)/L1-3)<EPS) then {найден новые равносторонний треугольник}
begin
if L1+L2+L3>MaxLength then
begin
MaxLength := L1+L2+L3;
A := I;
B := J;
C := K;
end;
end;
end;
WriteLn('Точки ',A,', ',B,', ',C,' образуют самый большой равносторонний треугольник, периметром ', MaxLength:4:2);
end.
Объяснение кода листинга программы
- Переменная POINTSAMOUNT задает количество точек, которые нужно выбрать для составления равностороннего треугольника.
- Переменная EPS задает точность вычислений.
- Тип TPoint определяет структуру точки с координатами X и Y.
- Тип TPoints определяет массив точек типа TPoint.
- Функция Dist вычисляет расстояние между двумя точками.
- Функция Square вычисляет квадратный корень из суммы квадратов разности координат двух точек.
- Переменные A, B, C и MaxLength инициализируются нулевыми значениями.
- Цикл for используется для заполнения массива TPoints значениями координат точек.
- Цикл for используется для поиска трех точек, которые образуют равносторонний треугольник с максимальным периметром.
- Если найдены три точки, удовлетворяющие условиям, то выводится сообщение о том, что они образуют самый большой равносторонний треугольник.
- Переменная MaxLength обновляется с максимальным периметром найденного равностороннего треугольника.
- Переменные A, B и C обновляются с индексами найденных точек.
- Выводится сообщение с найденными координатами точек и длиной периметра.