Sie sind auf Seite 1von 10

Chapitre II: Les tableaux

1. Introduction

Supposons que nous avons dterminer partir de 30 notes fournies en entre, le nombre
dtudiants qui ont une note suprieure la moyenne de la classe.
Pour parvenir un tel rsultat, nous devons :
1. Lire les 30 notes
2. Dterminer la moyenne de la classe : m
3. Compter combien parmi les 30 notes sont suprieures la moyenne m.
Il faut donc conserver les notes en mmoire afin quelles soient accessibles durant lexcution
du programme.
Solution 1 : utiliser 30 variables relles nommes x1, x2, , x30
Cette faon de faire prsente deux inconvnients :
- il faut trouver un nom de variable par note ;
- il nexiste aucun lien entre ces diffrentes valeurs. Or, dans certains cas, on est appel
appliquer le mme traitement lensemble ou une partie de ces valeurs.
Solution 2 : utiliser la notion de tableau qui consiste :
- attribuer un seul nom lensemble des 30 notes, par exemple Tnote,
- reprer chaque note par ce nom suivi entre crochets dun numro entre 1 et 30 : Tnote[1],
Tnote[2], Tnote[30].
Un ensemble de valeurs portant ainsi le mme nom de variable et repres par un nombre,
sappelle un tableau, et le nombre qui sert a reprer chaque valeur sappelle un indice.
Un tableau de taille n est une structure trs simple constitue de n emplacements conscutifs
en mmoire. Il est donc possible d'accder un lment d'un tableau en temps constant
pourvu que l'on connaisse sa position (ou indice).
Un tableau est donc une structure trs simple et trs efficace. Il n'est cependant pas possible
de modifier la taille d'un tableau, ce qui est gnant pour un certain nombre d'algorithmes. On
dit cette structure est statique. Le nombre d'lments qu'elle contient ne peut pas varier.
Un tableau sera ainsi un ensemble de donnes ayant les mmes caractristiques (mme type)
et pouvant tre lies entre elles.
Par exemple : les notes dun lves, les prix des articles dun magasin
Les informations seront alors stockes ensemble sous un mme nom, seule leur position dans
le tableau les diffrenciera. Lnorme avantage des tableaux, cest quon va pouvoir les traiter
en faisant des boucles.
2. Tableaux unidimensionnels

Un tableau une dimension, appel aussi vecteur, est une structure de donnes constitue
dun nombre fini dlments de mme type et directement accessibles par leurs indices ou
indexes.
2.1. Dclaration d'un tableau

Pour dfinir une variable de type tableau, il faut prciser :


- le nom (identifiant du tableau)
- lindice (gnralement de type entier ou caractre)
- le type des lments (entier, rel, caractre, etc.) on note :

11

