uses crt; const eps=0.000000001; type matr=array[1..30,1..30] of real; var a,b,a0:matr; i,j,imx,np,n:integer; s0,s1,elem:real; procedure PrintMatr(m,m1:matr;n,nz,nd:integer); var i,j:integer; begin for i:=1 to n do begin if (i=1) then write(np:2,':') else write(' '); for j:=1 to n do write(m[i,j]:nz:nd); for j:=1 to n do write(m1[i,j]:nz:nd); writeln; end; inc(np); end; procedure MultString(var a,b:matr;i1:integer;r:real;N:integer); var j:integer; begin for j:=1 to n do begin a[i1,j]:=a[i1,j]*r; b[i1,j]:=b[i1,j]*r; end; end; procedure AddStrings(var a,b:matr;i1,i2:integer;r:real;n:integer); var j:integer; begin for j:=1 to n do begin a[i1,j]:=a[i1,j]+r*a[i2,j]; b[i1,j]:=b[i1,j]+r*b[i2,j]; end; end; procedure MultMatr(a,b:matr;var c:matr;n:integer); var i,j,k:byte; s:real; begin for i:=1 to n do for j:=1 to n do begin s:=0; for k:=1 to n do s:=s+a[i,k]*b[k,j]; c[i,j]:=s; end; end; function sign(r:real):shortint; begin if (r>=0) then sign:=1 else sign:=-1; end; begin clrscr; write('Введите порядок матрицы: '); readln(n); for i:=1 to n do for j:=1 to n do begin write('Введите, пожалуйста, элемент с индексом ',i,',',j,': '); writeln; readln(elem); a[i,j]:= elem; end; for i:=1 to n do for j:=1 to n do a0[i,j]:=a[i,j]; for i:=1 to n do for j:=1 to n do if (i=j) then b[i,j]:=1; writeln('Starting matrix:'); np:=0; PrintMatr(a,b,n,6,1); for i:=1 to n do begin for j:=i+1 to n do AddStrings(a,b,i,j,sign(a[i,i])*sign(a[j,i]),n); { PrintMatr(a,b,n,6,1);} if (abs(a[i,i])>eps) then begin MultString(a,b,i,1/a[i,i],n); for j:=i+1 to n do AddStrings(a,b,j,i,-a[j,i],n); { PrintMatr(a,b,n,6,1);} end else begin writeln('Обратной матрицы не существует.'); halt; end end; if (a[n,n]>eps) then begin for i:=n downto 1 do for j:=1 to i-1 do begin AddStrings(a,b,j,i,-a[j,i],n); end; { PrintMatr(a,b,n,8,4);} end else writeln('Обратной матрицы не существует.'); MultMatr(a0,b,a,n); writeln('Начальная матрица, обратная к ней матрица:'); PrintMatr(a0,b,n,7,3); writeln('Проверка: должна быть единичная матрица.'); PrintMatr(a,a,n,7,3); end.