You are on page 1of 1

Program calcularea_unui_determinant;

uses crt;
var a: array[1..10,1..10] of real;
t:boolean; n,i,j,k,l,iv:integer;
temp,det:real; fi,fo :text;

begin clrscr; det:=1;
write('introduceti n='); readln(n);
if n= 0 then begin write('imposibil'); exit;
end
else begin
writeln('cititi deteminantul');
for i:=1 to n do
for j:=1 to n do begin
write('A[',i,',',j,']=');
readln(a[i,j]);
end;
for j:=1 to n-1 do begin
iv:=j; t:=true;
while (iv<=n) and t do
if a[iv,j]=0 then iv:=iv+1
else t:=false;
if t then begin det:=0; exit; end;
if j<>iv then begin
det:=-det;
for k:=j to n do begin
temp:=a[j,k];
a[j,k]:=a[iv,k];
a[iv,k]:=temp ; end;
end;
for l:=j+1 to n do
for k:=j+1 to n do
a[l,k]:=a[l,k]-a[j,k]*a[l,j]/a[j,j];
end;
for j:=1 to n do det:=det*a[j,j];
write('determinat este ',det:2:2);
if det=0 then writeln('Daterminantul este 0');
readln; readkey; end; end.
program determinant_recursiv;
uses crt;
type matr=array[1..10,1..10] of real;
var i,j,k:integer;
s:real;
mat:matr;
minor: matr;
function cdet(var x:matr; t:integer):real;
var i,j,k:integer;
s:real;
minor:matr;
begin
if t=1 then cdet :=x[1,1]
else begin
s:=0;
for k:=1 to t do
begin
for i:=1 to t-1 do
for j:=1 to k-1 do
minor[i,j]:=x[i+1,j];
for i:=1 to t-1 do
for j:=k to t-1 do
minor[i,j]:=x[i+1,j+1];
if odd(k) then s:=s+x[1,k]*cdet(minor,t-
1)
else s:=s-x[1,k]*cdet(minor,t-1);
end; cdet:=s; end; end;
begin clrscr; s:=1; write('k='); readln(k);
if k= 0 then begin write('k trebuie sa fie
mai mare ca 0'); exit; end else begin
writeln('Dati matricea:'); for i:=1 to k do
for j:=1 to k do begin
write('A[',i,',',j,']='); readln(mat[i,j])
end; end; writeln('det=',cdet(mat,k):2:4);
readkey; end.
program metoda_lui_gauss;
uses crt;
type matrice=array[1..10,1..10] of real;
vector=array[1..10] of real;
var a:matrice;
b,x:vector;
i,j,n,m,k:word;
d,s,t:real;
u,v:boolean;
procedure gauss(a:matrice; b:vector; :word;
var x:vector);
begin d:=1; v:=true; j:=1;
while (j<=k-1) and v do begin u:=true;
i:=j; while (i<=n) and u do if a[i,j]=0 then
i:=i+1 else u:=false; if u then begin d:=0;
v:=false; end else begin if j<>i then begin
d:=-d;
for k:=j to n do begin
s:=a[j,k];
a[j,k]:=a[i,k];
a[i,k]:=s;
end; t:=b[j];
b[j]:=b[i]; b[i]:=t; end; for m:=j+1 to n do
begin for k:=j+1 to n do a[m,k]:=a[m,k]-
a[j,k]*a[m,j]/a[j,j];
b[m]:=b[m]-b[j]*a[m,j]/a[j,j]; end; end;
j:=j+1; end; for j:=1 to n do d:=d*a[j,j];
if d<> 0 then begin x[n]:=b[n]/a[n,n];
for i:=n-1 downto 1 do begin
s:=b[i];
for j:=n downto i+1 do s:=s-a[i,j]*x[j];
x[i]:=s/a[i,i];
end; end; end; begin
clrscr; write('n='); readln(n);
for i:=1 to n do begin
for j:=1 to n do begin
write('a[',i,',',j,']='); read(a[i,j]); end;
end; writeln; for i:=1 to n do
begin write ('b[',i,']='); readln(b[i]);
end; writeln;
gauss(a,b,n,x); if d=0 then writeln('sistemul
nu-i compatibil determinat') else begin
write ('solutia: ',d:6:3); for i:=1 to n
do write(x[i]:6:3,' '); end;
readkey;
end.

program cramer;
type mat=array[1..10,1..10] of real;
vec=array[1..10] of integer;
vs=array[1..10] of real;
var a:mat;
b:vec;
sol:vs;
i,j,n,p:integer;
de:real;
function cdet(x:mat; t:integer):real;
var i,j,k,l:integer;
s:real;
minor:mat;
begin
if t=1 then cdet:=x[1,1]
else begin s:=0; for k:=1 to t do
begin for i:=1 to t-1 do
for j:=1 to k-1 do
minor[i,j]:=x[i+1,j];
for i:=1 to t-1 do
for j:=k to t-1 do
minor[i,j]:=x[i+1,j+1];
if odd(k) then s:=s+x[1,k]*cdet(minor,t-1)
else s:=s-x[1,k]*cdet(minor,t-1);
end; cdet:=s; end; end;
function transforma(x:mat;t,l:integer):real;
var i:integer; begin for i:=1 to t do x[i,l]:=b[i];
transforma:=cdet(x,t); end;
begin write('n='); readln(n); for i:=1 to n do
for j:=1 to n do begin write('a[', i, ',', j, ']=');
read(a[i,j]); end; for i:=1 to n do
begin write('b[',i,']='); readln(b[i]); end;
de:=cdet(a,n); if de<> 0 then begin
for i:=1 to n do sol[i]:=transforma(a,n,i)/de;
for i:=1 to n do writeln('x[',i,']=',sol[i]:0:3);
end else writeln('calcul imposibil'); readln;
end.

You might also like