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;