Poniższa funkcja wyznacza wyznacznik macierzy. funkcja minor miała wyznaczać minory tej macierzy, Które potrzebuje do obliczenia macierzy dopełnień algebraicznych. Nie wiem gdzie jest błąd. Bo daje mi błędne wyniki. Proszę o pomoc
function gauss(a: arr; dim: integer): real;
var
new_a : arr;
k : integer;
factor, temp, det : real;
begin
{ copy the array }
for i := 1 to dim do
for j := 1 to dim do
new_a[i,j] := a[i,j];
det := 1.0;
{ do the elimination }
for i := 1 to dim-1 do
begin
{ if the main diagonal value is zero }
{ re-sort the array }
if (new_a[i,i] = 0) then
begin
for j := i+1 to dim do
begin
if (new_a[j,i]=0) then
begin
for k := 1 to dim do
begin
temp := new_a[i,k];
new_a[i,k] := new_a[j,k];
new_a[j,k] := temp;
end;
{ For Gauss-Jordan Elimination, }
{ if we do a switch, the determinant }
{ switches sign. }
det := -det;
break;
end;
end;
end;
{ if after the resorting, the value is still zero }
{ then the determinant is definitely zero }
if (new_a[i,i] = 0) then
begin
gauss := 0; exit;
end;
{ eliminate the lower rows to achieve triangular zeroes }
for j := i+1 to dim do
begin
if (new_a[j,i]=0) then
begin
factor := (new_a[j,i] * 1.0) / new_a[i,i];
for k := i to dim do
begin
new_a[j,k] := new_a[j,k] - factor * new_a[i,k];
{2}
end;
{1}
end;
end;
end;
{ calculate the main diagonal }
for i := 1 to dim do
det := det * new_a[i,i];
gauss := det;
end;
function minor (a: arr; dim: integer; i, j : integer) : real;
var x, y, n, m, o, k : integer;
nowy_a : arr;
begin
n:=1;
m:=1;
for x:=1 to dim do
for y:=1 to dim do
begin
if (y=j) or (x=i) then begin
if y=dim then
begin
m:=1;
n:=n+1;
end;
end
else
begin
nowy_a[n,m]:=a[x,y];
m:=m+1;
if y=dim then
begin
m:=1;
n:=n+1;
end;
end;
end;
k:=-1;
for o:=1 to i+j do
k:=k*(-1);
minor:=k*gauss(nowy_a, m);
end;