La boucle répéter, tant que
La boucle do while
La boucle RÉPÉTER ... TANT QUE permet de réitérer un bloc d'instructions jusqu'à ce que la condition de sortie soit vérifiée. Cette structure est semblable à la structure TANT QUE, avec la différence suivante que cette nouvelle évalue la condition après avoir exécuté le bloc d'instructions. Ainsi le bloc d'instructions est toujours exécuté au moins une fois. Dans de telle boucle, on effectue généralement le passage au suivant, puis le traitement.
Dans la pratique, la structure RÉPÉTER ... TANT QUE n'est pas si fréquente que sa rivale ; mais dans certains cas, elle fournit une solution plus élégante. Cette boucle est préférée pour évaluer des suites jusqu'à obtenir une précision suffisante. Cette boucle est également utilisée pour valider le contrôle de la saisie de l'utilisateur.
Le contrôle de la saisie
Dans les programmes informatiques, il est beaucoup plus convivial de permettre un utilisateur de corriger son erreur que de planter. C'est pourquoi, contrôler la saisie de l'utilisateur est important, cela permet d'éviter un bon nombre de sources d'erreurs. Par rapidité, dans les programmes qui tournent dans un terminal ont demande généralement à l'utilisateur d'entrer une seule lettre : Y pour yes, et N pour No. Ainsi, l'algorithme suivant oblige l'utilisateur à entrer Oui ou Non, la boucle recommence s'il entre autres choses.
DÉBUT VARIABLE c: CARACTÈRE RÉPÉTER LIRE "Avez-vous plus de 18 ans? [Y/N]", c TANT QUE PAS (c=='Y' OU c=='N') ÉCRIRE "L'utilisateur a répondu: ", c FIN
Exercices
- Écrivez un algorithme qui autorise uniquement l'utilisateur à entrer une valeur numérique. Cette valeur doit être stockée dans une variable de type CARACTÈRE.
DÉBUT VARIABLE c: CARACTÈRE RÉPÉTER LIRE "Veuillez entre un nombre:", c TANT QUE PAS (c >= '0' ET c <= '9') ÉCRIRE "L'utilisateur a répondu: ", c FIN
- Écrivez un algorithme qui autorise uniquement l'utilisateur à entrer une lettre de l'alphabet uniquement en majuscule.
DÉBUT VARIABLE c: CARACTÈRE RÉPÉTER LIRE "Veuillez entre un caractère majuscule:", c TANT QUE PAS (c >= 'A' ET c <= 'Z') ÉCRIRE "L'utilisateur a répondu: ", c FIN
- Écrivez un algorithme qui autorise l'utilisateur à entrer uniquement un caractère alphanumérique (nombre, majuscule, minuscule).
DÉBUT VARIABLE c: CARACTÈRE RÉPÉTER LIRE "Veuillez entre un caractère alphanumérique:", c TANT QUE PAS ((c >= '0' ET c <= '9') OU (c >= 'a' ET c <= 'z') OU (c >= 'A' ET c <= 'Z') ) ÉCRIRE "L'utilisateur a répondu: ", c FIN
- Écrivez un algorithme qui demande un mot de passe à l'utilisateur d'au moins 5 caractères alphanumériques terminé par le caractère spécial NUL. Astuce: CHAÎNE + CARACTÈRE = CHAÎNE
DÉBUT VARIABLE c: CARACTÈRE VARIABLE pass: CHAÎNE VARIABLE length: ENTIER RÉPÉTER RÉPÉTER LIRE "Veuillez entre un caractère alphanumérique:", c TANT QUE PAS ((c >= '0' ET c <= '9') OU (c >= 'a' ET c <= 'z') OU (c >= 'A' ET c <= 'Z') OU c=NUL) SI c = '.' ET length < 5: length<-0 pass<-"" ECRIRE "Le mot de passe est trop cours, veuillez rééessayer." SINON: pass<-pass+c length<-length+1 FIN SI TANT QUE length < 5 ET c != NUL ÉCRIRE "Le mot de passe est: ", pass FIN
Évaluer à une précision souhaitée
Par exemple, la fonction racine carrée utilisée dans les ordinateurs est en réalité issue des travaux de l'algorithme de Newton. L'expression est évaluée jusqu'à obtenir une précision équivalente à la précision maximale de la variable. L'algorithme est le suivant, où x0 peut être de n'importe quelle valeur approchée de la racine, mais plus cette valeur est proche, plus l'algorithme converge rapidement.
Si l'on développe cette série pour la racine carrée de deux, nous pouvons la voir converger très rapidement :
Lorsqu'on programme un tel algorithme, on peut calculer la précision jusqu'à ce qu'on obtienne un delta |xₙ - xₙ₊₁| plus petit que la précision que l'on souhaite obtenir. En d'autres mots, on augmente la précision de nombre tant que l'on n'est pas suffisamment précis.
DÉBUT VARIABLE x0, x1, a: RÉEL CONSTANTE E←0.0000001 x1←1 LIRE "Entrez une valeur:", a RÉPÉTER x0<-x1 x1<-(x0 + (a/x0)) / 2.0 TANT QUE |x1 - x0| > E ÉCRIRE "La racine carrée vaut: ", x1 FIN
Exercices
- Écrivez un algorithme à l'aide de la structure RÉPÉTER... TANT QUE qui affiche la série "1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, ..." pour la constante N=20.
DÉBUT VARIABLE v: ENTIER CONSTANTE N=20 v<-0 RÉPÉTER v<-v+1 ECRIRE -n v%10, ", " TANT QUE v < N ÉCRIRE "..." FIN
- Écrivez un algorithme à l'aide de la structure RÉPÉTER... TANT QUE qui calcule la fractionnelle d'un nombre.
DÉBUT VARIABLE v, r: ENTIER LIRE "Veuillez enetrer une valeur: ", v r<-v RÉPÉTER v<-v-1 r<-r*v TANT QUE v > 1 ÉCRIRE "La factorielle vaut: ", r FIN
- Écrivez un algorithme qui évalue l'expression mathématique de à l'aide de la série: . Tentez de sortir l'exposant de la boucle principale.
DÉBUT VARIABLE x0, x1: RÉEL VARIABLE i: ENTIER CONSTANTE E=0.00000001 i<-0 x1<-1 RÉPÉTER x0<-x1 i<-i+1 x1<-x0 + ((-1)ⁱ)/(2i+1) TANT QUE |x1-x0| > E ÉCRIRE "PI/4 vaut ", x1 FIN
DÉBUT VARIABLE x0, x1: RÉEL VARIABLE i: ENTIER CONSTANTE E=0.00000001 i←0 x1←1 RÉPÉTER x0←x1 i←i+1 SI i%2 == 0: x1<-x0 + 1/(2i+1) SINON: x1<-x0 - 1/(2i+1) FIN SI TANT QUE |x1-x0| > E ÉCRIRE "PI/4 vaut ", x1 FIN
DÉBUT VARIABLE x0, x1: RÉEL VARIABLE i, sign: ENTIER CONSTANTE E=0.00000001 sign<- -1 i<-0 x1<-1 RÉPÉTER x0<-x1 i←<-+1 sign<- -sign x1<-x0 + sign/(2i+1) TANT QUE |x1-x0| > E ÉCRIRE "PI/4 vaut ", x1 FIN
DÉBUT VARIABLE x0, x1: RÉEL VARIABLE i, sign: ENTIER CONSTANTE E=0.00000001 sign<- -1 i<-0 x1<-1 RÉPÉTER x0<-x1 i<-i+2 sign<- -sign x1<-x0 + sign/i TANT QUE |x1-x0| > E ÉCRIRE "PI/4 vaut ", x1 FIN
- Écrivez un algorithme qui évalue l'expression mathématique à l'aide de la série: .
DÉBUT VARIABLE x0, x1, x, y, N, D: RÉEL VARIABLE i: ENTIER CONSTANTE E=0.00000001 LIRE "Quelle est la valeur de x?", x x1<-1 N<-1 D<-1 y<-x*x RÉPÉTER x0<-x1 N<-N*y D<-D*2n*(2n-1) x1<-x0 + (N/D) TANT QUE |x1-x0| > E ÉCRIRE "PI/4 vaut ", x1 FIN
- Last Author
- kossolax
- Last Edited
- Aug 25 2020, 9:40 AM