прежде всего нужно почитать что представляет собой метод крамера
а также вычисление определителя матрицы
const n = 3; { размерность матрицы } type matr = array[1..n, 1..n] of longint; procedure GetMatr(a:matr; var b:matr; m,i,j:integer); { Вычеркивание из матрицы строки и столбца } var ki,kj,di,dj:integer; begin di:=0; for ki:=1 to m-1 do begin if (ki=i) then di:=1; dj:=0; for kj:=1 to m-1 do begin if (kj=j) then dj:=1; b[ki,kj]:=a[ki+di,kj+dj]; end; end; end; Function Determinant(a: matr; n: integer) : longint; { Вычисление определителя матрицы } var i,j,d,k:longint; b:matr; begin d:=0; k:=1; if (n<1) then begin writeln('Determinant: Cann''t run. N=',n); halt; end; if (n=1) then d:=a[1,1] else if (n=2) then d:=a[1,1]*a[2,2]-a[2,1]*a[1,2] else { n>2 } for i:=1 to n do begin GetMatr(a,b,n,i,1); {writeln('i=',i,' a[',i,',1]=',a[i,1]); PrintMatr(b,n-1);} d:=d+k*a[i,1]*Determinant(b,n-1); k:=-k; end; Determinant:=d; end; var a: matr; b: array [1..n] of integer; i, j, dt: longint; temp: integer; x: real; begin { Заполнение матриц } a[1, 1]:=2; a[2, 1]:= 5; a[3, 1]:=4; b[1]:=30; a[1, 2]:=1; a[2, 2]:= 3; a[3, 2]:=2; b[2]:=150; a[1, 3]:=2; a[2, 3]:= 10; a[3, 3]:=9; b[3]:=110; { Вычисление определителя } dt := Determinant(a, n); for i:=1 to n do begin {меняем местами b с текущим стоблцом матрицы a} for j:=1 to n do begin temp := b[j]; b[j] := a[i, j]; a[i, j] := temp; end; x:=Determinant(a, n) / dt; writeln('x(', i, ') = ', x:3:0); {поменяйте на нужный формат вывода} {назад: меняем местами b с текущим стоблцом матрицы a} for j:=1 to n do begin temp := b[j]; b[j] := a[i, j]; a[i, j] := temp; end; end; end.
Комментариев нет:
Отправить комментарий