CONST nmax = 10;
TYPE matrice = array[1..nmax,1..nmax] of real;
VAR A, B, C : matrice;
m, n, p : integer;
reponse : string[3];
PROCEDURE CREER_MATRICE(Var n:integer;Var X:matrice);
Var i,j, choix : integer;
r : real;
Begin
repeat
write('Taille de la matrice (au plus ',nmax,') ? ');
readln(n);
until (n>0) and (n<=nmax);
writeln('forme de la matrice :');
writeln('-1- scalaire');
writeln('-2- première diagonale');
writeln('-3- deuxième diagonale');
writeln('-4- triangulaire supérieure');
writeln('-5- triangulaire inférieure');
writeln('-6- quelconque');
writeln;
write('votre choix ? '); readln(choix);
(* NB : si le choix n'appartienjt pas à la liste
ci-dessus, la matrice est
remplie de 0 *)
randomize;
for i:=1 to n do
for j:=1 to n do X[i,j]:=0;
case choix of
1 : begin
r:=random(19)-9.0;
for i:=1 to n do X[i,i]:=r;
end;
2 : for i:=1 to n do X[i,i]:=random(19)-9.0;
3 : for i:=1 to n do X[i,n+1-i]:=random(19)-9.0;
4 : for i:=1 to n do for j:=i to n do X[i,j]:=random(19)-9.0;
5 : for i:=1 to n do for j:=1 to i do X[i,j]:=random(19)-9.0;
6 : for i:=1 to n do for j:=1 to n do X[i,j]:=random(19)-9.0;
end;
End;
PROCEDURE AFFICHER_MATRICE(n:integer;X:matrice);
Var i, j : integer;
Begin
writeln;
writeln('voici la matrice :');
writeln;
for i:=1 to n do
begin
for j:=1 to n do write(X[i,j]:7:0);
writeln;
end;
End;
PROCEDURE PRODUIT_MATRICE(X,Y:matrice;Var Z:matrice);
(* calcule Z=X*Y
*)
Var i, j, k : integer;
Begin
for i:=1 to n do
for j:=1 to n do
begin
Z[i,j]:=0;
for k:=1 to n do Z[i,j]:=Z[i,j]+X[i,k]*Y[k,j];
end;
End;
BEGIN
repeat
CREER_MATRICE(n,A);
AFFICHER_MATRICE(n,A);
write('Exposant ? '); readln(p);
B:=A; (* B= A puissance 1 *)
for m:=2 to p do
begin
PRODUIT_MATRICE(A,B,C);
B:=C (* B= A puissance m *)
end;
writeln;
writeln('voici la puissance ',p,' de la matrice ci-dessus :');
writeln;
AFFICHER_MATRICE(n,B);
writeln;
write('voulez-vous recommencer (oui/non) ? ');
readln(reponse);
until reponse='non';
END.