cursus.

Cours 2 · Boucles et tableauxLeçon 2 sur 2

Tableaux et parcours

25 min de lecture5 sections Version PDF

À la fin de cette leçon, vous saurez

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]
1252083

La première case est T[0], la dernière est T[n − 1]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]...FinPour

Notez 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 · étape 1 / 70:00 / 0:11

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é.

Prêt à lancer · 0:00 / 0:11
Étapes

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 · vérifiez votre compréhension Sans réponse

Un tableau T contient 5 valeurs. Quel est l'indice de la dernière ?

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] FinSiFinPour

Sur [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] FinSiFinPour

Mê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 · vérifiez votre compréhension Sans réponse

Avec max ← 0 au départ, que renvoie l'algorithme du maximum sur le tableau [−3, −8, −5] ?

Quiz · vérifiez votre compréhension Sans réponse

Où placer le calcul moyenne ← somme / n ?

À vous

Exercice · JavaScript · à vous de jouer

Calculez somme, minimum, maximum et moyenne en un seul parcours. Attention aux initialisations.

En attente
// 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 }

Console de sortie
Le résultat s'affiche dans la console

À retenir

Flashcards · 1 / 2Toucher pour retourner
Fin de la leçon

Vous avez parcouru les 5 sections.

Marquez-la terminée pour faire avancer votre parcours, ou revenez sur un point avant de passer à la suite.