Do while, do until, do case
Si vous voulez que le traitement dans une boucle soit exécuté au moins une fois,
avant qu'une condition soit évaluée, qui commande l'exécution de nouvelles boucles, il vous faut placer le test de condition à la fin de la boucle, avec le mot clé while.

Exemple de structure de contrôle do ... while int x = 0
do
   print x
   x + 1
/do while x < 3
Affiche: > 0
> 1
> 2

Ici aussi on peut utiliser le mot-clé forever en combinaison avec la commande break.

Do until

Et si l'on veut exécuter le corps d'une boucle jusqu'à ce qu'une condition soit atteinte (et non pas tant qu'elle est vérifiée), on utilisera la variante until, au lieu de while.


Exemple de structure de contrôle do ... until int x = 0
do
   print x
   x + 1
until x = 3
Affiche: > 0
> 1
> 2
> 3


 On notera que l'on a écrit simplement until ici, et non /do until. Ecrire /do until est parfaitement valide, mais inutilement long. Ce n'est pas le cas d'une structure while, car while peut débuter une autre structure de contrôle, en écrivant do ... while, le compilateur serait en mis en confusion.


Do case

 Le contenu d'une instruction "do" peut être divisé en plusieurs cas conditionnels qui sont sélectionnés par l'ordinateur, et dont un seul est traité à la fois.
 Aucun symbole n'est nécessaire pour marquer la fin d'un bloc case.

Exemple de structure de contrôle do ... case do
case nom = "pussycat":
          print
"c'est un chat"
case nom = "flipper":
          print
"c'est un dauphin"
case nom = "mobby dick":
          print
"c'est une baleine"
else
  print "c'est un autre animal"
/do

 Le "while condition" a disparu ici, mais on pourrait le garder, cela permettrait de produire un automate à états finis!
 Pour compléter cet automate, on a besoin d'un bloc de traitement inconditionnel
dans la structure, et cela est permis par l'option always.

Exemple de structure de contrôle do ..case while, produisant un automate à états finies. int state = ON

do
case state = ON:
          counter + 1
case state = OFF:
          break
always
   state = getState() ` une fonction quelconque
/do while forever

On vient juste de créer une sorte d'automate qui lit son état à partir d'une fonction quelconque, nommée ici "getState()", et cet automate continue de boucler jusqu'à ce que la fonction retourne l'état OFF.


 Exercices
1) Afficher les nombres pairs de 0 à 10 en utilisant la variable i et do until.

Réponse

2) Construction d'un automate à états finis.
Soit un tableau tbl, qui contient une liste de prénoms, et qui est supposé déja déclaré, mais non trié. Une fonction à écrire retourne la première lettre de chaque prénom, et l'automate s'arrête quand un prénom commence par "d". S'il commence par "a", "b" ou "c" il est compté. Afficher chaque prenom et le nombre de prénoms en "a", "b" ou "c".
Utiliser les méthodes prédéfinies:
- sort() sur tableau, trie en ordre ascendant.
- begin() sur tableau, pointe sur le premier élément.
- inc() sur tableau, retourne l'élément suivant dans la liste.
- toText() sur les méthodes précédentes, transforme un élément de tableau en text.

Réponse