Задача: Рассмотрим множество P={P1, P2, ..., Pn}, образованное n точками (3<=n<=30) на евклидовой плоскости. Каждая точка Pj определена своими координатами xj, yj. Написать программу, которая находит такие три точки из множества P, для которых площадь соответствующего треугольника максимальна.
Код: Выделить всё
program n6;
type tocka = record
x, y:real;
end;
pp = array[1..30] of tocka;
var n:1..30;
P :p p;
i, j, k:integer;
qx, qy, wx, wy, ex, ey, max:real;
function ot(x1, y1, x2, y2:real):real; {длина стороны по Пифагору}
begin
ot:=sqrt(sqr(x1-x2)+sqr(y1-y2));
end;
function plosh(a, b, c :p p):real; {площадь по Герону}
var p, ac, bc, ab:real;
begin
ac:=ot(a.x, a.y, c.x, c.y); {тут и выдаёт ошибку, тут я и не знаю как выразить координату точки через массив}
ab:=ot(a.x, a.y, b.x, b.y);
bc:=ot(b.x, b.y, c.x, c.y);
p:=(ac+ab+bc)/2;
plosh:=sqrt(p*(p-ac)*(p-ab)*(p-bc));
end;
begin
Writeln('Укажите количество точек');
readln(n);
for i:=1 to n do begin
writeln ('Введите координаты ', i, ' точки, сначала X затем Y');
readln (p[i].x); readln(p[i].y); end;
max:=0;
for i:=1 to n do
for j:=i+1 to n do
for k:=j+1 to n do
if max<plosh(p[i], p[j], p[k]) then begin
max:=plosh(p[i], p[j], p[k]);
qx:=p[i].x; qy:=p[i].y;
wx:=p[j].x; wy:=p[j].y;
ex:=p[k].x; ey:=p[k].y; end;
writeln('Для точек A(',qx,' ', qy,'), B(',wx,' ',wy,'), C(', ex,' ', ey,
') площадь соответствующего треугольника максимальна');
readln;
end.