Var
Nom_tab : Tableau [nombre d'lments] de Type_lments

Exemple:
Tnote : Tableau[30] de Rel
Schmatiquement, ce tableau peut tre reprsent comme suit :
Tnote

10.5
1

8
2

...

11
30

Remarque:
Il est galement possible de dfinir un type tableau comme dans lexemple suivant :
Const
n = 10
Type
Tab = Tableau[n] de Entier
Var
T : Tab
En pascal:
Const
N=10;
Type
Tab=array[1..N] of integer;
Var
T: Tab;
2.2. Identification d'un lment du tableau

Un lment dans un tableau est identifi de la faon suivante :


NomTab[position de llment]
 Cela traduit bien laccs direct aux lments du tableau.
Ainsi, Tnote[3] dsigne la note du 3me tudiant et dune faon gnrale, T[i] dsigne le ime
lment du tableau T.
Lindice i peut tre une valeur, une variable ou une expression dont la valeur appartient
lintervalle des indices.
2.3. Remplissage d'un tableau

Un tableau peut tre rempli lment par lment laide dune srie daffectations :
T[1] Valeur 1
T[2] Valeur 2

T[n] Valeur n
Il est galement possible de lire les lments du tableau partir du clavier grce une
procdure :
Procdure remplir (Var T : tab)
Var
i : Entier
Dbut
Pour i de 1 n Faire
Ecrire(Entrer un entier : )
Lire(T[i])
FinPour
12

Fin
2.4. Affichage des lments d'un tableau

Laffichage des lments dun tableau se fait galement lment par lment. Seulement, le
tableau constitue ici un paramtre donn et non pas un rsultat comme dans la procdure de
remplissage.
Procdure afficher (T : tab)
Var
i : Entier
Dbut
Pour i de 1 n Faire
Ecrire(T[i], " ")
FinPour
Fin
2.5. Recherche squentielle d'un lment dans un tableau

Soit T un tableau contenant n lments de type entier.


On veut crire une procdure dont lentte sera :
Procdure recherche (T : Tab; x : Entier)
Cette procdure affiche :
lindice de la premire occurrence de x dans T si x T
le message lment introuvable si x T
Principe
Comparer x aux diffrents lments du tableau jusqu trouver x ou atteindre la fin du tableau.
Procdure Recherche(T : Tab ; x : Entier)
Var
i : Entier
Dbut
i 0
Rpter
i i + 1
Jusqu' (T[i] = x) ou (i > n)
Si (T[i] = x) Alors
Ecrire(Indice = ,i)
Sinon
Ecrire(Elment introuvable)
FinSi
Fin
2.6. Algorithmes de tri

Il existe plusieurs mthodes de tri parmi lesquelles on peut citer :


- tri bulle
- tri par slection
- tri par insertion
- tri par comptage
- tri shell
- tri rapide (quick sort).

13

a- Tri bulle

Soit T un tableau de n entiers. La mthode de tri bulles ncessite deux tapes :


Parcourir les lments du tableau de 1 (n1) ; si llment i est suprieur llment (i+1),
alors on les permute.
Le programme sarrte lorsque aucune permutation nest ralisable aprs un parcours
complet du tableau.
Procdure Tri_Bulle (Var T : Tab)
Var
i, x : Entier
change : Boolen
Dbut
Rpter
change Faux
Pour i de 1 (n-1) Faire
Si (T[i] > T[i+1]) Alors
x T[i]
T[i] T[i+1]
T[i+1] x
change Vrai
FinSi
FinPour
Jusqu' (change = Faux)
Fin
Trace d'xcution
Tableau initial
Aprs la 1

re

itration

Aprs la 2 me itration

4
4

3
3

Aprs la 3 me itration
Aprs la 4

me

itration

5
5

2
2

b- Tri par slection (par minimum)

Cest la mthode de tri la plus simple, elle consiste :


- chercher lindice du plus petit lment du tableau T[1..n] et permuter llment
correspondant avec llment dindice 1.
- chercher lindice du plus petit lment du tableau T[2..n] et permuter llment
correspondant avec llment dindice 2.
-
- chercher lindice du plus petit lment du tableau T[n-1..n] et permuter llment
correspondant avec llment dindice (n-1).
Procdure Tri_Selection(Var T : Tab)
Var
i, j, x, indmin : Entier
Dbut
Pour i de 1 (n-1) Faire
indmin i
Pour j de (i+1) n Faire
14

Si (T[j] < T[indmin]) Alors


indmin j
FinSi
FinPour
Si i <> indmin alors
X T[i]
T[i] T[indmin]
T[indmin] x
FinSi
FinPour
Fin
Trace d'excution
Tableau initial

Aprs la 1 re itration
Aprs la 2

me

Aprs la 3

me

Aprs la 4

me

itration

4
4

5
3

6
3

3
6

3
2

2
4

itration
itration

5
6

5
6

c- Tri par insertion

Cette mthode consiste prendre les lments de la liste un par un et insrer chacun dans sa
bonne place de faon que les lments traits forment une sous-liste trie.
Pour ce faire, on procde de la faon suivante :
- comparer et permuter si ncessaire T[1] et T[2] de faon placer le plus petit dans la case
dindice 1
- comparer et permuter si ncessaire llment T[3] avec ceux qui le prcdent dans lordre
(T[2] puis T[1]) afin de former une sous-liste trie T[1..3]
-
- comparer et permuter si ncessaire llment T[n] avec ceux qui le prcdent dans lordre
(T[n-1], T[n-2], ) afin dobtenir un tableau tri.
Procdure Tri_Insertion (Var T : Tab)
Var
i, j, x, pos : Entier
Dbut
Pour i de 2 n Faire
posi - 1
TantQue (pos>=1) et (T[pos]>T[i]) Faire
pos pos 1
FinTQ
pospos + 1
si pos <>i alors
xT[i]
Pour j de (i-1) pos [pas = -1] Faire
T[j+1] T[j]
FinPour
T[pos] x
FinSi
FinPour

15

Fin
[Pas = -1] signifie que le parcours se fait dans le sens dcroissant.
Trace d'excution

Tableau initial
Aprs la 1 re itration

4
4

Aprs la 2 me itration
Aprs la 3 me itration

Aprs la 4 me itration

4
3

5
5

6
4

5
5

2
2
6

2
6

2.7. Recherche dichotomique

Soit T un tableau contenant n lments tris dans le sens croissant :


T

On veut crire une procdure dont lentte est de la forme :


Procdure Rechdicho(T : tab ; x : Entier) et qui affiche lindice de la premire apparition de x
dans le tableau sil existe. Sinon, elle affiche le message lment introuvable.
Principe
Le but de la recherche dichotomique est de diviser lintervalle de recherche par 2 chaque
itration. Pour cela, on procde de la faon suivante :
Soient premier et dernier les extrmits gauche et droite de lintervalle dans lequel on cherche
la valeur x, on calcule M, lindice de llment mdian :
M = (premier + dernier) div 2
Il y a 3 cas possibles :
x = T[M] : llment de valeur x est trouv, la recherche est termine
x < T[M] : llment x, sil existe, se trouve dans lintervalle [premier..M-1]
x > T[M] : llment x, sil existe, se trouve dans lintervalle [M+1..dernier]
La recherche dichotomique consiste itrer ce processus jusqu ce que lon trouve x ou que
lintervalle de recherche soit vide.
Procdure Rechdicho(T : Tab ; x : entier)
Var
premier, milieu, dernier : Entier
trouve : Boolen
Dbut
premier1
dernier n
trouve Faux
Rpter
milieu (premier + dernier) div 2
Si (x < T[milieu]) Alors
dernier milieu 1
Sinon
Si (x > T[milieu]) Alors
premiermilieu + 1
Sinon
trouveVrai

16

FinSi
FinSi
Jusqu' (trouve = Vrai) ou (premier > dernier)
Si (trouve = Vrai) Alors
Ecrire(Indice = ,milieu)
Sinon
Ecrire(Elment introuvable)
FinSi
Fin.
Evaluation de l'algorithme
Dans le cas le plus dfavorable, lalgorithme se termine lorsque le nombre dlments p
prsents dans lintervalle [premier .. dernier] devient nul. A chaque itration, p est au moins
divis par 2. On est donc certain dobtenir le rsultat en au plus i itrations tel que n = 2i-1.
Do i=1+log2n (fonction inverse).
titre dexemple, si le tableau tri contient 1024 lments, il faudra au plus 1024 itrations
avec lalgorithme squentiel et au plus 11 avec lalgorithme dichotomique.
3. Tableaux multidimensionnels

Les tableaux multidimensionnels sont des tableaux qui contiennent des tableaux. Par exemple,
le tableau bidimensionnel (3 lignes et 4 colonnes) est en fait un tableau comportant 3
lments, chacun dentre eux tant un tableau de 4 lments :
Cette matrice peut tre dfinie de la faon suivante :
Const
Nl=3
Nc=4
Type
Mat = Tableau[Nl,Nc] de Rel
Var
Matrice : Mat
Chaque lment de la matrice est repr par deux indices :
- le premier indique le numro de la ligne
- le second indique le numro de la colonne.
Ainsi, Matrice[2,4] dsigne llment situ la 2me ligne et la 4me colonne.
Remarque:
Cette reprsentation est arbitraire, on a pu considrer que le premier indice dsigne la colonne
et le second dsigne la ligne. Dans ce cas, llment Matrice[2,4] nexiste plus.
En Pascal:
Const
Nl=3;
Nc=4;
Type
Mat = array[1..Nl,1..Nc] of real;
Var
Matrice : Mat;

17

3.1. Remplissage d'un tableau deux dimensions

Le remplissage dun tableau bidimensionnel Nl lignes et Nc colonnes se fait peu prs de la


mme faon quun tableau unidimensionnel. Seulement, il est ncessaire dutiliser deux
boucles imbriques correspondant chacune lindice dune dimension :
Procdure remplir (Var matrice : Mat)
Var
i, j : Entier
Dbut
Pour i de 1 Nl Faire
Pour j de 1 Nc Faire
Ecrire(Entrer un rel :)
Lire(matrice[i,j])
FinPour
FinPour
Fin
3.2. Transposition d'une matrice carre

Une matrice carre est une matrice n lignes et n colonnes.


Lopration de transposition consiste inverser les lignes et les colonnes en effectuant une
symtrie par rapport la diagonale principale de la matrice.
Exemple:
La transpose de la matrice
1
4
7

2
5
8

3
6
9

sst

1
2
3

4
5
6

7
8
9

Procdure Transpose(Var M : Mat)


Var
i, j, x : Entier
Dbut
Pour i de 1 n Faire
Pour j de (i+1) n Faire
x M[i,j]
M[i,j] M[j,i]
M[j,i] x
FinPour
FinPour
Fin
3.3. Somme de deux matrices

Soient M1 et M2 deux matrices Nl lignes et Nc colonnes.


On veut crire une procdure qui calcule les lments de la matrice M3=M1+M2
Procdure SomMat (M1, M2 : Mat ; Var M3 : Mat)
Var
i, j : Entier
Dbut
Pour i de 1 Nl Faire
Pour j de 1 Nc Faire

18

M3[i,j] M1[i,j]+ M2[i,j]


FinPour
FinPour
Fin
3.4. Produit de deux matrices

Soient M1 une matrice ayant n lignes et m colonnes


M2 une matrice ayant m lignes et p colonnes
On veut crire une procdure qui calcule les lments de la matrice M3=M1*M2.
Notons dabord que le nombre de colonnes de M1 doit tre gal au nombre de lignes de M2.
Le produit M3 = M1*M2 est dfini comme une matrice ayant n lignes et p colonnes et dont
les lments sont calculs par la formule :
M3(i,j)=M1(i,k)*M2(k,j), k=1..m
Procdure ProdMat(M1 : Mat1; M2 : Mat2; Var M3 : Mat3)
Var
i, j, k : Entier
Dbut
Pour i de 1 n Faire
Pour j de 1 p Faire
M3[i,j] 0
Pour k de 1 m Faire
M3[i,j] M3[i,j]+M1[i,k]*M2[k,j]
FinPour
FinPour
FinPour
Fin
EXERCICES D'APPLICATION

Exercice 1
Soit T un tableau contenant n lments de type entier et x un entier quelconque. Ecrire une
fonction Frquence(T : Tab ; x : Entier) : Entier qui retourne le nombre dapparitions de x
dans le tableau T.
Exercice 2
Ecrire une procdure permettant dclater un tableau T dentiers en deux tableaux :
- TP qui contiendra les lments positifs de T
- TN qui contiendra les lments ngatifs de T.
Exercice 3 : produit scalaire de 2 vecteurs
Ecrire une fonction ProdScal qui calcule le produit scalaire de deux vecteurs U et V
reprsents par deux tableaux.
Exercice 4 : norme dun vecteur
Ecrire une fonction NormVect qui calcule la norme dun vecteur et qui utilise la fonction
ProdScal de lexercice prcdent.
Exercice 5
Ecrire une procdure qui permet de remplir un tableau Fib par les 10 premiers termes de la
suite de Fibonacci. La suite de Fibonacci est dfinie par :
F0 = 1, F1 = 1 et Fn = Fn-2 + Fn-1 pour n >1
Exercice 6

19

Ecrire un algorithme permettant de trouver tous les nombres premiers infrieurs 400 et qui
utilise la mthode suivante :
Crer un tableau T pouvant contenir 400 entiers
Initialiser chaque lment du tableau son indice cest--dire T[1]=1 ; T[2]=2 ;
T[400]=400
Remplacer tous les multiples de 2 par 0 sauf 2
Chercher le prochain lment diffrent de 0 dans le tableau cest dire T[3] et remplacer
tous les multiples de 3 par 0 sauf 3
Continuer ce processus jusqu avoir T[i] 20 (20 tant la racine carre de 400)
Afficher tous les lments non nuls de T.
Exercice 7 : recherche de la plus grande monotonie dans un tableau Soit un tableau T de n
lments, dterminer la longueur de la premire plus longue squence de nombres rangs par
ordre croissant et le rang de son premier lment.
Exercice 8 : fusion de deux tableaux tris
Ecrire une procdure qui permet de fusionner deux tableaux tris A et B contenant
respectivement n et m lments. Le rsultat est un tableau tri C (n+m) lments.

20