Professional Documents
Culture Documents
Chapitre 4 2 2023 FR
Chapitre 4 2 2023 FR
Les variables entières, réelles, caractères et booléennes ne comportaient qu’un seul élément.
En revanche, les variables structurées sont composées de plusieurs éléments.
La caractéristique la plus importante d’une variable structurée est la façon d’accéder à chacun
de ses composants.
I.1 Définition : C’est une structure de données composée d’un nombre fixe d’éléments (ou de
composantes) de même type. Ces éléments sont identifiés par un seul nom.
Une variable de type tableau est de type structuré, car elle comprend plusieurs éléments
assemblés suivant certaines règles :
I.2 Déclaration :
VAR
< identificateur> : Array [intervalle] of <type_élément> ;
Exemple :
Var
T : Array[1..15] of Integer ;
For i 1 to N Do
Read (T[i]) ;
Done ;
N=9
T
10 6 -4 7 .. ..
1 2 3 4 5 6 7 8 9
T[1] T[2] T[3]
T[1]=10, T[2]=6..
For i 1 To N Do
Write(T[i]) ;
Done;
c) Affecter une valeur dans la position i du tableau : T[i] Val ; T[i]7 ; T[i]T[j] ;
Remarque : La taille du tableau est fixe et ne peut être modifié. Généralement on fixe une
taille maximale (par rapport aux besoins des données d’un problème donné) que nous
n’utiliserons pas parfois entièrement.
Exemple :
VAR
T : Array[1..8] of Integer ;
N, i : Integer ;
Begin
Repeat
Read(N) ;
Until N>0 And N<=8 ;
For i 1 To N Do
T N=5
10 12 4 5 8
10 12 4 5 8
Exemple : Ecrire un algorithme qui permet de déclarer un tableau de 100 réels et d’afficher
la somme des 20 premiers éléments.
Solution :
Algorithm somme ;
Var
T :Array[1..100]of Real ;
I,N :Integer ;
S :Real ;
Begin
Repeat
Write(‘donner la taille du tableau >=20 et <=100’) ;
Read(N);
Until N>=20 et N<=100 ;
For i1 To N Do
Read (T[i]) ;
Done ;
S0 ;
For i1 To 20 Do
SS+T[i] ;
Done ;
Write (‘la somme =’,S) ;
End.
a) La recherche séquentielle d’une valeur VAL dans un tableau de N nombres entiers non
trié :
Algorithm recherche1 ;
VAR
T : Array[1..50] of Integer ;
N, i, VAL :Integer ;
Begin
Repeat
Write(‘donner la taille du tableau <50’) ;
b) La recherche d’une valeur VAL dans un tableau Trié (on suppose le tri croissant):
❖ Recherche séquentielle :
Algorithm recherche3 ;
VAR
Déroulement
T (trié)
2 5 8 12
1 2 3 4
VAL i N Affichage
1 4 1 n’existe
pas
8 1
2
3 8 existe
4 1
2 4 n’existe
pas
Déroulement :
N=9 val= 6 T
1 4 6 9 14 18 28 38 40
1 2 3 4 5 6 7 8 9
Trier un tableau revient à ordonner ses éléments selon l’ordre croissant (ou décroissant)
Déroulement :
T
13 0 2 18
1 2 3 4
0 13 2 18
0 2 13 18
N=4
i j Pmin X
1 2 1
3 2
4 13
5
2 3 2
4 3 13
5
3 4 3
5
4
Begin
Repeat Read (N) ; Until N>0 And N<=50 ;
For i 1 To N Do Read (T[i]) ; Done ; /*non trié */
For i 1 To N-1 Do /* parcours*/
For j1 To N-i Do
If (T[j]> T[j+1]) Then
X T[j] ; T[j] T[j+1] ; T[j+1] X ;
Eif;
Done;
Done ;
/* affichage du tableau trié */
For i 1 To N Do Write (T[i] ) ; Done ;
End.
Déroulement : i j x N
Parcours 1 1 1 14 4
14 2 3 1 2 14
1 2 3 4 3 14
4
2 14 3 1 2 1
2 3
2 3 1 14 3
Parcour2 3 1 2
2 1 3 14 2
Parcours 3 4
1 2 3 14
Algorithm Tri_Insertion ;
Var
T : Array[1..50] d’Integer ;
N, i, j, X, Pos : Integer;
Begin
Repeat Read (N) ; Until N>0 And N<=50 ;
For i1 To N Do Read(T[i]) ; Done;
For i2 To N faire /* les elements à placer */
Pos1 ;
While (T[Pos]< T[i]) Do PosPos + 1 ; /* trouver où l’élément doit être inséré*/
Done ;
If ( Pos<>i ) Then /* si l’élément n’est pas déjà à sa place*/
X T[i] ; j i ;
While (j>= pos+1) Do /* décaler les éléments pour pouvoir faire l’insertion*/
T[j] T[j-1] ;
j j-1 ;
Done; i j Pos X
T[Pos] X; 2 2 1 5
Eif; 1
Done; 3 3 1 3
For i 1 To N Do WriteT[i]) ;
2
End.
1
4 1
Déroulement : N=4
2
8 5 3 24
3
1 2 3 4
4
.
. 5
.
3 5 8 24
1 2 3 4
1 4 5 8 20 30 41 50 60 60
1 2 3 4 5 6 7 8 9 10
i=5 6 7 8 9 10 11 N=10 9
2eme solution
Suppression d’une valeur :
Algorithm Suppression ;
Var T: Array [1..100] of Integer;
N, i, j, val : Integer ;
trouv :Boolean ;
Begin
Repeat Read(N); Until N>=1 And N<=100 ;
For i 1 to N Do Read (T[i]) ; Done;
Read(val) ;
/* vérification de l’existence de la valeur à supprimer et détermination
de sa position */
i1 ; trouvfaux ;
While i<=N And trouv=False Do
If T[i]=val Then trouvTrue
Else ii+1 ; Eif ;
Done ;
If trouv=vrai Then
While (i<N) Do
T[i] T[i+1] ;
i i+1;
Done ;
NN-1;
For i 1 To N Do Write(T[i]) ;Done;
Else Write (‘la valeur n’’existe pas’) ;
Eif ;
End.