главная     электронная почта

Решение задачи

{Выпуклый n-угольник(n>3) задаётся коорд. своих вершин в порядке обхода. Разбить его на треуг. диагоналями, не пересек.,так,чтобы сумма длин диагоналей была минимальной}



uses crt;
const nmax=10;
var
x,y:array [1..nmax] of longint;
s : array [1..nmax] of real;
n,i,a,j : integer;
    min : real;
    q : boolean;
function rast(n1,n2:integer):real;
begin
  rast:=sqrt(sqr(x[n1]-x[n2])
  +sqr(y[n1]-y[n2]));
end;
begin
  clrscr;
  repeat;
    q:=true;
    write('кол-во углов n=');
	readln(n);
    if n>nmax then
    begin
      writeln('слишком большое
	   n (n<=',nmax,').');
      q:=false;
    end;
    if n<4 then
    begin
      if n<3 then 
	  writeln('Такой фигуры не 
	  существует (n>3).') 
	  else
      writeln('В треугольнике 
	  нет диагоналей!!');
      q:=false;
    end;
  until q;
  for i:=1 to n do
  begin
    write('x[',i,']=');
	readln(x[i]);
    write('y[',i,']=');
	readln(y[i]);
    writeln;
  end;
  for i:=1 to nmax 
  do s[i]:=0;
  for i:=1 to n do
  begin
    for j:=1 to n-3 do
    begin
      a:=i+j+1;
      if a>n then a:=a-n;
      s[i]:=s[i]+rast(i,a);
    end;
  end;
  min:=s[1];
  a:=1;
  for i:=1 to n do
  begin
    if min>s[i] then
    begin
      a:=i;
      min:=s[i];
    end;
  end;
  writeln('Ответ: из точки
   № ',a);
  readln;
end.


Hosted by uCoz