Introduction
Il est courant qu'un algorithme répète plusieurs fois la même opération, par exemple sur toute une liste de données. Les boucles permettent d'automatiser cette répétition, et sont de ce fait des structures très utilisées en programmation. Il en existe plusieurs types, avec certaines variations en fonction des langages. Elles sont indispensables pour effectuer des actions plusieurs fois.
Ce module a pour objectif de présenter les boucles et leurs utilisations propres. Il abordera plus particulièrement le principe de l'itération, les boucles
et les boucles « for »
, ainsi que l'imbrication des boucles.« while »
Principe de l'itération
Impossible d'accéder à la ressource audio ou vidéo à l'adresse :
La ressource n'est plus disponible ou vous n'êtes pas autorisé à y accéder. Veuillez vérifier votre accès puis recharger la vidéo.
Objectif
Comprendre l'utilité de l'itération.
Mise en situation
Lorsque l'on répète plusieurs fois les mêmes actions, on parle d'itération. Une structure d'itération est une structure, dans le code, qui permet de rejouer les mêmes actions, avec d'éventuelles petites différences. Par exemple appliquer une même séquence d'actions à une variable différente à chaque itération. Il existe plusieurs types de structures itératives, mais elles sont généralement communes entre les différents langages.
Définition : Itération
Une itération représente l'exécution d'un bloc d'instructions. Un ensemble d'itérations représente donc l'exécution multiple d'un même bloc d'instructions : on dit qu'on itère sur un bloc d'instructions.
Structure itérative
Les structures itératives fournissent un moyen d'effectuer des boucles sur des instructions : la boucle permet d'exécuter des itérations.
Condition de sortie
Une boucle s'exécute un certain nombre de fois avant de s'interrompre et que la suite du programme poursuive son exécution. Si une boucle ne s’interrompt jamais, c'est une boucle infinie : le programme reste bloqué car la boucle se répète indéfiniment.
Les structures itératives nécessitent donc une condition de sortie, c'est-à-dire une condition qui interrompt les itérations dès qu'elle est remplie.
Compteur
Un compteur est souvent utilisé à l'intérieur de la boucle : une variable entière, généralement initialisée à 0, est incrémentée à chaque nouvelle itération. Le compteur permet ainsi simplement de compter le nombre d'itérations déjà effectué. La valeur du compteur est très souvent utilisée dans la condition de sortie, pour interrompre la boucle au bout d'un certain nombre d'itérations. |
À retenir
Les structures itératives permettent de répéter plusieurs fois une même suite d'instructions grâce à une boucle.
Impossible d'accéder à la ressource audio ou vidéo à l'adresse :
La ressource n'est plus disponible ou vous n'êtes pas autorisé à y accéder. Veuillez vérifier votre accès puis recharger la vidéo.
Appliquer la notion
Qu'est-ce qui est affiché par le programme ?
/** JavaScript */
let count = 3
for(let i = 0; i < count; i++) {
console.log('Pause')
}
i
représente un compteur initialisé à 0. Il sera augmenté de 1 à chaque itération, jusqu'à ce qu'il soit égal à 3.
L'instruction entre les accolades s'exécute à chaque itération.
Pause
Pause
Pause
Qu'est-ce qui est affiché par le programme ?
/** JavaScript */
for(let i = 3; i >= 0; i--) {
console.log('Temps restant', i, 'secondes')
}
i
représente un compteur initialisé à 3. Il sera diminué de 1 à chaque itération, jusqu'à ce qu'il soit inférieur à 0.
Temps restant 3 secondes
Temps restant 2 secondes
Temps restant 1 secondes
Temps restant 0 secondes
Structure for
Impossible d'accéder à la ressource audio ou vidéo à l'adresse :
La ressource n'est plus disponible ou vous n'êtes pas autorisé à y accéder. Veuillez vérifier votre accès puis recharger la vidéo.
Objectifs
Comprendre la structure de la boucle
for
;Savoir initialiser et interrompre une boucle
for
.
Mise en situation
Souvent, il est nécessaire de répéter une action un nombre précis de fois : dans ce cas on utilise souvent des compteurs, qui permettent de compter le nombre de répétitions et d'arrêter la boucle au bout d'un certain nombre.
Syntaxe : Boucle for
La boucle for
, ou « pour »
, permet de réaliser un nombre connu d'itérations. Algorithmiquement, la boucle for peut se traduire par : « Pour compteur de x à y, faire ... »
.
On peut distinguer trois éléments pour paramétrer cette boucle :
Initialisation : le compteur prend sa valeur de départ.
Condition de sortie : si elle est vraie, la boucle continue.
Opération : à appliquer au compteur à chaque itération.
for (initialisation; condition; opération) {
// instructions
}
Exemple :
Compteur de 0 à 5 exclus (soit 5 tours).
/** JavaScript: arrêt quand i n'est plus strictement inférieur à 5 */
for (let i = 0; i < 5; i++) {
console.log(i)
}
"""Python: arrêt quand i n'est plus strictement inférieur à 5."""
for i in range(5):
print(i)
À retenir
La boucle for
se prête particulièrement aux cas où il est nécessaire d'effectuer un nombre d'itérations connu avant le début de la boucle.
Impossible d'accéder à la ressource audio ou vidéo à l'adresse :
La ressource n'est plus disponible ou vous n'êtes pas autorisé à y accéder. Veuillez vérifier votre accès puis recharger la vidéo.
Appliquer la notion
On dispose d'un programme qui effectue des itérations en incrémentant un compteur.
let result = ''
for (let i = 0; i < 4; i++) {
result = result + 'Toc '
}
console.log(result)
Quel est le résultat affiché ?
Toc Toc Toc Toc
Ce programme affiche le même résultat. Quelle opération est faite sur le compteur ?
let result = ''
for (let i = 4; i > 0; i--) {
result = result + 'Toc '
}
console.log(result)
C'est une décrémentation : le compteur part de 4 et est diminué (décrémentation) jusqu'à atteindre 0, ce qui est ici équivalent à partir de 0 et l'augmenter (incrémentation) jusqu'à atteindre 4.
Structure while
Impossible d'accéder à la ressource audio ou vidéo à l'adresse :
La ressource n'est plus disponible ou vous n'êtes pas autorisé à y accéder. Veuillez vérifier votre accès puis recharger la vidéo.
Objectifs
Comprendre la structure de la boucle
while
;Savoir utiliser et interrompre une boucle
while
.
Mise en situation
Toutes les situations ne se prêtent pas à une boucle avec un compteur à incrémenter. Prenons par exemple un programme qui demande à l'utilisateur d'entrer son âge. Si l'âge entré n'est pas un nombre valide, le programme redemande de renseigner son âge. Nous avons donc ici un mécanisme de boucle qui va devoir s'exécuter un nombre de fois inconnu à l'avance. Ici la condition de notre boucle sera de vérifier la validité de la valeur entrée par l'utilisateur, par exemple en testant le type de la variable.
Syntaxe : Boucle while
La boucle while
, ou « tant que »
, permet de réaliser des itérations en fonction de conditions booléennes (vrai ou faux). Algorithmiquement, la boucle while
peut se traduire par : « Tant que condition vraie, faire ... »
.
La structure de cette boucle est très simple et comporte une condition et un bloc d'instructions.
while (condition) {
// instructions
}
Exemple : Menu des recommandations
On affiche un menu avec des options. Seule l'option « 0 »
permet de sortir du menu grâce à la condition du while
.
"""Python."""
choice = ''
# Continue tant que 0 n'est pas sélectionné
while choice != '0':
print('0. Sortir')
print('1. Afficher le film recommandé')
print('2. Afficher l\'album recommandé')
# Attend la réponse
choice = input('Choix > ')
if choice == '1': # film
print('Titanic (1997) - James Cameron\n')
elif choice == '2': # album
print('Thriller (1982) - Michael Jackson\n')
/** JavaScript */
let choice = ''
// continue tant que 0 n'est pas sélectionné
while (choice !== '0') {
console.log('0. Sortir')
console.log('1. Afficher le film recommandé')
console.log('2. Afficher l\'album recommandé')
// attend la réponse
choice = prompt('Choix')
if (choice === '1') { // film
console.log('Titanic (1997) - James Cameron\n')
} else if (choice === '2') { // album
console.log('Thriller (1982) - Michael Jackson\n')
}
}
Exemple : Roulette
Une mise de départ est fixée à 10 €. À chaque tour, la roulette sort un nombre : s'il est pair, on empoche l'argent (moins la mise), sinon la mise double et on continue.
"""Python."""
import random
attempts = 0
gain = 0
bet = 10
loss = 0
winner = False
print('Tu gagnes si la roulette sort un nombre pair. La mise de départ est à 10 euros.')
# continue jusqu'à perdre
while not winner:
# argent mis en jeu
loss = loss + bet
attempts = attempts + 1
# nombre aléatoire entre 0 et 30
number = random.randint(0, 30)
print('Tentative...........', number)
if number%2 == 1: # nombre impair
print('Dommage, ta mise double. Retente ta chance')
bet = bet * 2
else: # nombre pair
print('C\'est gagné')
gain = bet * 2
winner = True
input('(Entrée)')
print('Gain de', (gain - loss), ' euros après ', attempts, ' tentative(s)')
/** JavaScript */
let attempts = 0
let gain = 0
let bet = 10
let loss = 0
let winner = false
console.log('Tu gagnes si la roulette sort un nombre pair. La mise de départ est à 10 euros.')
// continue jusqu'à perdre
while (!winner) {
// argent mis en jeu
loss = loss + bet
attempts = attempts + 1
// nombre aléatoire entre 0 et 30
const number = Math.floor(Math.random() * 31)
console.log('Tentative...........', number)
if (number % 2 === 1) { // nombre impair
console.log('Dommage, ta mise double. Retente ta chance')
bet = bet * 2
} else { // nombre pair
console.log('C\'est gagné')
gain = bet * 2
winner = true
}
prompt('(Entrée)')
}
console.log('Gain de ' + (gain - loss) + ' euros après ' + attempts + ' tentative(s)')
Complément : Boucle do...while
En JavaScript, il existe une structure proche de la boucle while
: la boucle do while
. Cette fois ci, le bloc d'instruction est exécuté d'abord, la condition est testée ensuite. Si la condition est remplie, on continue. Il y a donc donc toujours au moins une itération.
Algorithmiquement, la boucle do while
peut se traduire par : « Faire... Tant que condition vraie »
.
do {
// instructions
} while (condition)
/** JavaScript: itère une seule fois */
let i = 0
do {
console.log(i)
} while (i < -2)
Complément : Compteur avec while
La boucle while
peut reproduire le comportement d'un compteur (mais en général, dans ce cas, on préfère une boucle for
).
/** JavaScript: itère 5 fois */
let i = 0
while (i < 5) {
console.log(i++)
}
"""Python: itère 5 fois."""
i = 0
while i < 5:
print(i)
i+=1
À retenir
La boucle
while
permet des itérations avec des conditions quelconques.Elle est principalement utilisée quand on ne connaît pas le nombre d'itérations à faire avant le début de la boucle.
Impossible d'accéder à la ressource audio ou vidéo à l'adresse :
La ressource n'est plus disponible ou vous n'êtes pas autorisé à y accéder. Veuillez vérifier votre accès puis recharger la vidéo.
Appliquer la notion
Un coffre fort ne peut être ouvert qu'avec un mot de passe composé de 4 chiffres. Voici son programme :
/** JavaScript */
const secretPassword = '4842'
let answer = ''
console.log('Mot de passe requis')
while (answer !== secretPassword) {
// Attend une réponse
answer = prompt('**** ')
}
console.log('Ouverture du coffre')
Ce coffre n'est pas très sécurisé. Modifier son programme pour qu'un nombre de mauvaises réponses maximum soit autorisé : au bout de 4 tentatives qui échouent, le coffre affiche Tentatives dépassées. Blocage de toutes les issues.
Utiliser un compteur incrémenté à chaque tentative et ajouter une condition au while
.
L'affichage des messages se fera une fois que l'on est sorti de la boucle : soit parce que le mot de passe est bon, soit parce que le nombre d'essai maximum est dépassé.
/** JavaScript */
const secretPassword = '4842'
let answer = ''
let attempts = 0
console.log('Mot de passe requis')
while (answer !== secretPassword && attempts < 4) {
// Attend une réponse
answer = prompt('**** ')
attempts = attempts + 1
}
if (answer === secretPassword) {
console.log('Ouverture du coffre')
} else {
console.log('Tentatives dépassées. Blocage de toutes les issues')
}
Les boucles imbriquées
Impossible d'accéder à la ressource audio ou vidéo à l'adresse :
La ressource n'est plus disponible ou vous n'êtes pas autorisé à y accéder. Veuillez vérifier votre accès puis recharger la vidéo.
Objectif
Comprendre l'imbrication de plusieurs structures itératives.
Mise en situation
Imaginons un programme qui se charge de modifier tout les pixels d'un écran. Pour cela il effectue une boucle sur chaque pixel, l'un après l'autre, pour lui donner la valeur désirée. Comme vous le savez, un écran est constitué de lignes et de colonnes de pixels. On peut donc dire que notre programme va parcourir l'ensemble des lignes de notre écran, et pour chacune de ces lignes, parcourir l'ensemble des colonnes. Nous avons donc là en fait 2 boucles, l'une imbriquée dans l'autre. Nous allons voir qu'une imbrication de boucle n'est pas compliquée à réaliser, mais que cela nécessite un peu de vigilance.
Imbrication
Une boucle peut en contenir une autre, et plus précisément, être imbriquée dans une autre.
Il faut être particulièrement vigilant aux variables qui sont modifiées pendant les itérations d'une boucle imbriquée car celles-ci sont susceptibles d'avoir des répercussions sur l'autre boucle.
En particulier, on veillera à ne pas modifier le compteur de la boucle externe dans la boucle imbriquée.
Exemple : Double compteur
Deux compteurs différents sont déclarés.
Pour chaque itération de la boucle externe, la boucle imbriquée (ou interne) réalise 11 itérations. Le compteur de la boucle imbriquée est remis à zéro à chaque nouvelle itération de la boucle externe.
/** JavaScript: affiche les tables de mutliplication de 0 à 10 */
for (let i = 0; i <= 10; i++) {
for (let j = 0; j <= 10; j++) {
console.log(i, '*', j, '=', i * j)
}
}
"""Python: affiche les tables de multiplication de 0 à 10."""
for i in range(11):
for j in range(11):
print(i, '*', j, '=', i * j)
Imbrication mixte
L'imbrication est possible pour tous les types de boucle. On peut même imbriquer des boucles de types différents, comme une boucle for
dans une boucle while
.
Exemple :
Le programme boucle tant que le jeu continue. À chaque tour, on pioche un nombre aléatoire et on demande sa table de multiplication de 0 à 9.
"""Python."""
import random
end = False
score = 0
maximumScore = 0
# Continue tant que l'utilisateur répond 'o'
while not end:
# Calcule un nombre aléatoire
randomNumber = random.randint(0, 9)
print('Table de', randomNumber)
# Demande la table de multiplication du nombre aléatoire
for i in range (10):
answer = input('{0}*{1} = ? '.format(randomNumber, i))
# Compte le nombre total de questions
maximumScore = maximumScore + 1
# 1 point pour chaque bonne réponse
if answer == str(randomNumber*i):
score = score + 1
print('Vous avez {0}/{1}'.format(score, maximumScore))
end = input('Continuer le test ? (o/n)') != 'o'
/** JavaScript */
let end = false
let score = 0
let maximumScore = 0
// Continue tant que l'utilisateur répond 'o'
while (!end) {
// Calcul un nombre aléatoire
const randomNumber = Math.floor(Math.random() * 9) + 1
console.log('Table de ' + randomNumber)
// Demande la table de multiplication du nombre aléatoire
for (let i = 0; i < 10; i++) {
const answer = Number(prompt(randomNumber + '*' + i + ' ?'))
// Compte le nombre total de questions
maximumScore = maximumScore + 1
// 1 point pour chaque bonne réponse
if (answer === randomNumber * i) {
score = score + 1
}
}
console.log('Vous avez ' + score + '/' + maximumScore)
end = prompt('Continuer le test ? (o/n)') !== 'o'
}
À retenir
Les boucles imbriquées permettent d'associer des itérations à d'autres et doivent être manipulées avec prudence.
Impossible d'accéder à la ressource audio ou vidéo à l'adresse :
La ressource n'est plus disponible ou vous n'êtes pas autorisé à y accéder. Veuillez vérifier votre accès puis recharger la vidéo.
Appliquer la notion
Un étudiant s'amuse à réaliser des programmes permettant de dessiner des formes à partir de caractères « * »
. Il a mis au point un programme qui affiche un triangle.
/** JavaScript: dessine un triangle */
const heigth = 15
const width = 15
for(let h = 0; h < heigth; h++) {
let line = ''
for(let w = 0; w < width - h; w++) {
line = line + '*' // ajoute une étoile à la ligne à afficher
}
console.log(line)
}
Il vous demande de modifier son programme de manière à affiche un rectangle 15x15.
Donner le code modifié.
Modifier la boucle imbriquée pour que la largeur dessinée soit égale à la longueur.
/** JavaScript */
const heigth = 15
const width = 15
for(let h = 0; h < heigth; h++) {
let line = ''
for(let w = 0; w < width; w++) {
line = line + '*'
}
console.log(line)
}
Quiz
Quiz - Culture
Quelles boucles peuvent utiliser un compteur afin d'effectuer un nombre d'itérations connu à l'avance ?
while
do while
for
Quelle boucle est la plus adaptée en général pour utiliser un compteur afin d'effectuer un nombre d'itérations connu à l'avance ?
while
do while
for
On peut toujours remplacer une boucle do while par une boucle while ?
vrai
faux
On peut toujours remplacer une boucle for par une boucle while ?
vrai
faux
Quiz - Méthode
Quels éléments sont intégrés dans la première instruction d'une boucle for
?
Une initialisation
Une condition
Une opération
Une alternative
Quand est-il pertinent d'utiliser une boucle while
?
Quand le nombre d'itérations n'est pas connu avant d'entrer dans la boucle
Quand le corps de la boucle est composé de peu d'instructions
Pour quelle raison première utilise-t-on une boucle do while
plutôt que while
?
Lorsque la boucle peut ne réaliser aucune itération.
Lorsque la condition de sortie ne concerne pas un compteur.
Lorsque la boucle itère au moins une fois.
Quiz - Code
Quelle opération est une décrémentation d'un compteur ?
count++
count = count + 1
count--
count = count - 1
Combien de fois s'exécutera l'instruction line = line + '*'
?
/** JavaScript */
const heigth = 10
for (let h = 0; h < heigth; h++) {
let line = ''
for (let w = 0; w < heigth; w++) {
line = line + '*'
}
console.log(line)
}
Quelle(s) affirmation(s) sont vraie(s) sur la boucle suivante ?
/** JavaScript */
let n = 10
while (n >= 0) {
console.log(n)
n = n - 1
}
La boucle effectuera 10 itérations
Une boucle for
serait plus appropriée
Ce programme effectue un compte à rebours de 10 à 0.
Quiz - Culture
Quelles boucles peuvent utiliser un compteur afin d'effectuer un nombre d'itérations connu à l'avance ?
while
do while
for
Bien que la boucle for
soit privilégiée pour les compteurs, toutes les boucles peuvent utiliser des compteurs et s'arrêter dès que la valeur du compteur remplit une condition.
Quelle boucle est la plus adaptée en général pour utiliser un compteur afin d'effectuer un nombre d'itérations connu à l'avance ?
while
do while
for
On peut toujours remplacer une boucle do while par une boucle while ?
vrai
faux
Il suffit de copier le code à exécuter dans la boucle une première fois avant la boucle ; do while permet d'éviter cette duplication de code, mais elle n'est pas indispensable.
On peut toujours remplacer une boucle for par une boucle while ?
vrai
faux
Il suffit de gérer un compteur pour reproduire une boucle for avec une boucle while. En revanche, on évitera de la faire car il est plus clair de savoir avant d'entrer dans la boucle de quel type de boucle il s'agit.
Quiz - Méthode
Quels éléments sont intégrés dans la première instruction d'une boucle for
?
Une initialisation
Une condition
Une opération
Une alternative
La déclaration d'une boucle for
est composée de trois parties :
Une initialisation d'un compteur exécutée au début de la boucle.
Une condition, vérifiée à chaque itération et qui permet de sortir de la boucle dès qu'elle est fausse, qui porte en général sur la valeur du compteur.
Une opération, exécutée à chaque itération et qui modifie en général la valeur du compteur.
Quand est-il pertinent d'utiliser une boucle while
?
Quand le nombre d'itérations n'est pas connu avant d'entrer dans la boucle
Quand le corps de la boucle est composé de peu d'instructions
Pour quelle raison première utilise-t-on une boucle do while
plutôt que while
?
Lorsque la boucle peut ne réaliser aucune itération.
Lorsque la condition de sortie ne concerne pas un compteur.
Lorsque la boucle itère au moins une fois.
Les instructions d'une structure do while
s'exécutent toujours au moins une fois. Elle est par exemple utile pour demander une entrée à un utilisateur, la valider et lui re-demander tant qu'elle n'est pas valide.
Quiz - Code
Quelle opération est une décrémentation d'un compteur ?
count++
count = count + 1
count--
count = count - 1
L'opération de décrémentation consiste à enlever 1 à une variable. Elle peut s'effectuer « à la main »
, ou grâce à la syntaxe spécialisée --
.
Combien de fois s'exécutera l'instruction line = line + '*'
?
/** JavaScript */
const heigth = 10
for (let h = 0; h < heigth; h++) {
let line = ''
for (let w = 0; w < heigth; w++) {
line = line + '*'
}
console.log(line)
}
Pour chaque itération de la boucle externe, la boucle imbriquée s'exécute 10 fois. Comme la boucle externe comporte 10 itérations, line = line + '*'
s'exécutera 10 x 10 = 100 fois.
La boucle effectuera 10 itérations
Une boucle for
serait plus appropriée
Ce programme effectue un compte à rebours de 10 à 0.
La boucle effectuera 10 itérations
Ici la boucle effectue 11 opérations, puisque lorsque n vaut 0 la boucle est exécutée encore une fois.
Une boucle for
serait plus appropriée
Lorsqu'une boucle travaille à l'aide d'un compteur, la structure for
est plus claire et plus lisible.
Ce programme effectue un compte à rebours de 10 à 0.
Défi
Vous souhaitez mettre en place un système permettant de faire des statistiques sur la météo de votre région.
Vous disposez déjà d'une fonction qui vous permet de savoir s'il fait beau temps pour un jour donné.
/** JavaScript */
// Simule l'information du beau temps.
function isGoodWeather () {
return Math.random() < 0.20
}
À partir de cette fonction prédéfinie, construisez un programme qui, pour chaque jour de l'année, affiche sa météo et calcule à la fin de l'année le pourcentage de jours de beau temps.
Pour cela, dans une boucle for
, parcourez 365 jours en affichant à chaque fois « Jour X : il fait beau »
ou « Jour X : il fait moche »
.
À la fin des 365 jours, afficher le pourcentage de beaux jours obtenus.
Appeler simplement isGoodWeather()
pour chaque jour : si le résultat est true
, alors il s'agit d'un beau jour.
Utiliser Math.round(x)
pour arrondir un nombre x.
let goodDays = 0
for (let i = 0; i < 365; i++) {
if (isGoodWeather()) {
goodDays++
console.log('Jour ' + i + ': il fait beau')
} else {
console.log('Jour ' + i + ': il fait moche')
}
}
const percent = Math.round(goodDays / 365 * 100)
console.log('Pourcentage de jours beaux dans l\'année: ' + percent + '%')
Vous voulez maintenant savoir si vous pouvez sortir dehors pour un jour donné. Vous sortez s'il fait beau.
En réutilisant la fonction prédéfinie, réalisez un programme qui boucle jusqu'à tant qu'il fasse beau.
Affichez pour chaque jour « Jour X : je sortirai demain »
ou « Jour X : il faut beau, je sors »
pour le jour de beau temps.
let goodDay = false
let i = 0
while (!goodDay) {
goodDay = isGoodWeather()
if (goodDay) {
console.log('Jour ' + i + ': il fait beau je sors!')
} else {
console.log('Jour ' + i + ': je sortirai demain...')
}
i++
}
Finalement, vous voulez avoir un programme qui consigne le jour de chaque semaine où vous êtes sorti.
Pour chacune des 52 semaines de l'année, le programme boucle jusqu'à trouver un jour de beau temps dans la semaine. Dans ce cas, il affiche : « Je suis sorti cette semaine X, le jour Y »
.
Les semaines sont parcourues dans une boucle for
. À l'intérieur, une boucle while
permet de parcourir les jours tant qu'aucun n'est un beau jour.
La boucle des jours de la semaine doit s'arrêter dans deux cas :
Si un jour de beau temps est trouvé.
S'il n'y a plus de jours dans la semaine (pas plus de 7 itérations par semaine).
On obtient deux boucles imbriquées :
La boucle externe effectuera quoi qu'il arrive 52 itérations.
La boucle imbriquée effectuera au maximum 7 itérations, et s'arrêtera avant si on trouve un jour de beau temps.
for (let i = 1; i < 53; i++) {
// Début de la semaine i
let goodDay = false
let weekday = 1
// Tant qu'aucun beau jour n'est trouvé et que la semaine n'est pas terminée
while (!goodDay && weekday <= 7) {
goodDay = isGoodWeather()
if (goodDay) {
console.log('Je suis sorti cette semaine ' + i + ', le jour ' + weekday)
}
weekday++
}
}
Conclusion
Les structures itératives sont très utiles en programmation et permettent de répéter un ensemble d'actions à plusieurs reprises. Elles existent, quasiment à l'identique, dans tous les langages. Il y en a de plusieurs types : certaines basées sur un compteur, d'autres sur l'évaluation d'une condition quelconque. L'utilisation d'un compteur permet de maîtriser précisément le nombre d'itérations, tandis que l'évaluation d'une condition permet de ne répéter la boucle que si c'est nécessaire. En fonction des besoins, il est aussi possible d'utiliser plusieurs boucles imbriquées.