Différence : les boucles tant que (while) et jusqu’à (do while)

les boucles tant que (while) et jusqu'à (do while)

Aujourd’hui sujet un peu plus technique que d’habitude puisque nous allons parler informatique, et plus précisément algorithmie
J’ai été assez étonné de voir que cette question faisait partie des plus posées sur Google, mais pas de problème je vais vous expliquer tout ça

Quelle différence entre la boucle « tant que » et la boucle « répéter…jusqu’à » ?
Les boucles sont des structures de programmation permettant de répéter une partie de code plusieurs fois
Dans le cas du « tant que » on l’exécute tant que l’instruction testée est vraie
Dans le cas du « jusqu’à » on l’exécute dans tous les cas une fois avant de tester la condition

Si cette réponse courte ne vous éclaire pas plus, pas de panique, je vais vous expliquer tout cela en détail dès maintenant

La boucle « tant que » (while)

Définition

Une boucle « tant que » est une structure de contrôle permettant d’exécuter un ensemble d’instructions de façon répétée sur la base d’une condition booléenne

Wikipedia

L’objectif d’une boucle est de répéter plusieurs lignes de code plusieurs fois
Afin de limiter le nombre de fois ou l’on va exécuter ce code, il existe plusieurs solutions, dont la boucle « tant que »

Dans le cas de la boucle « tant que » on exécute ce code tant qu’une condition est vraie
Si vous voulez, il s’agit d’une structure « si » ou « if », qui a la particularité de revenir au début du « if » si la condition est toujours vraie

Si le terme « condition booléenne » n’est pas claire pour vous, il s’agit simplement d’un raccourci pour dire « vrai ou faux »

Syntaxe

La syntaxe classique que vous avez sans doute apprise est la suivante :

TANT QUE condition FAIRE
   //CODE A EXECUTER PLUSIEURS FOIS
FINTANTQUE

Il nous faut donc déterminer notre condition, comme dans le cas des instructions conditionnelles « si » ou « if », puis indiquer les lignes à répéter tant que cette condition est vraie

Un exemple basique serait alors :

Prenom = ""
TANT QUE Prenom = "" FAIRE
   ECRIRE "Votre prénom ?"
   LIRE Prenom
FINTANTQUE

Cette boucle nous permet de demander son prénom à l’utilisateur tant qu’il ne donnera pas une réponse non vide
La condition est donc Prenom = «  » et elle sera vraie tant que l’utilisateur ne le saisira pas et fera simplement entrer par exemple
Les lignes ECRIRE et LIRE sont répétées tant que le prénom n’est pas correct

Utilisation concrète

Je suis moi-même développeur web, et je vais donc vous dire exactement dans quel cas cette boucle est utilisée par rapport à la deuxième que nous verrons juste après
À l’école on vous explique qu’on s’en sert pour valider la saisie au clavier, mais cela fait bien longtemps qu’on utilise des interfaces graphiques plutôt que des terminaux en noir et blanc 🙂

Dans 99 % des cas, j’utilise cette expression (« tant que » ou « while » plutôt) lorsque j’interroge une base de donnée et que je ne connais pas à l’avance le nombre de résultats que je vais obtenir

Par exemple si j’ai besoin d’afficher la liste des commandes d’un client sur son compte, ou de faire des calculs sur les lignées retournées par une requête, etc.

Exemple concret

Voici donc un exemple concret, traduit dans un langage algorithmique qui vous sera sans doute plus familier

Dans ce premier exemple, je reprend ici mon idée de l’affichage des dernières commandes d’un client sur son compte en ligne
Une fois traduit en français, cela donnerait :

Resultats = RequeteBaseDeDonnee("…")
TANT QUE Resultats FAIRE
   AFFICHER_LIGNE
   AFFICHER_COLONNE Resultats.DateAchat
   AFFICHER_COLONNE Resultats.Prix
   AFFICHER_COLONNE Resultats.StatutCommande
   CLORE_LIGNE
FINTANTQUE

J’espère que cela vous parle un peu et vous aide à comprendre ce que vous pourrez réellement faire avec cette boucle « tant que »

La boucle « répéter … jusqu’à … » (do while)

Passons maintenant à une explication similaire de la boucle « jusqu’à » puis nous comparerons les deux afin de faire un résumé de ce que nous avons vu

Définition

Je n’ai pas trouvé de définition claire de ce type de boucle, tout simplement, car il s’agit d’une variante de la première que nous avons vue

Dans le cas de la boucle répéter ... juqu'à ... on exécutera la séquence d’instructions au moins une fois, et on l’exécutera tant que la structure booléenne indiquée à la fin sera vérifiée

Passons tout de suite à un exemple pour que cela soit plus clair

Syntaxe

