Ordre des conditions de sortie d’une boucle

Dernière modification le 20 avril 2022

Il est possible d’enregistrer plusieurs conditions de sortie. Normalement, la nouvelle condition sera placée à la dernière place. Les conditions sont évaluées en séquence, comme l’opérateur || (ou logique) en langage C. Si la première condition est vraie, la boucle s’arrête, sinon, la seconde condition est évaluée, si elle vraie, la boucle s’arrête, sinon la condition suivante est évaluée etc. On constate donc que toutes les conditions de sortie ne sont pas testées puisque lorsqu’une condition est vraie, les autres sont ignorées. Donc, l’ordre dans lequel sont placées les conditions de sortie a de l’importance.

Boucle sur un tableau

Dans une boucle parcourant les valeurs d’un tableau a avec un index i, il y a au moins une condition de sortie associée au dépassement du tableau. Il est important que la condition sur i soit examinée en premier afin d’éviter une erreur de débordement de tableau sur le test de a[i]!

Si la première condition de sortie porte sur le test d’une valeur du tableau et la seconde sur le débordement possible de l’indice du tableau, on obtient les conditions de sortie suivantes :

 a[i] == max 
 i >= a.length

Si au moment de l’évaluation du bloc Until, la valeur de i vaut a.length, la première condition est évaluée et crée une erreur d’exécution puisque a[a.length] n’existe pas.

Ordonnancement automatique des conditions de sortie

Si toutefois une première condition de sortie portant sur l’accès à un élément de tableau a été définie et qu’une seconde condition de sortie devant tester la validité de l’indice est ajoutée,  AlgoTouch  replace automatiquement  la condition sur l’indice avant la condition sur l’accès au tableau. Les conditions portant sur les variables index seront placées en premier. Par exemple s’il existe déjà la condition :

 a[i] == max

et que l’on ajoute la condition

 i >= a.length 

les conditions de sorties seront réordonnées ainsi :

 i >= a.length
 a[i] == max