Compteurs, accumulateurs et drapeaux
Dans presque tous les programmes avec une boucle, on retrouve trois techniques. Une fois que tu les connais, tu les verras partout !
Le compteur
Un compteur est une variable qui compte combien de fois quelque chose arrive. On l'initialise à 0, puis on lui ajoute 1 à chaque fois.
// Combien de voyelles dans un mot ?
mot est un texte vaut 'algorithmique'
voyelles est un nombre vaut 0
lettre est un texte
pour i de 1 à longueur(mot)
lettre vaut copier(mot, i, 1)
si contient('aeiouy', lettre) alors
voyelles ajoute 1
fin si
fin pour
affiche mot + ' contient ' + voyelles + ' voyelles.'
Les trois temps d'un compteur :
- initialiser avant la boucle (
vaut 0) ; - incrémenter dans la boucle, quand la condition est remplie (
ajoute 1) ; - utiliser le résultat après la boucle.
L'accumulateur
Un accumulateur ressemble au compteur, mais au lieu d'ajouter 1, il ajoute une valeur : il fait un total.
// Lancer 10 dés et faire le total
total est un nombre vaut 0
de6 est un nombre
pour i de 1 à 10
de6 vaut hasard(1, 6)
total ajoute de6
fin pour
affiche 'Total des 10 lancers : ' + total
affiche 'Moyenne : ' + total / 10
Un accumulateur peut aussi construire un texte :
etoiles est un texte vaut ''
pour i de 1 à 5
etoiles ajoute '*'
affiche etoiles
fin pour
Ce programme dessine un petit triangle d'étoiles.
Question : Quelle est la bonne valeur de départ pour un accumulateur qui calcule un produit (une multiplication répétée) ? — 1. En partant de 0, toutes les multiplications donneraient 0. L'élément neutre de la multiplication est 1.
Le drapeau
Un drapeau est une variable booléenne qui signale qu'un événement s'est produit. On le « lève » (vrai) dès que ça arrive.
// Y a-t-il une température négative ?
temperatures est un tableau vaut [4, 7, -2, 5, 0]
gel est un booléen vaut faux
pour i de 0 à longueur(temperatures) - 1
si temperatures[i] < 0 alors
gel vaut vrai
fin si
fin pour
si gel alors
affiche 'Attention, il a gelé cette semaine !'
sinon
affiche 'Pas de gel cette semaine.'
fin si
Un drapeau est souvent utilisé pour sortir d'une boucle tant que : tant que non trouve.
Les trois ensemble
notes est un tableau vaut [12, 8, 15, 9, 17, 11]
recus est un nombre vaut 0
total est un nombre vaut 0
excellent est un booléen vaut faux
pour i de 0 à longueur(notes) - 1
total ajoute notes[i]
si notes[i] >= 10 alors
recus ajoute 1
fin si
si notes[i] >= 16 alors
excellent vaut vrai
fin si
fin pour
affiche recus + ' élèves sur ' + longueur(notes) + ' ont la moyenne.'
affiche 'Moyenne de la classe : ' + decimal(total / longueur(notes), 1)
si excellent alors
affiche 'Au moins un élève a 16 ou plus !'
fin si
En résumé
- Compteur : part de 0,
ajoute 1 quand la condition est vraie. - Accumulateur : part de 0 (ou 1 pour un produit,
'' pour un texte), ajoute une valeur à chaque tour. - Drapeau : booléen à
faux au départ, passe à vrai quand l'événement arrive. - Les trois s'initialisent avant la boucle et s'utilisent après.