La syntaxe de base sera donc la suivante :

REPETER
   //CODE A EXECUTER PLUSIEURS FOIS
JUSQU'A condition

Et voici un exemple complété pour que tout cela soit plus parlant :

MotDePasse = "secret"
REPETER
   ECRIRE "Mot de passe ?"
   LIRE Saisie
JUSQU'A Saisie = MotDePasse

On redemande le mot de passe jusqu’à ce qu’il corresponde au mot attendu
La suite du code ne sera pas exécutée si l’utilisateur ne connait pas le mot de passe

Dans cet exemple, notre condition booléenne est « Saisie = MotDePasse », qui devient vraie uniquement si le texte saisi correspond à « secret »
Et les lignes ECRIRE et LIRE sont les instructions répétées jusqu’à ce que la condition soit vraie

Vous noterez donc que ces instructions sont exécutées au moins une fois

Utilisation concrète

Alors là je suis un plus embêté, car je n’utilise absolument jamais cette expression, j’ai même eu du mal à retrouver la syntaxe dans les langages que j’utilise pour tout vous dire 🙂

Pourquoi donc ?
Car il s’agit en fait de la même boucle que la première que nous avons vue mais écrite différemment
On aurait en effet très bien pu faire l’exemple du mot de passe avec une boucle while, il suffit d’inverser la condition et d’initialiser la variable « Saisie » avant de l’utiliser, ce qui est en général fait au début du code dans la plupart des langages

Bref je vais quand même vous trouver un exemple, mais sachez que vous ne serez absolument pas obligés d’utiliser cette boucle après votre examen 🙂

Exemple

Si vous utilisez ce type de boucle, cela sera sans doute lorsqu’il y a une interaction avec l’utilisation
Par exemple pour valider une saisie de formulaire :

FAIRE
   ECRIRE "*"
   LIRE_CHAMP "Email"
JUSQU'A Email CONTIENT @

Alors concrètement cela mettrait un astérisque rouge à côté du champ email jusqu’à ce que celui ci-contienne une arobase
Cela reste un exemple tiré par les cheveux, j’en suis désolé
J’ai regardé pas mal de sources et je n’ai rien trouvé de bien concret avec ce type de boucle :/

J’espère que vous aurez tout de même compris le principe

Différences entre les boucles « tant que » et « jusqu’à »

Résumons ce que nous avons vu dans les précédents chapitres afin de résumer les différences entre ces deux boucles

Nombre d’exécutions

Pour les plus attentifs, vous aurez noté qu’il existe une différence majeure entre ces deux boucles dans le nombre de fois ou elles peuvent être exécutées

La boucle « tant que » n’est pas forcément exécutée si la condition n’est pas validée dès le départ, elle peut donc être exécutée entre 0 et une infinité de fois
La boucle « jusqu’à » est forcément exécuté au moins une fois au départ, puisque la condition est testée à la fin

Pensez bien à cette différence de taille lorsque vous écrivez votre code ou pseudo-code

Structures

La structure des deux boucles est différente, puisque dans un cas on teste la condition immédiatement et que dans l’autre on exécute d’abord les lignes contenues dans la boucle

Dans le cas d’un « tant que » on aura forcément quelques lignes d’initialisation avant le début de la boucle, pour que le premier test puisse se faire, alors que dans la boucle « jusqu’à » on peut s’en passer si le code inclue dans la boucle est suffisant

Conditions

Vous l’aurez peut-être déjà noté, mais il n’est pas possible de transposer une boucle « tant que » en boucle « jusqu’à » sans revoir le test de la condition, la plupart du temps il devra être inversé

Exemple :

  • TANT QUE Nombre <= 10
  • JUSQU’A Nombre > 10

Conclusion

Nous voici déjà à la fin de ce comparatif entre les deux boucles qui tracassent le plus les étudiants, j’ai nommé « TANT QUE … » et « REPETER … JUSQU’A … » 🙂

Bien que je maitrise mon métier dans un langage précis, mon algorithmique remonte à loin 🙂
J’espère que cet article vous aura tout de même été utile

Si vous souhaitez approfondir vos connaissances en algorithmique je vous conseille d’investir dans un livre qui vous guidera pas à pas des bases aux notions plus complexes

L’algorithmique étant une matière un peu particulière, ou chacun peut avoir des codes différents, s’informer via plusieurs sources ajoute des causes d’incompréhensions qu’il vaudrait mieux éviter
Si vous rechercher ce genre de livre, je peux vous conseiller celui-ci, qui fait référence dans le domaine
Ou si c’est quelque chose de plus basique que vous souhaitez, celui-ci est plus abordable (à la fois en contenu et en prix)

Partager cet article
Facebooktwitterredditpinterestlinkedinmail