Vous êtes sur la page 1sur 8

Matrice

Exercice 1 :
Soit la matrice carrée M suivante : {****** affichage de la matrice *******}

1 1 1 1 1 1 1 1 1 procedure affiche(m:mat;n:integer);

1 2 3 4 5 6 7 8 begin

1 3 6 10 15 21 for i:=1 to n do

1 4 10 20 35 begin

1 5 15 35 for j:=1 to n do

1 6 21 if(j<=n-i+1) then
? write(m[i,j]:5)
1 7
else
1 8
write(' ':5);
1
writeln;
program ex1;
uses wincrt; end;
type mat=array[1..10,1..10] of integer;
var m:mat; n,i,j:integer; end;
{******* Somme de 1 à j *******}
{*********** pp ********** }
function somme(m:mat;i,j:integer):integer;
var s,k:integer; begin
begin
s:=0; repeat
for k:=1 to j do
write('Saisir N: ');readln(n);
s:=s+m[i,k];
somme:=s; until (n in [1..10]);
end;
{******** Remplissage MATRICE *******} remplir(m,n);
procedure remplir(var m:mat;n:integer);
affiche(m,n);
begin
{***** les elts de ligne 1 sont à 1 ****} end.
for J:=1 to n do
10 JANVIER 2014

m[1,j]:=1;
for i:=2 to n do
for j:=1 to n-i+1 do
if(j=1)then
m[i,j]:=1
else
m[i,j]:=somme(m,i-1,j);

5
end;
Exercice 2 :
Program ex2; 1 A
uses wincrt; P1
type mat= array[1..10,1..10] of integer; ?
var 1 1
m:mat ; n,i,j:integer; 1 3 1

{******** Affichage ********} 1 3 7 1


procedure affiche(m:mat; n:integer); 1 3 15 1
7
begin
for i:=1 to n do 1 3 7 15 31 1
begin
1 3 7 15 31 63 1
for j:=1 to n do
if(m[i,j]=0)then 1 1
write(' ':5) compléter
else
write(m[i,j]:5);
writeln;
{********* pp ********}
end;
begin
end;
repeat
procedure remplir(var m:mat; n:integer);
write('Saisir N: '); readln(n);
begin
until (n in [1..10]);
for i:=1 to n do
remplir(m,n);
for j:=n-i+1 to n do
affiche(m,n);
if ((j=n) or (j=n-i+1)) then
end.
m[i,j]:=1
else if ((i>2) and (m[i-1,j]=1)and (m[i,j-1]=1))
then
m[i,j]:=3
else
m[i,j]:=m[i,n-i+1]+m[i,j-1]+m[i-1,j];
end;
10 JANVIER 2014

5
Exercice 3 :
On désire remplir une matrice M carré de Pour N=6 :
taille n x n (n est un entier donné ≥ 2) par les 1 5 10 10 5 1
éléments de deux triangles de pascal : 1 1 4 6 4 1
M 1 2 1 3 3 1
 Le premier triangle (en gris) : Triangle de
1 3 3 1 2 1
Pascal vu en cour. 1 4 6 4 1 1
1 5 10 10 5 1
 Le deuxième triangle (en blanc) : Triangle
de Pascal mis à l’envers.

program ex3; {******** affichage matrice *****}


uses wincrt; procedure affiche(m:mat;n:integer);
type mat=array[1..10,1..10] of integer;
begin
var m:mat; n,i,j:integer;
for i:=1 to n do
{****** Remplissage triangle haut *******}
procedure remplir1(var m:mat;n:integer); begin
begin for j:=1 to n do
for i:=1 to n do write(m[i,j]:5);
for j:=1 to i do writeln;
if(j=1)or(j=i)then end;
m[i,j]:=1
end;
else
m[i,j]:=m[i-1,j]+m[i-1,j-1]; {********* pp *********}
end; begin
{****** Remplissage triangle bas *******} repeat
procedure remplir2(var m:mat;n:integer); write('saisir N: '); readln(n);
begin until(n in [1..10]);
for i:=n downto 1 do remplir1(m,n);
for j:=n downto i do
remplir2(m,n);
if(j=n)or(j=i)then
m[i,j]:=1 affiche(m,n);
else end.
m[i,j]:=m[i+1,j]+m[i+1,j+1];
end;
10 JANVIER 2014

Exercice 4 :

5
On désire former une matrice M spirale de
Pour N=6 : taille n x n (n est un entier donné ≥ 2)  comme
1 2 3 4 5 6 le montre le figure suivant :
12 11 10 9 8 7
M 13 14 15 16 17 18
A compléter

36 35 34 33 32 31

program ex4; {******** affichage matrice *****}


uses wincrt; procedure affiche(m:mat;n:integer);
type mat=array[1..10,1..10]of integer; begin
var m:mat; n,i,j,k:integer; for i:=1 to n do
begin
{********* Matrice spirale *******} for j:=1 to n do
procedure remplir(var m:mat;n:integer); write(m[i,j]:5);
begin writeln;
{***** compteur k initialisé à 1 ****} end;
k :=1 ; end;
for i:=1 to n do {********* pp *********}
begin
if(i mod 2=1)then repeat
for j:=1 to n do write('saisir N: '); readln(n);
begin until(n in [1..10]);
m[i,j]:=k; remplir(m,n);
k:=k+1; affiche(m,n);
end end.
else
for j:=n downto 1 do
begin
m[i,j]:=k;
k:=k+1;
end;
end;
10 JANVIER 2014

Exercice 5 : (Extrait bac contrôle 2010)


On propose d’écrire un programme permettant de : Pour N=6 :

