bonjour, mon projet permet a utilisateur de calculer la matrice inverse si s'est possible
PROGRAM matrice (input,output);
{ on se limite à 10x10, }
uses crt;
TYPE
tmat= array [1..10,1..10] of real;{le tableau insertion}
VAR
dim : integer; { dimension matrice et calculer }
det : real; { résultat d‚sir‚ }
mat : tmat; { matrice et calculer }
appel : real; { nb d'appels }
procedure entree;{enregistrement des valeur du tableau}
var lig, col : integer;
begin
writeln('Dimension de la matrice ?');
readln(dim); { dim variable globale }
while ((dim<2) and (dim<10)) do
begin
writeln('Dimension de la matrice ?');
writeln('elle doit etre conprise entre 2 et 10');
readln(dim); { verication de dim }
end;
writeln('Entrez les composantes :');
for lig := 1 to dim do
begin
for col := 1 to dim do
begin
writeln('entrer la valeur de la ligne ',lig,' et la colonne ',col,':');
readln(mat[lig,col]);
end;
end;
end;
procedure sous_mat (mdeb : tmat; var mfin : tmat; ind, dim : integer);
{ on supprime la colonne 1 et la ligne ind pour avoir la s/mat de dim-1 }
var col, lig, l : integer;
begin
l := 0;
for lig := 1 to dim do
begin
if lig <> ind then
begin
l := l + 1;
for col := 2 to dim do
mfin[l,col - 1] := mdeb[lig,col];
end;
end;
end;
function detn (m : tmat; d : integer) : real;
{ det ordre d en fonction ordre d-1 }
var result : real;
mprim : tmat; { matrice intermédiaire }
lig, signe : integer;
begin
appel := appel + 1;
if d = 1 then detn := m[1,1]{ fin de recuteration de det par n-1 }
else
begin
result := 0;
signe := -1;
for lig := 1 to d do
begin
sous_mat(m,mprim,lig,d);
signe := -signe;{ changer de signe à chaque ligne }
result := result + (signe * m[lig,1] * detn(mprim,d - 1))
end;
detn := result
end;
end;
procedure inverse;
VAR ta,mdet,mresp:tmat;
i,j,a,b,k,m,verifk,verifm:integer;
begin
for i:=1 to dim do
begin
for j:=1 to dim do
ta[j,i]:=mat[i,j];
end;
{la trans poser de la matrice}
writeln('la transposer de la matrice est:');
for i:=1 to dim do
begin
for j:=1 to dim do
begin
write(ta[i,j]:5:0);
end;
writeln;
end;
a:=1;
b:=1;
for k:=1 to dim do
begin
for m:=1 to dim do
begin
for i:=1 to dim do
begin
if i=k then
else
begin{recuperation de la matrice d'ordre dim-1}
for j:=1 to dim do
begin
if j=m then
else
begin
mdet[a,b]:=ta[i,j];
a:=a+1;
end;
end;
a:=1;
b:=b+1;
end;
end;
verifk:=k+m;
verifm:=1;
for i:=1 to verifk do
begin
verifm:=verifm*(-1);
end;
mresp[k,m]:=verifm*detn(mdet,dim-1);{recuperation de la comatrice }
b:=1;
end;
end;
writeln(' la comatrice est:');{affichage de la transposer de la comatrice}
for i:=1 to dim do
begin
for j:=1 to dim do
write(mresp[i,j]:5:0);
writeln;
end;
writeln(' l''inverse de la matrice est:');{affichage de l'inverse de la comatrice}
for i:=1 to dim do
begin
for j:=1 to dim do
write(mresp[i,j]:5:0,'/',det:5:0);
writeln;
end;
end;
procedure verif(r:real);
begin
if r=0 then
writeln('la matrice n''est pas inversible')
else
inverse;
end;
BEGIN { programme principal }
clrscr;
entree;
det := detn(mat,dim);
writeln('det = ',det:5:0);
verif(det);
readln;
END.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.