Witam.

Program oblicza minimalna triangulacje wielokata ( robiony w Pascalu )

Ponizej umiescilem kod programu. Ogolnie moim zdaniem program jest dobry, tylko ze generowana tabelka m pokazuje niewlasciwe wartosci w ostatnim wierszu a wszystkie pozostale sa dobre i to samo jest z tablka d. Mogl ktos spojrzec na ten programik okiem specjalisty i cosik w nim poprawic. Program bedzie dobrze dzialac jezeli w ostatniej kulumnie w tabeli m beda wszystkie wartosci takie same. np. dla n=7 i dla wierzcholkow o wsp. (0,10) (0,20) (8,26) (15,26) (27,21) (22,12) (10,0)
w ostatniej kolumnnie w tabelce m powinny być tylko wartość 75,43.A Program pokazuje w każdym wierszu w ostatniej kolumie 75,43(to dobrze) ale w ostatnim wierszu w otatniej kolumnie pokazuje 77,56 (a powinien pokzazywac 75,43).
Kombinowalem juz na wszystkie sposoby i nie wiem juz co zrobic. A programik jest mi potrzebny na zaliczenie.

<-------------------------------->

program MinimalnaTriangulacja;

uses crt;

type
TypWsp = record X, Y: real end;

var
wspolrzedne: array[0..50] of TypWsp;
N: integer;
M: array[0..20,1..20] of real;
D: array[2..20,1..20] of integer;
min: real;

function odl(K, L: integer): real;
var
tmp: real;
begin
if abs(K-L)=1 then tmp:=0 else
tmp := sqrt(sqr(wspolrzedne[k].X - wspolrzedne[l].X)
+ sqr(wspolrzedne[k].Y - wspolrzedne[l].Y));
odl:=tmp;
end;

function Index(K: integer): integer;
begin

Index := k mod n;
end;

procedure Tablica_M;
var
j, i: integer;
begin
writeln;
writeln('Tablica m (Wartosci - koszty triangulacji) : ');
for i:=0 to n-1 do
begin
writeln;
for j := 1 to n do write(m[i,j]2);
end;
end;

procedure Tablica_S;
var
j, i: integer;
begin
writeln;
writeln('Tablica d (Pokazuje minimalna triangulacje wielokata):');
for i:=0 to n-1 do
begin
writeln;
for j := 1 to n do write(d[i,j]:7);
end;
end;

procedure WprWsp;
var
i :integer;
begin
write('Ile wielokat ma miec wierzcholkow (N > 3): ');
readln(N);
writeln('podaj wspolrzedne wierzcholkow ');
for I:=0 to N-1 do
begin
write('Podaj x',i,': ') ;
readln(wspolrzedne[I].X);
write('Podaj y',i,': ');
readln(wspolrzedne[I].Y);
end
end;

procedure Klimsack;
var
s, i, k,x: integer;
min, tmp: real;
begin
for i:=0 to n-1 do
for s:=1 to 3 do
m[i,s]:=0;
for s:=4 to n do
for i:=0 to n-1 do
begin
min := 20000000;

    for k:=1 to s-2 do
      begin
        tmp := m[i,k+1] + m[index(i+k),s-k] + odl(i,index(i+k))
               + odl(index(i+k),index(i+s-1));
        if tmp<min then
        begin
        min:=tmp;


    m[i,s]:=min;
    d[i,s]:=k;

  end;

  end;
  end;

end;

begin
clrscr;
Writeln('<<< Programik znajduje ewentualne koszty triangulacji');
Writeln(' wielokata oraz minimalna triangulacje (tablica d)>>>');
WprWsp;
Klimsack;
writeln;

Tablica_M;
Tablica_S;
repeat until keypressed;
end.

<----------------------------------->

Prosze o pomoc z Gory Dziekuje