Les structures de répétition
CHAPITRE 5
88
le compteur i diminue de un dans la boucle et augmente de un à la fin de chaque tour. Dans
ces conditions, sa valeur ne dépasse jamais un et la boucle ne se termine jamais.
D’une manière générale, si vous modifiez la valeur du compteur à l’intérieur de la boucle,
vous en pertubez le déroulement. Il est vraisemblable que vous n’effectuerez pas le nombre
de tours souhaités.
Dans certains cas, il se peut que vous trouviez astucieux de modifier cette valeur du compteur. Supposons que vous ayez à lire et à réécrire des valeurs entières lues au clavier, jusqu’à
ce ce que vous en ayez trouvé 20 positives. Vouz pourriez songer à employer une boucle avec
compteur, de cette façon :
répéter pour i := 1 à 20
{ lire a
si a <=0 alors i := i - 1
écrire a
}
Certes, cela fonctionne ! Mais ne trouvez-vous qu’on trompe le lecteur du programme en faisant croire qu’il s’agit d’instructions répétées 20 fois seulement. En effet, en toute rigueur, le
problème posé correspond plus à une répétion conditionnelle : on traite des valeurs jusqu’à
ce que l’on en ait trouvé 20 positives. La formulation suivante serait alors bien mieux
adaptée :
i := 0
répéter
{ lire a
si a >0 alors i := i + 1
écrire a
}
jusqu’à i >= 20
D’une manière générale, dans une boucle avec compteur, il est fortement conseillé de ne
modifier à l’intérieur de la boucle, ni la valeur du compteur, ni les valeurs limites lorsque celles-ci dépendent des variables. Ce genre de pratiques est formellement interdit dans certains
langages, tout en restant souvent accepté des traducteurs (nous verrons, dans la rubrique Côté
langages que parfois, une telle vérification est même impossible).
4.5 Compteur et boucle pour
L’exemple précédent montre bien que le fait d’avoir besoin d’un compteur dans une boucle
n’implique pas nécessairement l’utilisation d’une répétition pour. Voici un autre exemple : il
s’agit d’une adaptation du programme du paragraphe 1.3.1 qui affichait les voyelles d’un
mot, dans lequel nous limitons à 30 le nombre de caractères fournis par l’utilisateur. La
condition d’arrêt devient alors : caractère espace rencontré ou 30 caractères fournis. Notez
que pour faciliter les modifications éventuelles de notre programme, nous avons utilisé une
« constante symbolique » nCarMax pour le nombre maximal de caractères.
Précédent

- 111/370

Suivant