Выбрать три точки, составляющие равносторонний треугольник наибольшего периметра - 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 обновляются с индексами найденных точек.
- Выводится сообщение с найденными координатами точек и длиной периметра.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д