Algorithmique 1 · C2 Boucles et tableaux · Chapitre 2 · 25 min
Tableaux et parcours
Manipuler les indices sans déborder : somme, moyenne, minimum, maximum.
Vingt notes à traiter ne justifient pas vingt variables. Le tableau est la structure qui regroupe plusieurs valeurs de même type sous un seul nom, chacune repérée par un numéro.
Variables T : tableau de 5 entiersDébut T[0] ← 12 T[1] ← 5 ...Deux propriétés à retenir. Toutes les cases ont le même type : un tableau d'entiers ne
contient que des entiers. Et l'accès à une case est immédiat : atteindre T[3] ne coûte
pas plus cher que T[0], la machine n'a pas à parcourir les cases précédentes. Ce détail
paraît anodin ; c'est lui qui rendra possible la recherche dichotomique de la leçon 6.
Les cases sont numérotées de 0 à n − 1
C'est la convention de la quasi-totalité des langages, et la source d'erreur numéro un des débutants. Un tableau de 5 cases a pour indices 0, 1, 2, 3, 4. Il n'y a pas de case 5.
T[0] | T[1] | T[2] | T[3] | T[4] |
|---|---|---|---|---|
| 12 | 5 | 20 | 8 | 3 |
La première case est T[0], la dernière est T[n − 1] où n est la taille. Retenez ces
deux formes plutôt que des nombres : elles restent justes quelle que soit la taille.
Accéder à T[5] sur ce tableau est un débordement d'indice. Selon le langage, le
programme s'arrête net, ou — bien pire — lit un morceau de mémoire qui ne lui appartient
pas et continue avec une valeur absurde.
Le parcours
Parcourir un tableau, c'est visiter ses cases une par une, dans l'ordre. Le schéma est toujours le même, et il vaut la peine de l'écrire une fois pour toutes :
Pour i de 0 à n − 1 Faire ...traiter T[i]...FinPourNotez n − 1, pas n. Écrire Pour i de 0 à n produit un tour de trop, et ce tour
déborde. C'est l'erreur « à un près », la plus fréquente et la plus discrète du semestre.
Animation · 7 étapes
Parcourir T = [12, 5, 20, 8, 3] : somme et maximum
- Initialisation, avant le premier tour — somme démarre à 0. max démarre à T[0], surtout pas à 0 : sur un tableau de températures négatives, un max initialisé à 0 ne serait jamais remplacé.
- i = 0 → T[0] = 12 — somme devient 0 + 12 = 12. max vaut déjà 12, rien à changer.
- i = 1 → T[1] = 5 — somme passe à 17. Test 5 > 12 ? FAUX : max ne bouge pas.
- i = 2 → T[2] = 20 — 20 > 12 : c'est le seul tour où max change. Il vaudra 20 jusqu'à la fin.
- i = 3 → T[3] = 8 — somme continue de grandir, max reste à 20.
- i = 4 → dernière case — i = 4 = n − 1 : le tableau a 5 cases numérotées de 0 à 4. Un tour de plus tenterait T[5], qui n'existe pas — c'est le débordement d'indice.
- Fin du parcours — La moyenne se calcule APRÈS la boucle : 48 / 5 = 9,6. Un seul parcours a suffi pour trois résultats.
Une seule boucle a produit trois résultats. C'est un réflexe à prendre : quand plusieurs grandeurs se calculent sur les mêmes données, on ne fait pas trois parcours, on en fait un seul avec trois accumulateurs.
Quiz · 1 question
Un tableau T contient 5 valeurs. Quel est l'indice de la dernière ?
- 5 — la taille du tableau
- 4 — la taille moins un
- Cela dépend des valeurs — sans règle fixe
Réponse : Les indices vont de 0 à n − 1, soit de 0 à 4. T[5] n'existe pas : c'est le débordement d'indice classique, et il se produit précisément quand on écrit « de 0 à n » au lieu de « de 0 à n − 1 ».
Somme, moyenne, minimum, maximum
Ces quatre calculs sont les exercices d'application obligés du parcours, et trois d'entre eux cachent un piège d'initialisation.
La somme ne pose pas de problème : accumulateur à 0, puis somme ← somme + T[i].
La moyenne se calcule après la boucle, une seule fois : moyenne ← somme / n.
Diviser à l'intérieur donnerait un résultat faux à chaque tour sauf le dernier.
Le minimum et le maximum sont le vrai piège. La tentation est d'écrire :
max ← 0 ← FAUXPour i de 0 à n − 1 Faire Si T[i] > max Alors max ← T[i] FinSiFinPourSur [12, 5, 20, 8, 3], ça marche. Sur un tableau de températures hivernales
[−3, −8, −5], le résultat est 0 — une température qui n'apparaît nulle part dans les
données. Le maximum d'un tableau est forcément une valeur du tableau ; il faut donc
partir de l'une d'elles :
max ← T[0]Pour i de 1 à n − 1 Faire Si T[i] > max Alors max ← T[i] FinSiFinPourMême raisonnement pour le minimum. Cette règle s'énonce simplement : on initialise avec la première valeur, jamais avec une constante inventée.
Quiz · 1 question
Avec max ← 0 au départ, que renvoie l'algorithme du maximum sur le tableau [−3, −8, −5] ?
- −3, le vrai maximum
- 0, qui n'est pas dans le tableau
- −8, le minimum
Réponse : Aucune valeur du tableau n'est supérieure à 0, donc max n'est jamais remplacé et garde son initialisation. Le bug est invisible sur des données positives — c'est ce qui le rend dangereux.
Quiz · 1 question
Où placer le calcul moyenne ← somme / n ?
- Dans la boucle, après chaque ajout
- Après la boucle, une seule fois
- Avant la boucle, pour initialiser
Réponse : La moyenne n'a de sens qu'une fois toutes les valeurs additionnées. La calculer dans la boucle donne n résultats intermédiaires faux — et coûte n divisions au lieu d'une.
À vous
Exercice de code
Calculez somme, minimum, maximum et moyenne en un seul parcours. Attention aux initialisations.
Point de départ
// Un seul parcours, quatre résultats.
// Consigne : écrivez la boucle sur les INDICES. Pas de reduce, pas de
// Math.min(...t) — c'est le parcours qu'on apprend ici, pas la bibliothèque.
const T = [12, -5, 20, 8, 3];
function analyser(t) {
let somme = 0;
let min = 0; // ← initialisation piégée : corrigez-la
let max = 0; // ← celle-ci aussi
for (let i = 0; i < t.length; i++) {
// à compléter
}
return { somme, min, max, moyenne: somme / t.length };
}
console.log(analyser(T));
// attendu : { somme: 38, min: -5, max: 20, moyenne: 7.6 }
Solution
const T = [12, -5, 20, 8, 3];
function analyser(t) {
let somme = 0;
// On part de la PREMIÈRE VALEUR, jamais de 0 : avec un tableau de
// températures négatives, un max initialisé à 0 ne serait jamais remplacé.
let min = t[0];
let max = t[0];
for (let i = 0; i < t.length; i++) {
somme = somme + t[i];
if (t[i] < min) min = t[i];
if (t[i] > max) max = t[i];
}
// La moyenne se calcule APRÈS la boucle, une seule fois.
return { somme, min, max, moyenne: somme / t.length };
}
console.log(analyser(T));
À retenir
Flashcards · 2 cartes
- Quels sont les indices valides d'un tableau de n cases ?
- De 0 à n − 1. La première case est T[0], la dernière T[n − 1]. T[n] n'existe pas.
- Comment initialiser la recherche d'un maximum ?
- Avec T[0], la première valeur du tableau — jamais avec 0, qui donne un résultat faux dès que toutes les valeurs sont négatives.