Transcript itération

Section VI
Structures répétitives (suite)
Algorithmes et résolution de problèmes
18279 FGE
Contenu
• Récapitulation
– Structure TANTQUE
– Structure POUR
• Structure RÉPÉTER-JUSQU’À
– Pseudo-code et organigramme
• Exercice
• Devoir #5
Structure TANTQUE
• Permet de répéter une
séquence d’opérations
tant qu’une condition
est satisfaite (i.e. vraie)
TANTQUE Condition FAIRE
Séquence d'opérations
FINTANTQUE
Condition?
Oui
Séquence
d’opérations
Non
Structure TANTQUE (suite)
• Exemple : algorithme
calculant la moyenne
de 100 valeurs
Accum = 0
Compte = 1
TANTQUE Compte < 101 FAIRE
LIRE Valeur
Accum = Accum + Valeur
Compte = Compte + 1
FINTANTQUE
Moyenne = Accum / 100
ÉCRIRE Moyenne
Début
Accum = 0
Compte = 1
Compte < 101?
Oui
Non
Moyenne = Accum / 100
Lire Valeur
Écrire Moyenne
Accum = Accum + Valeur
Fin
Compte = Compte + 1
Structure POUR
• Structure répétitive
employant une variable
compteur pour identifier le
nombre d’itérations à
effectuer
C o m p te u r = 1
Non
C o m p te u r > 1 0
C o m p te u r + 1
O ui
P ro c e s s u s
Pseudo-code
POUR Variable = Début JUSQU’À Fin FAIRE
Séquence d'opérations
FINPOUR
Structure POUR (suite)
• Exemple : algorithme calculant la moyenne de 100
valeurs
Accum = 0
POUR Compte = 1 JUSQU’À 100 FAIRE
LIRE Valeur
Accum = Accum + Valeur
FINPOUR
Moyenne = Accum / 100
ÉCRIRE Moyenne
• La variable Compte est automatiquement incrémentée
(i.e. augmentée de 1) à chaque itération
Structure RÉPÉTER-JUSQU’À
• La structure répétitive TANTQUE ne peut
faire d’itération si la condition est fausse
avant la première itération
ÉCRIRE "Nombre positif?"
Exemple d’exécution
LIRE Nombre
TANTQUE Nombre  0 FAIRE
Nombre positif? 100
ÉCRIRE "Le nombre doit
Log(100) = 2
être positif"
LIRE Nombre
FINTANTQUE
ÉCRIRE "Log(", Nombre, ")=", Log(Nombre)
Structure RÉPÉTER-JUSQU’À
(suite)
• Dans certaines solutions, il est parfois requis
qu’une structure répétitive effectue au moins une
itération
Nombre = 0
TANTQUE Nombre  0 FAIRE
ÉCRIRE "Nombre positif?"
LIRE Nombre
FINTANTQUE
• Dans cet exemple, l’initialisation de la variable
Nombre est essentielle afin qu’un itération soit
effectuée par la boucle
Structure RÉPÉTER-JUSQU’À
(suite)
• La structure répétitive RÉPÉTER-JUSQU'À
répond à ce besoin en plaçant la condition
d’itération à la fin de la boucle
RÉPÉTER
ÉCRIRE "Nombre positif?"
LIRE Nombre
JUSQU’À Nombre > 0
• Au moins une itération est garantie afin que le
flux d’exécution se rendre à la condition
d’itération
Structure RÉPÉTER-JUSQU’À
(suite)
• Formulation
RÉPÉTER
Séquence d’opérations
JUSQU’À Condition
• Notez que les itérations
se poursuivent tant que
la condition n’est pas
satisfaite
Séquence
d’opérations
Non
Condition?
Oui
Structure RÉPÉTER-JUSQU’À
(suite)
• La condition de la structure RÉPÉTERJUSQU’À est inversée par rapport à la
structure TANTQUE équivalente
Nombre = 0
TANTQUE Nombre  0 FAIRE
ÉCRIRE "Nombre positif?"
LIRE Nombre
FINTANTQUE
RÉPÉTER
ÉCRIRE "Nombre positif?"
LIRE Nombre
JUSQU’À Nombre > 0
Structure RÉPÉTER-JUSQU’À
(suite)
• En algorithmie, il n’y a pas de structure
RÉPÉTER-TANTQUE
– C’est-à-dire répéter tant que la condition est
vraie
– On utilise plutôt une structure RÉPÉTERJUSQU’À avec une condition négative
RÉPÉTER
ÉCRIRE "Nombre positif?"
LIRE Nombre
TANTQUE Nombre  0
RÉPÉTER
ÉCRIRE "Nombre positif?"
LIRE Nombre
JUSQU’À Nombre > 0
Exercice #1
• Exercice : Écrivez un algorithme (pseudocode et organigramme) qui identifie la valeur
maximum parmi des valeurs non-négatives
fournies par l’utilisateur
– Si l'utilisateur entre un nombre négatif, affichez
une message d'erreur et ignorez celle-ci
– Après chaque traitement d'une valeur, demander à
l'utilisateur s'il a terminé
– Exploitez une structure RÉPÉTER-JUSQU'À
Exercice #1
• Solution : pseudo-code
Maximum = 0
\\ initialisation
RÉPÉTER
ÉCRIRE "Nombre non-négatif?"
LIRE Nombre
\\ Traiter le nombre lu
SI Nombre < 0 ALORS
ÉCRIRE "Erreur: nombre invalide"
SINON SI Nombre > Maximum ALORS
Maximum = Nombre
FINSI
\\ Doit-on traiter un autre nombre?
ÉCRIRE Traiter un autre nombre (oui/non)?"
LIRE Continue
JUSQU’À Continue = "non"
\\ Afficher le maximum trouvé
ÉCRIRE "Nombre maximum =", Maximum
Exercice #1
A
Nombre < 0?
Non
• Solution : organigramme
Écrire "Erreur: nombre
invalide"
– On exploite le symbole
connecteur ( X )
Début
Oui
Nombre > Maximum?
Oui
Non
B
Écrire "Traiter un autre
nombre (oui/non)?"
Maximum = 0
Lire Continue
Non
Écrire "Nombre
non-négatif?"
Lire Nombre
B
A
Continue = "non"?
Oui
Écrire "Nombre maximum=",
Maximum
Fin
Maximum = Nombre
Quelle structure utiliser?
• Trois structures répétitives sont disponibles
– Laquelle utiliser dans un algorithme?
• Voici quelques règles à considérer
– Si le nombre d’itérations est déterminé par une
variable compteur incrémentée
• Utiliser la structure POUR
– Si au moins une itération est requise
• Utiliser la structure RÉPÉTER-JUSQU’À
– Dans les autres circonstances
• Utiliser la structure TANTQUE
Questions quiz
• Qu'est ce qu'une itération?
- Une exécution de la séquence d'opérations
dans une structure itérative
• Qu'est-ce qu'une variable d'accumulation?
- Une variable servant à accumuler des valeurs
numériques
• Quel est le rôle du symbole d'initialisation?
- Représente des opérations d'initialisation de
variables
Questions quiz (suite)
• Quelles sont les principales distinctions
entre la structure TANTQUE et la structure
RÉPÉTER-JUSQU'À?
- La position de la condition d'itération
- Inversion de la condition d'itération
• Une boucle peut-elle disposer de plus d'un
point de sortie?
- Non, la seule sortie possible est via la
condition d'itération
Questions quiz (suite)
• Quel est un risque potentiel d'erreur lorsqu'on
exploite des boucles imbriquées avec
compteurs?
- Éviter que les deux boucles exploite la même
variable compteur
• Quelle structure répétitive n'a pas de
représentation dans l'organigramme?
- POUR
Questions quiz (suite)
• Lequel des algorithmes suivants ne fonctionne
pas, et pourquoi?
– Afficher la somme des valeurs autres que 0 lues
Accum = 0
TANTQUE Valeur  0 FAIRE
Accum = Accum + Valeur
LIRE Valeur
FINTANTQUE
ÉCRIRE Accum
Accum = 0
RÉPÉTER
LIRE Valeur
Accum = Accum + Valeur
JUSQU'À Valeur  0
ÉCRIRE Accum
Aucune lecture de Valeur
n'est effectuée avant de vérifier
la condition d'itération
La condition d'itération doit
être inversée, sinon la boucle
cesse à la lecture d'une valeur
autre que 0
Devoir #5
• Énoncé du devoir disponible sur ~jlemoe
• Concevoir un algorithme calculant votre
moyenne pondérée cumulative
• Vous devez soumettre (Devoir6.ZIP)
– Un fichier LARP
– Un fichier Word
– À remettre avant le prochain cours