Program Cvtreug; {http://studentps.narod.ru} {Условие: На плоскости представлено множество точек. Каждая точка имеет 3 параметра: координата х, координата у и цвет. Найти треугольник с наибольшой площадью, в вершинах которого были бы 3 разные по цвету точки} type tochka=record x,y:integer; c:word; end; const n=10; var a:array[1..10] of tochka; i,j,k,b1,b2,b3:integer; a1,a2,a3,p,s,max:real; begin randomize; max:=0; for i:=1 to n do begin a[i].x:=random(45);{определяем параметры точки случайным образом} a[i].y:=random(45); a[i].c:=random(3); writeln(i,' ',a[i].x,' ',a[i].y,' ',a[i].c);{Выведем точки на экран, чтобы впоследствии проверить правильность задачи} end;{for} for i:=1 to n-2 do begin for j:=i to n-1 do begin If (a[i].c<>a[j].c then begin a1:=sqrt(sqr(a[i].x-a[j].x)+sqr(a[i].y-a[j].y)); {Стоит заметить,что одну из сторон мы можем посчитать без 3 цикла, что оптимизирует нашу задачу.} for k:=j to n do begin If (a[i].c<>a[k].c) and (a[j].c<>a[k].c) then begin a2:=sqrt(sqr(a[k].x-a[j].x)+sqr(a[k].y-a[j].y)); a3:=sqrt(sqr(a[i].x-a[k].x)+sqr(a[i].y-a[k].y)); {a1,a2,a3-стороны треугольника, выполняющие все требования, кроме (возможно) максимальности площади} p:=(a1+a2+a3)/2;{полупериметр} s:=p*sqrt((p-a1)*(p-a2)*(p-a3)){площадь} If s>max then begin{Если оказавшаяся площадь оказывается больше найденной ранее, то...} max:=s; b1:=i; b2:=j; b3:=k;{запоминаем 3 точки, чтобы потом их вывести на экран} end; end;{if} end;{if} end;{for} end;{for} end;{for} writeln('Треугольник с максимальной площадью ',max:2:2, ' образован точками ',b1,' ',b2,' ',b3); {Вместо b1, b2,b3 выведутся цифры, они на экране также присутствуют благодаря тому циклу, где мы создавали и выводили точки} readln; end.