Написать программу которая вычисляет определитель в квадратной матрице третьего порядка — Pascal(Паскаль)

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.

Leave a Comment

− 5 = 3