Les tableaux
Ce que ce chapitre apporte 5 points
- Déclarer un tableau, lire et écrire une case par son indice, de 0 à Size(t) - 1.
- Reconnaître un indice hors du tableau et dire ce que l'exécution en fait.
- Parcourir un tableau avec une boucle For pour accumuler, compter et chercher.
- Trouver le maximum d'une série et l'indice où il se trouve.
- Lire un texte caractère par caractère avec Len et Char, dont les indices suivent la même règle.
Un capteur qui relève le niveau d'une cuve toutes les heures produit 24 valeurs par jour. Les ranger dans 24 variables rendrait le programme illisible. Le tableau range la série entière sous un seul nom, et une boucle la parcourt. Dans Flowgorithm, un tableau se déclare avec sa taille ; ses cases se numérotent à partir de zéro, et non de un comme dans le pseudo-code. Ce chapitre montre comment déclarer un tableau, atteindre une case par son indice, et faire le tour de la série pour accumuler, compter ou chercher.
Ranger une série de valeurs dans un tableau
Vingt-quatre relevés horaires, ce ne sont pas vingt-quatre variables releve0, releve1, releve2, etc. Chacune demanderait sa propre forme de saisie, sa propre ligne dans chaque calcul, et passer à un relevé toutes les demi-heures obligerait à tout réécrire.
Un tableau est une variable qui contient plusieurs valeurs du même type. Il se déclare avec une taille, le nombre de ses cases. Chaque case est désignée par son indice, écrit entre crochets : les indices vont de 0 à taille - 1. Un tableau de 4 cases va de debits[0] à debits[3]. La fonction intégrée Size(debits) rend le nombre de cases.
Le pseudo-code du parcours d'algorithmique numérote les cases à partir de 1. Flowgorithm, comme Python, compte à partir de 0 : l'indice dit combien de cases il faut sauter depuis la première. La première case en saute zéro, la dernière d'un tableau de 4 en saute trois. C'est aussi la façon dont une journée compte ses heures, de 0 h à 23 h. Un parcours écrit Pour i de 1 à n dans le pseudo-code devient donc un For de 0 à Size(t) - 1, affiché i = 0 to Size(t) - 1 sur la figure.
Dans le logiciel, la fenêtre de la forme Declare reçoit le nom seul, debits : une case « Array » et un champ de taille en font un tableau de 4 cases. La figure l'affiche Real Array debits[4].
Quatre débits de pompe rangés sous un seul nom. La déclaration porte la taille ; chaque affectation vise une case par son indice. Exécuter, puis prévoir ce qu'afficherait debits[3]. La case debits[4], elle, n'existe pas : la remise à zéro, plus bas, montre ce que l'exécution en fait.
Dérouler ce programme en pas à pas : juste après la déclaration, la fenêtre des variables affiche debits[0] à debits[3], encore vides, puis chaque affectation remplit une case. Le programme affiche Débit à l'indice 2 : 9.5 L/min, c'est-à-dire la troisième valeur rangée, puis Nombre de cases : 4. Une sortie de debits[3] afficherait 11, la quatrième et dernière valeur.
debits[2] n'est pas le deuxième débit mais le troisième. La dernière case d'un tableau de 4 cases porte l'indice 3, et debits[4] n'existe pas. Pour désigner la dernière case sans compter, écrire debits[Size(debits) - 1].
1.Un tableau est déclaré avec 10 cases. Quels sont ses indices ?
2.Comment désigner la dernière case d'un tableau t, quelle que soit sa taille ?
Parcourir un tableau
Un indice n'est pas forcément un nombre écrit en dur : c'est une expression, et le plus souvent la variable d'une boucle For. La boucle For i = 0 to Size(t) - 1 passe par toutes les cases, dans l'ordre, et le même programme reste juste si la taille du tableau change.
Six températures d'un local technique. Une première boucle remplit le tableau ; une seconde le parcourt pour accumuler, compter et chercher le pic. Exécuter avec les six relevés, puis porter un autre relevé au-dessus de 30 : le compte des dépassements suit, et l'indice du pic aussi si le relevé dépasse 33.5.
Avec les saisies proposées, le programme affiche Moyenne : 25.9 °C, Relevés au-dessus de 30 °C : 2 et Pic : 33.5 °C à l'indice 4. Pour un opérateur qui compte à partir de 1, l'indice 4 est le cinquième relevé : un affichage destiné à quelqu'un d'autre écrit indicePic + 1. En pas à pas, la forme somme = somme + temperatures[i] s'exécute 6 fois, une par case, et la fenêtre des variables montre i qui désigne la case lue. Changer une saisie, par exemple 33.5 en 29, puis observer le compteur et le pic.
| Traitement | Avant la boucle | Dans la boucle |
|---|---|---|
| Accumuler (somme, moyenne) | somme = 0 | somme = somme + t[i] |
| Compter | nb = 0 | nb = nb + 1, seulement si la condition est vraie |
| Chercher le maximum | indicePic = 0, la première case | indicePic = i si t[i] dépasse la case retenue |
Pour le maximum, retenir l'indice plutôt que la valeur donne les deux à la fois : la valeur se relit dans la case. L'affectation indicePic = i s'exécute ici 4 fois, chaque fois qu'une température dépasse la case retenue. Partir de la première case, et non d'une valeur choisie comme 0, garantit que le résultat est une valeur réellement présente dans le tableau.
Pour chercher le maximum d'un tableau, par quelle valeur commencer ?
Une remise à zéro qui va une case trop loin : la borne de fin a perdu son - 1. Exécuter pour voir l'erreur : elle survient au cinquième tour, quand i vaut 4. Dans Flowgorithm, remettre le - 1 à la borne de fin la fait disparaître.
Exécuter ce programme : les quatre premiers tours remplissent debits[0] à debits[3], puis la boucle fait un cinquième tour, où i vaut 4. La case debits[4] n'existe pas : l'exécution s'arrête sur une erreur, avant la sortie. Sur cette page, le message nomme l'indice fautif et les indices valables ; le logiciel formule le sien à sa façon, mais l'arrêt est le même. Une erreur d'indice se lit toujours de la même façon : quelle valeur avait l'indice, et jusqu'où vont les cases ?
La borne de fin s'écrit Size(tableau) - 1. Écrire 3 pour un tableau de quatre cases marche, jusqu'au jour où la taille passe à six et où la boucle n'en parcourt plus que quatre. Écrire Size(debits) seul va une case trop loin, comme ci-dessus. Size(debits) - 1 reste juste quelle que soit la taille.
Le moins un n'est pas une coquetterie : c'est la différence entre le nombre de cases et le numéro de la dernière. L'oublier produit l'erreur la plus fréquente du chapitre, et elle ne se manifeste qu'au dernier tour.
En Python, le tableau s'appelle une liste, dont les indices commencent aussi à 0. Le parcours s'écrit for i in range(len(temperatures)) : la borne de fin de range est exclue, ce qui absorbe le - 1.
1.Le tableau Tab contient 5, 3, 8, 1 et 6, aux indices 0 à 4. Que vaut Tab[Tab[1]] ?
2.Que se passe-t-il si un programme lit t[5] dans un tableau de 5 cases ?
Le texte, caractère par caractère
Un texte se parcourt comme un tableau : Len(s) rend son nombre de caractères, et Char(s, i) rend le caractère d'indice i, en comptant à partir de 0. Le premier caractère est Char(s, 0), le dernier Char(s, Len(s) - 1).
Un code produit lu caractère par caractère : compter une lettre, puis vérifier la première.
Pour le code PB-2047-B et la lettre B, le programme affiche Le code contient 2 fois B, puis Référence de pièce détachée. La boucle fait 9 tours, un par caractère, tirets compris. Relancer avec un autre code et une autre lettre, en observant i et nb. Flowgorithm ne propose aucune fonction qui extrait un morceau de texte, par exemple les quatre chiffres d'une référence : tout traitement se construit caractère par caractère, avec Len, Char et une boucle.
Pour s = "PB-2047-B", que vaut Char(s, Len(s) - 1) ?
Fil rouge : la cuve de traitement
Étape 5. La cuve (rayon 1,5 m, hauteur 4 m) est équipée d'un capteur qui relève le volume d'eau, en litres, à chaque heure pleine, de 0 h à 23 h. Le programme range les 24 relevés dans un tableau, calcule le volume moyen, trouve le pic et l'heure du pic, puis exprime chacun en taux de remplissage. L'indice d'une case est directement l'heure du relevé : volumes[12] est le relevé de midi.
Étape 5 du fil rouge. Une première boucle remplit le tableau, une seconde accumule et cherche le pic. Suivre heurePic en pas à pas : il ne change que lorsqu'un relevé dépasse celui qu'il désignait.
Avec les 24 relevés proposés, le programme affiche Volume moyen : 20187.5 L, soit 71.4 % puis Pic : 26100 L à 12 h, soit 92.3 %. À midi, le taux dépasse le seuil haut de 90 %. En pas à pas, observer les cases volumes[0] à volumes[23] se remplir une à une, puis heurePic changer sept fois pendant la seconde boucle.
Une chose se répète : la formule du taux est écrite deux fois, à deux lignes d'écart. Cela fonctionne, mais une correction faite d'un côté et oubliée de l'autre donnerait deux taux incohérents. Le chapitre suivant règle ce défaut.
Une boucle For i = 0 to Size(t) - 1 parcourt un tableau de 6 cases. Combien de tours fait-elle ?
Mettre en pratique
Un débitmètre en dérive renvoie parfois des valeurs négatives, physiquement impossibles : le programme les remplace par 0.
L'opérateur saisit 2.4, -0.3, 3.1, -1.2, 0 et 2.8. Que contient le tableau debits à la fin, et qu'affiche le programme ?
La seconde boucle visite les six cases. Seules les cases d'indices 1 et 3 contiennent une valeur strictement négative : elles reçoivent 0, et le compteur augmente deux fois. La case d'indice 4 contient déjà 0, la condition debits[i] < 0 est fausse, et rien ne change. Le tableau contient 2,4 ; 0 ; 3,1 ; 0 ; 0 ; 2,8 et le programme affiche Corrections : 2. Une case se modifie par une affectation dont la cible est debits[i], exactement comme une variable. Et la valeur limite, 0 ici, décide si la comparaison doit être stricte : un débit nul est une mesure valable, qu'il ne faut pas compter comme une correction.
Cinq épaisseurs relevées sur une tôle, dont deux identiques au maximum. Prévoir le rang affiché avant de déplier.
Le contrôleur saisit 12.4, 15.1, 15.1, 11.8 et 14.2. Quel rang le programme affiche-t-il, et que faudrait-il changer pour qu'il affiche l'autre ?
La boucle part de l'indice 1, car l'indice 0 sert de point de départ à la comparaison. À l'indice 1, 15.1 > 12.4 est vrai : rangMax passe à 1. À l'indice 2, 15.1 > 15.1 est faux, la comparaison étant stricte : rangMax ne bouge pas. Les deux dernières valeurs sont plus petites. Le programme affiche Épaisseur maximale : 15.1 mm, mesure 2.
Avec >= à la place de >, la dernière case atteignant le maximum serait retenue, et le programme afficherait la mesure 3. Aucune des deux versions n'est fausse : il faut seulement choisir celle qui répond au besoin, et le choix ne se voit que sur une série où le maximum apparaît deux fois.
Le + 1 dans la sortie convertit un indice en rang : la case d'indice 1 est la deuxième mesure. Afficher rangMax seul annoncerait la mesure 1, ce qui serait faux pour un opérateur qui compte à partir de 1.
Chapitre révisé en octobre 2026 · Une erreur dans ce chapitre ?
Dans la bibliothèque d'exercices
Indices à partir de zéro, la dernière case à Size - 1, et les parcours qui reviennent sur les valeurs.
- Les cases et les indicesNiveau 1
- Accumuler dans une boucleNiveau 1
- Chercher le maximumNiveau 2
- Analyser des échantillonsNiveau 3
- Construire le repérage des pompes lentesNiveau 2
- Corriger la température la plus haute d'une chambre froideNiveau 3