Информатика, вопрос задал koteika777 , 8 лет назад

Нужно переделать эту программу на паскале для нахождения треугольника с самой большой площадью, образованным всеми вариантами точек
uses crt,graphABC;
var
x,y:array[1..100] of integer;
maxR,R,i,j:integer;
begin
randomize;
for i:=1 to 100 do
begin
x[i]:=random(600)+10;
y[i]:=random(360)+10;
circle(x[i],y[i],2);
end;
maxR:=0;
for i:=1 to 99 do
for j:= i+1 to 100 do
begin
R:=sqr(x[i]-x[j])+sqr(y[i]-y[j]);
if R>maxR then maxR:=R;
end;
readln;
setpencolor(clred);
for i:=1 to 99 do
for j:=i+1 to 100 do
begin
R:=sqr(x[i]-x[j])+sqr(y[i]-y[j]);
if R=maxR then line (x[i],y[i],x[j],y[j]);
if R=maxR then writeln (x[i],' ',y[i],' ',x[j],' ',y[j]);
end;
end.

Ответы на вопрос

Ответил pacixor
0
Попробуйте такое:


uses graphABC;
var
  x, y: array [1 .. 100] of integer;
  mI, mJ, mK, maxR, R, i, j, k: integer;
begin
  randomize;
  for i := 1 to 100 do
  begin
    x[i] := random(600) + 10;
    y[i] := random(360) + 10;
    circle(x[i], y[i], 2);
  end;
  maxR := 0;
  for i := 1 to 100 do
    for j := 2 to 99 do
      for k := 3 to 98 do
      begin 
        R := abs((x[i]-x[k])*(y[j]-y[k])-(x[j]-x[k])*(y[i]-y[k])div 2);
        if R > maxR then
        begin
          maxR := R;
          if R > mI then mI := i;
          if R > mJ then mJ := j;
          if R > mK then mK := k;
        end;
      end;
  setpencolor(clred);
  line(x[mI], y[mI], x[mJ], y[mJ]);
  line(x[mJ], y[mJ], x[mK], y[mK]);
  line(x[mK], y[mK], x[mI], y[mI]);
end.
Новые вопросы