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