Boucle do until en Matlab
Dans ce cours, je vais vous montrer comment utiliser la boucle do until dans Octave.
Vous vous demandez ce qu'est une boucle do until ? C'est une structure de répétition permettant d'exécuter un bloc de code plusieurs fois, tant qu'une condition spécifique n'est pas remplie. Elle ressemble à la boucle while, à la différence que la condition est évaluée à la fin de chaque itération.
Comment fonctionne-t-elle ?
La boucle do until exécute le bloc de code au moins une fois.
Sous Matlab, il n'y a pas de commande dédiée pour implémenter directement la boucle do until, mais vous pouvez aisément la simuler avec l'instruction while.
Voici un exemple concret :
cond=true;
x=1;
while cond
disp(x);
x=x+1;
if (x>9)
cond=false;
end
end
Dans ce script, la valeur vrai est assignée à la variable cond et la valeur numérique 1 à la variable x.
Le bloc d'instructions de la boucle while est ensuite exécuté, affichant la valeur de x et l'incrémentant de un à chaque passage.
À la fin de chaque tour, nous vérifions si la condition x>9 est atteinte.
- Si ce n'est pas le cas, une nouvelle itération est lancée.
- Si elle est atteinte, nous attribuons la valeur faux à cond, ce qui termine la boucle.
Le script affiche alors les valeurs de 1 à 9, et s'arrête quand x atteint la valeur de 10, la condition x > 9 étant ainsi satisfaite.
Note. Dans cet exemple, la boucle do until a été utilisée pour créer une boucle déterministe où le nombre total d'itérations est connu dès le départ. Cette structure peut aussi servir pour des boucles indéterminées, mais attention au risque de boucles infinies.
Le risque d'une boucle infinie apparaît lorsqu'on utilise la boucle do until pour une structure indéterminée.
Considérons, par exemple, ce script qui demande à l'utilisateur de deviner un nombre aléatoire :
cond=true
while cond
numero=randi(100);
x = input("Saisissez un nombre entre 1 et 100 : ")
if not( x==numero)
disp("Ce n'est pas le bon nombre")
end
if (x==numero)
disp("Vous avez trouvé le bon nombre !")
cond=false;
end
end
Cette boucle pourrait théoriquement se poursuivre indéfiniment (une boucle infinie) si l'utilisateur ne devine jamais le bon nombre.
Afin de prévenir ce risque, il est judicieux d'ajouter une condition de sortie à la boucle.
c=0;
cond=true;
while cond
numero=randi(100);
x = input("Saisissez un nombre entre 1 et 100 : ")
if not( x==numero)
disp("Ce n'est pas le bon nombre")
end
if (x==numero)
disp("Vous avez trouvé le bon nombre !")
cond=false;
end
c=c+1;
if (c==10)
disp("Trop de tentatives, fin de la boucle");
break;
end
end
Dans cette version modifiée, un compteur ( c) est incrémenté à chaque itération. Après 10 tentatives (suppositions de l'utilisateur), le script interrompt la boucle, même si l'utilisateur n'a pas encore deviné le nombre aléatoire. Cela permet d'éviter le piège d'une boucle sans fin.