Code
program opred;
uses crt;
const n=5;
type
Tmatr=array [1..n,1..n] of real;
var a:Tmatr;
det:real;
i,j:integer;
procedure Per(k,n:integer;var a:Tmatr; var p:integer);
{процедура перестановки строк, когда главный элемент=0}
var i,j:integer;z:real;
begin
z:=a[k,k];i:=k;p:=0;
for j:=k+1 to n do
begin
if abs(a[j,k])>z then
{выбираем строку, где в данном столбце максимальный по модулю элемент}
begin
z:=abs(a[j,k]);i:=j;
p:=p+1;
end;
end;
if i>k then
for j:=k to n do
begin
z:=a[i,j];a[i,j]:=a[k,j];a[k,j]:=z;{обмениваем элементы строк}
end;
end;
function znak(p:integer):integer;{если была перестановка, сменился знак определителя}
begin
if p mod 2=0 then
znak:=1 else znak:=-1;
end;
procedure opr(n:integer;var a:Tmatr;var det:real);{нахождение определителя}
var k,i,j,p:integer;
r:real;
begin
det:=1;
for k:=1 to n do
begin
if a[k,k]=0 then per(k,n,a,p);{если главный=0, перестановка}
det:=znak(p)*det*a[k,k];{меняем знак}
for j:=k+1 to n do
begin
r:=a[j,k]/a[k,k];
for i:=k to n do
begin
a[j,i]:=a[j,i]-r*a[k,i];
end;
end;
end;
end;
begin
clrscr;
writeln('Ischodnaia matritsha');
randomize;
for i:=1 to n do
begin
for j:=1 to n do
begin
a[i,j]:=random(10)+random;
write(a[i,j]:10:5);
end;
writeln;
end;
writeln;
opr(n,a,det);
write('opr=',det:4:0);
readln
end.
Вот что то типа того. Только тут задана квадратная матрица 5 на 5 конст. можешь менять на своё усмотрение