Найти тройку точек, которые являются вершинами треугольника наибольшей площади - PascalABC.NET
Формулировка задачи:
Даны координаты различных точек плоскости (x1,y1),(x2,y2),...,(xn,yn), где n>=3. Найти тройку точек, которые являются вершинами треугольника наибольшей площади
Решение задачи: «Найти тройку точек, которые являются вершинами треугольника наибольшей площади»
textual
Листинг программы
const nmax=20;
type point=record
x,y:real
end;
trg=array[1..3] of point;
function Plsh(a,b,c:point):real;
begin
Plsh:=abs(((a.x-c.x)*(b.y-c.y)-(b.x-c.x)*(a.y-c.y))/2)
end;
var n,i,j,k,imx,jmx,kmx:integer;
a:array[1..nmax] of point;
mx:real;
begin
randomize;
repeat
write('Количество точек от 3 до ',nmax,' n=');
readln(n);
until n in [1..nmax];
for i:=1 to n do
begin
a[i].x:=-5+10*random;
a[i].y:=-5+10*random;
end;
writeln('Координаты вершин треугольников:');
write(' ');
for i:=1 to n do
write(i:5);
writeln;
write('x:');
for i:=1 to n do
write(a[i].x:5:1);
writeln;
write('y:');
for i:=1 to n do
write(a[i].y:5:1);
writeln;
mx:=Plsh(a[1],a[2],a[3]);
imx:=1;
jmx:=2;
kmx:=3;
for i:=1 to n-2 do
for j:=i+1 to n-1 do
for k:=j+1 to n do
if Plsh(a[i],a[j],a[k])>Plsh(a[imx],a[jmx],a[kmx]) then
begin
mx:=Plsh(a[i],a[j],a[k]);
imx:=i;
jmx:=j;
kmx:=k
end;
writeln;
writeln('Максимальная площадь=',mx:0:1,' у треугольника с координатами');
writeln(imx:2,'(',a[imx].x:4:1,';',a[imx].y:4:1,')');
writeln(jmx:2,'(',a[jmx].x:4:1,';',a[jmx].y:4:1,')');
writeln(kmx:2,'(',a[kmx].x:4:1,';',a[kmx].y:4:1,')');
end.
Объяснение кода листинга программы
- В начале кода объявлены константы и типы данных:
- nmax - максимальное количество точек (20);
- point - тип данных для представления точки с координатами (x, y);
- trg - массив из трех точек (triple) для представления треугольника.
- Затем определена функция Plsh, вычисляющая площадь треугольника по координатам вершин.
- Далее идут переменные для хранения количества точек (n), индексов максимальной площади (imx, jmx, kmx) и максимальной площади (mx).
- В цикле repeat происходит запрос на ввод количества точек и повторение программы при некорректном вводе.
- В цикле for i:=1 to n создаются случайные координаты для каждой точки и записываются в массив a.
- Выводятся координаты всех точек.
- В цикле for i:=1 to n-2 происходит поиск максимальной площади треугольника путем перебора всех возможных комбинаций из трех точек.
- Выводится максимальная площадь и координаты вершин треугольника с максимальной площадью.