Turbo Pascal Массив записей

Ответить
knst
Сообщения: 2
Зарегистрирован: 09 мар 2014, 20:22

09 мар 2014, 20:47

Помогите пожалуйста программу оформить, я тут начал, но кое-где застрял.
Задача: Рассмотрим множество 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.
Писал на Free Pascal 2.6.2
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

09 мар 2014, 22:49

У вас неправильно объявлена функция
function plosh(a, b, c : pp):real; - аргументы имеют тип tocka, а не рр
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
knst
Сообщения: 2
Зарегистрирован: 09 мар 2014, 20:22

09 мар 2014, 23:27

Хыиуду, спасибо за помощь ;)
Ответить