Turbo Pascal Массив записей
Добавлено: 09 мар 2014, 20:47
Помогите пожалуйста программу оформить, я тут начал, но кое-где застрял.
Задача: Рассмотрим множество P={P1, P2, ..., Pn}, образованное n точками (3<=n<=30) на евклидовой плоскости. Каждая точка Pj определена своими координатами xj, yj. Написать программу, которая находит такие три точки из множества P, для которых площадь соответствующего треугольника максимальна.
Писал на Free Pascal 2.6.2
Задача: Рассмотрим множество 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.