5
- Remplir une matrice carrée M de taille (nxn) selon le principe
1 2 3 4 5 6
décrit ci-dessous. N est un entier donné (2≤N≤10). Le
1 2 5 1 8 3 1
remplissage de la matrice M est décrit comme suit : 2 20 18 13 12 4
1) Le remplissage de la matrice M, doit tenir compte des règles 3 67 47 29 16
suivantes : 4 159 92 45
5 296 137
 La première ligne de M est remplie de façon aléatoire (au
6 433
hasard), par des chiffres de 1 à 9.
Exemple :
 A partir de la deuxième ligne de la matrice M, un élément . M[2,2] = 5 + 1 + 8 + 3 +1 =18
quelconque M[l,c] est déterminé en faisant la somme des .M[3,4] = 12 + 4 = 16
éléments de la ligne (l-1), en commençant à partir de
l’élément M[l-1,c].
 Le nombre des cases remplies pour une ligne est : n-l+1.
program ex5; {****** affichage de la matrice *******}
uses wincrt; procedure affiche(m:mat;n:integer);
type mat=array[1..10,1..10] of integer; begin
var m:mat; n,i,j:integer; for i:=1 to n do
{******* Somme de 1 à j *******} begin
function somme(m:mat;i,j:integer):integer; for j:=1 to n do
var s,k:integer; if(j<=n-i+1) then
begin write(m[i,j]:5)
s:=0; else
for k:=n-i+1 downto j do write(' ':5);
s:=s+m[i,k]; writeln;
somme:=s; end;
end; end;
{******** Remplissage MATRICE *******} {*********** pp ********** }
procedure remplir(var m:mat;n:integer); begin
begin repeat
{*** remplissage aléatoire de la 1er ligne ****} write('Saisir N: ');readln(n);
randomize; until (n in [1..10]);
for J:=1 to n do remplir(m,n);
m[1,j]:=random(9)+1; affiche(m,n);
{******* les autres elts de la matrice***} end.
for i:=2 to n do
10 JANVIER 2014

for j:=n-i+1 downto 1 do


m[i,j]:=somme(m,i-1,j);
end;

Exercice 6 :
Ecrire un programme qui permet d’afficher à l’écran les deux triangles de Pascal suivants pour un entier N
(2≤N≤10) donné 

5
Exemple : Pour N=6 le programme affiche la figure suivante :

1 1
1 1 1 1
1 2 1 1 2 1
1 3 3 1 1 3 3 1
1 4 6 4 1 1 4 6 4 1
1 5 10 10 5 1 5 10 10 5 1

program ex6; {******** affichage matrice *****}


uses wincrt; procedure affiche(m:mat;n:integer);
type mat=array[1..10,1..10] of integer; begin
var m:mat; n,i,j:integer; for i:=1 to n do
{****** Remplissage triangle1 *******} begin
procedure remplir1(var m:mat;n:integer); for j:=1 to 2*n-1 do
begin if(j>i)and(j<2*n-i)then
for i:=1 to n do write(' ':5)
for j:=1 to i do else
begin write(m[i,j]:5);
if(j=1)or(j=i)then writeln;
m[i,j]:=1 end;
else end;
m[i,j]:=m[i-1,j]+m[i-1,j-1]; {********* pp *********}
m[i,2*n-i]:=m[i,j]; begin
end; repeat
end; write('saisir N: '); readln(n);
until(n in [1..10]);
remplir(m,n);
affiche(m,n);
end.
10 JANVIER 2014

Exercice 7 :
On désire remplir une matrice M carré de Pour N=7 :
taille n x n (1≤n≤15 et impair) par des étoiles
comme le montre la figure.

5
Traduction en Pascal Pour N=7 :

program ex7; *
uses wincrt; * * *
type mat=array[1..15,1..15]of char; M * * * * *
var m:mat; n,i,j:integer; * * * * * * *
{******** initialisation de la matrice ****} * * * * *
procedure init(var m:mat; n:integer); * * *
begin *
for i:=1 to n do {*** Remplissage des deux triangles ***}
for j:=1 to n do procedure remplir(var m:mat; n:integer);
m[i,j]:='.'; begin
end; for i:=1 to (n div 2) + 1 do
{*********** Affichage matrice ********} for j:=(n div 2)-i+2 to (n div 2)+i do
procedure affiche(m:mat; n:integer); begin
begin m[i,j]:='*';
for i:=1 to n do m[n-i+1,j]:='*';
begin end;
for j:=1 to n do end;
write(m[i,j]:5);
writeln; {******** programme principal ******}
end; begin
end; repeat
write('Saisir N: '); readln(n);
until (n>=2) and (n mod 2<>0);
init(m,n);
remplir(m,n);
affiche(m,n);
end.

10 JANVIER 2014

Exercice 8 :
On désire remplir une matrice M carré de Pour N=4 :
taille n x n (1≤n≤15 ) par des étoiles comme le

5
montre la figure.
*
Traduction en Pascal * *
program ex8; M * * *
uses wincrt; * * * *
type mat=array[1..15,1..15]of char; * * *
var m:mat; n,i,j:integer; * *
{******** initialisation de la matrice ****} *
procedure init(var m:mat; n:integer);
begin
for i:=1 to 2*n-1 do
for j:=1 to n do
m[i,j]:='.';
end; {******** programme principal ******}
{*********** Affichage matrice ********} begin
procedure affiche(m:mat; n:integer); repeat
begin write('Saisir N: '); readln(n);
for i:=1 to 2*n-1 do until (n>=2);
begin init(m,n);
for j:=1 to n do remplir(m,n);
write(m[i,j]:5); affiche(m,n);
writeln; end.
end;
end;
{******** Remplissage des deux triangles
*****}
procedure remplir(var m:mat; n:integer);
begin
for i:=1 to n do
for j:=1 to i do
begin
m[i,j]:='*';
m[2*n-i,j]:='*';
end;
end;
10 JANVIER 2014