Module 01 · Leçon 3
Tableaux à une dimension
Ce que vous saurez faire
- Déclarer et initialiser un tableau à 1 dimension
- Accéder à un élément par son indice
- Parcourir un tableau avec une boucle Pour
Avant de commencer
Pour stocker les notes des 30 élèves d'une classe, on n'a pas envie de
déclarer 30 variables note1, note2, …, note30. Quelle structure
permet de regrouper plusieurs valeurs du même type sous un seul nom ?
1. Définition
Visuellement, un tableau de 5 entiers :
indice : 1 2 3 4 5
┌─────┬─────┬─────┬─────┬─────┐
T = │ 12 │ -3 │ 7 │ 20 │ 0 │
└─────┴─────┴─────┴─────┴─────┘
T[1] vaut 12. T[3] vaut 7. T[6] provoque une erreur (hors borne).
2. Déclaration
T.D.N.T
─────────────────────────────────────
Type
Tab = Tableau de 30 entiers
─────────────────────────────────────
T.D.O
─────────────────────────────────
N │ constante=30 (entier)
T │ variable Tab
i │ variable entier
─────────────────────────────────
T.D.N.T
─────────────────────────────────────
Type
Tab = Tableau de 30 entiers
─────────────────────────────────────
T.D.O
─────────────────────────────────
N │ constante=30 (entier)
T │ variable Tab
i │ variable entier
─────────────────────────────────
PROGRAM Notes;
CONST
N = 30;
TYPE
Tab = ARRAY[1..N] OF integer;
VAR
T : Tab;
i : integer;
BEGIN
{ ... }
END.
3. Parcours classique : remplir et afficher
T.D.O
─────────────────────────────────
N │ constante=5 (entier)
T │ variable Tableau de N entiers
i │ variable entier
─────────────────────────────────
Algorithme Remplir_Afficher
Début
{ Saisie }
Pour i de 1 à N Faire
T[i] ← Donnée("Élément " + i + " : ")
FinPour
{ Affichage }
Pour i de 1 à N Faire
Ecrire(T[i])
FinPour
Fin
En Pascal :
PROGRAM RemplirAfficher;
CONST
N = 5;
TYPE
Tab = ARRAY[1..N] OF integer;
VAR
T : Tab;
i : integer;
BEGIN
FOR i := 1 TO N DO
BEGIN
Write('Élément ', i, ' : ');
Readln(T[i]);
END;
FOR i := 1 TO N DO
Write(T[i]:4);
Writeln;
END.
| N° | Instruction | i | T[1] | T[2] | T[3] |
|---|---|---|---|---|---|
| 01 | ··· | ? | ? | ? | ? |
| 02 | ··· | ? | ? | ? | ? |
| 03 | ··· | ? | ? | ? | ? |
4. Opérations courantes sur un tableau
Somme des éléments
somme ← 0
Pour i de 1 à N Faire
somme ← somme + T[i]
FinPour
Recherche du maximum
max ← T[1]
Pour i de 2 à N Faire
Si T[i] > max Alors
max ← T[i]
FinSi
FinPour
5. Exercices
Écrire un algorithme qui, étant donné un tableau T de N entiers,
compte le nombre d'éléments pairs qu'il contient.
Voir le corrigé
T.D.O
─────────────────────────────────
T │ Tableau de N entiers
i │ entier
nb │ entier
─────────────────────────────────
Début
nb ← 0
Pour i de 1 à N Faire
Si T[i] mod 2 = 0 Alors
nb ← nb + 1
FinSi
FinPour
Ecrire("Nombre de pairs : ", nb)
Fin
En Pascal : IF T[i] MOD 2 = 0 THEN nb := nb + 1;
Soit un tableau T de N réels. Écrire un programme qui calcule :
- La moyenne des éléments.
- L'écart entre le maximum et la moyenne.
Voir le corrigé
PROGRAM MoyEcart;
CONST
N = 10;
VAR
T : ARRAY[1..N] OF real;
i : integer;
somme, moyenne, max : real;
BEGIN
FOR i := 1 TO N DO
BEGIN
Write('T[', i, '] = ');
Readln(T[i]);
END;
somme := 0;
max := T[1];
FOR i := 1 TO N DO
BEGIN
somme := somme + T[i];
IF T[i] > max THEN
max := T[i];
END;
moyenne := somme / N;
Writeln('Moyenne = ', moyenne:5:2);
Writeln('Max − Moyenne = ', (max - moyenne):5:2);
END.
Inverser un tableau T de N entiers en place (sans utiliser de
tableau auxiliaire). Exemple : [1, 2, 3, 4, 5] doit devenir
[5, 4, 3, 2, 1].
Voir le corrigé
Pour i de 1 à N div 2 Faire
temp ← T[i]
T[i] ← T[N - i + 1]
T[N - i + 1] ← temp
FinPour
On échange l'élément 1 avec le dernier, le 2ème avec l'avant-dernier,
etc. On s'arrête à N div 2 car au-delà on commencerait à défaire les
échanges déjà faits.
6. Erreurs fréquentes au bac
- Confondre
T[i](l'élément) etT(le tableau entier). - Indice hors borne :
T[0]ouT[N+1]→ erreur d'exécution. - Initialiser le max à
0au lieu deT[1](faux pour des valeurs négatives). - Oublier que la taille est fixée à la compilation : pas de tableau redimensionnable en Pascal standard.
7. Quiz
Quiz (5 questions)
Pour un tableau `T : ARRAY[1..N] OF integer`, quel accès est invalide ?
Comment initialiser correctement la variable `max` lors d'une recherche dans un tableau ?
Que fait `Pour i de 1 à N div 2 Faire` ?
Pour compter les éléments négatifs d'un tableau, on utilise :
Quelle est la principale différence entre tableau et chaîne en Pascal ?