USES ReadNum;
CONST NN = 3;
TYPE
Matrix = ARRAY[1..NN,1..NN] OF INTEGER;
Index = ARRAY[1..NN] OF BOOLEAN;
VAR
d: INTEGER;
i,j: WORD;
A: Matrix;
rows,cols:Index;
FUNCTION FindTrue(mas:Index):WORD;
VAR i:WORD;
BEGIN
FOR i := 1 TO NN DO
IF mas[i] THEN
BEGIN
FindTrue := i;
Exit;
END;
FindTrue := 0; {признак ошибки: TRUE не найдено}
END;
FUNCTION minor(A: Matrix; rows,cols: Index; n: WORD): INTEGER;
{Вычисление миноров для матрицы A;
rows[i]: истина, если i-ая строка содержится в миноре;
cols[j]: истина, если j-ый столбец содержится в миноре;
n: порядок минора}
VAR
i,j:WORD; {Номера строки и столбца}
aa,sum,jo:INTEGER;
BEGIN
i := FindTrue(rows);
IF n = 1 THEN
BEGIN
j := FindTrue(cols);
minor := A[i,j];
END
ELSE
BEGIN
rows[i] := FALSE; {из rows вычеркнуть строку с номером i и...}
Dec(n); {n уменьшить на 1 для всех миноров следующего порядка}
sum := 0; {инициализация накопителя суммы}
jo := 1; {первое произведение со знаком +}
FOR j := 1 TO NN DO
{Найдя j-й элемент минора }
IF cols[j] THEN
BEGIN
{Вычисление элемента разложения минора }
{для этого сначала подготовить аргумента функции minor:}
{из cols вычеркнуть столбец с номером j}
cols[j] := FALSE;
aa := A[i,j]; {если A[i,j] = 0, то }
IF aa <> 0 THEN {не надо считать его minor }
sum := sum + jo * aa * minor(A, rows, cols, n);
{восстановить столбец j для следующего минора}
cols[j] := TRUE;
jo := -jo; {для следующего произведения}
END;
minor := sum;
END;
END;
FUNCTION det(A: Matrix): INTEGER;
{Вычисление определителя матрицы A порядка NN}
VAR
i: WORD;
BEGIN
FOR i:= 1 TO NN DO
BEGIN
rows[i] := TRUE; {Все строки}
cols[i] := TRUE; {и столбцы матрицы}
END; {входят в ее определитель}
det := minor(A, rows, cols, NN);
END;
BEGIN
{Ввод матрицы A}
OpenInput('num.txt');
FOR i := 1 TO NN DO
FOR j := 1 TO NN DO
A[i,j] := ReadInt;
CloseInput;
{Вычисление определителя}
d := det(A);
WriteLn('Значение определителя ', d:5);
END.
Следующий вариант
uses crt;
var
a: array[1..3,1..3] of real;
det: real;
i,j: integer;
begin
clrscr;
for i:=1 to 3 do begin
write('->'); read(a[i,1]) ;
readln(a[i,2]) ;
readln(a[i,3]);
end;
det:=(a[1,1]*a[2,2]*a[3,3])+(a[1,2]*a[2,3]*a[3,1])+
(a[1,3]*a[2,1]*a[3,2])- (a[1,3]*a[2,2]*a[3,1])-(a[1,1]*a[2,3]*a[3,2])-
(a[1,2]*a[2,1]*a[3,3]);
for i:=1 to 3 do begin
for j:=1 to 3 do
write(a[i,j]:6:2) ;
writeln; end;
writeln('ravno ',det:6:2);
readln;
end.