Boucles while en Octave
Dans cette leçon, je vais vous montrer, pas à pas, comment construire une boucle while en Octave.
Mais tout d'abord, qu'est-ce qu'une boucle while ? C'est une structure de contrôle qui permet d'exécuter répétitivement un bloc d'instructions, autrement dit, en plusieurs itérations, jusqu'à ce qu'une certaine condition logique soit satisfaite.
Avant de se lancer dans l'exécution du bloc d'instructions, la boucle while évalue d'abord une condition initiale.
La boucle persévère tant que cette condition initiale reste satisfaite. Cependant, dès que cette condition n'est plus remplie, la boucle s'arrête net.
while condition
bloc d'instructions
endwhile
Si la condition initiale n'est pas satisfaite d'emblée, la boucle while ne réalise même pas une seule itération.
On considère la boucle while comme une boucle indéfinie car le nombre d'itérations n'est pas nécessairement connu à l'avance.
À la différence d'autres langages de programmation comme Java ou C, vous n'avez pas besoin de délimiter le bloc d'instructions de la boucle while avec des accolades. Cela dit, l'indentation, comme en Python, n'est pas non plus indispensable. Cependant, pour une meilleure lisibilité du code, je préconise d'indenter légèrement à droite le bloc d'instructions par rapport à l'instruction while.
Prenons par exemple un cas concret où la boucle calcule le carré des nombres de 1 à 9.
x=1;
while x<10
disp(x**2);
x=x+1;
endwhile
Le résultat obtenu est
1
4
9
16
25
36
49
64
81
Dans ce cas précis, la boucle while effectue un nombre d'itérations bien défini en avance.
Cependant, cela n'est pas toujours le cas et la boucle while peut aussi nécessiter un nombre d'itérations indéterminé à l'avance.
Le danger d'une boucle infinie
Lorsque vous élaborez une boucle dans un programme, il est crucial de garder à l'esprit le risque d'une boucle infinie.
Une boucle infinie se produit lorsque le nombre d'itérations reste indéfini et que la boucle continue de s'exécuter sans fin. Cette situation peut engendrer un gel du programme et provoquer des plantages du système.
Pour éviter un tel désagrément, il est toujours préconisé d'inclure une condition de sortie forcée après un nombre maximal d'itérations.
Prenons par exemple le script suivant qui génère un nombre aléatoire entre 1 et 100 et demande à l'utilisateur de le deviner.
number=randi(100);
x=0;
while x!=number
x = input("Quel numéro ai-je tiré? ")
if (x!=number)
disp("Erreur")
else
disp("Bravo, vous avez deviné !")
break;
endif
endwhile
À première vue, cela peut sembler être une boucle simple qui se termine lorsque l'utilisateur trouve le bon numéro.
Cependant, si l'utilisateur ne trouve pas le numéro, la boucle continuera sans fin, ce qui crée une boucle infinie.
Pour pallier à cela, nous devons instaurer un nombre maximal d'itérations dans la boucle.
Nous pouvons y parvenir en ajoutant une variable de compteur, t, qui s'incrémente après chaque itération.
Si t atteint le nombre maximal d'itérations, la boucle s'arrêtera même si l'utilisateur n'a pas encore trouvé le numéro.
number=randi(100);
x=0;
t=0;
while x!=number
x = input("Quel numéro ai-je tiré? ")
if (x!=number)
disp("Erreur")
else
disp("Bravo, vous avez deviné !")
break;
endif
t=t+1
if (t==10)
disp("Vous avez tenté trop de fois.")
break;
endif
endwhile
En introduisant cette condition, nous veillons à ce que la boucle se termine dans un nombre d'itérations raisonnable, évitant ainsi au programme de se bloquer et prévenant d'éventuels plantages du système.