Académique Documents
Professionnel Documents
Culture Documents
3
Structures de contrôle : condition-
nelles et répétitives
3.1 Introduction
En programmation procédurale comme en algorithmique, l’ordre des instruc-
tions est primordial. Le processeur exécute les instructions dans l’ordre
dans lequel elles apparaissent dans le programme, on dit que l’exécution est sé-
quentielle. Une fois que le programme a fini une instruction, il passe à la
suivante. Tant qu’une instruction n’est pas terminée, il attend avant de conti-
nuer. Les structures de contrôle décrivent l’enchaînement des instructions. Elles
sont réparties en trois catégories :
• Structures séquentielles,
• Structures conditionnelles,
• Structures répétitive.
3.2 Les structures séquentielles
3.2.1 Définition
Définition
- Une instruction séquentielle est une instruction ou une série d’instructions
qui sont exécutées de manière séquentielle, c’est-à-dire les unes après les
autres, dans l’ordre dans lequel elles apparaissent dans le programme.
- Lorsque le programme s’exécute, chaque instruction séquentielle est exécutée
l’une après l’autre, sans sauter ou réorganiser leur ordre.
55
Chapitre 3 Structures de contrôle : conditionnelles et répétitives 56
Syntaxe en algorithmique
Début
Instruction 1 ;
Instruction 2 ;
.......
Instruction n ;
Fin
3.3.1 Définitions
Définition
- Les structures conditionnelles, ne permettent d’exécuter certaines instructions,
que sous certaines conditions.
- Une condition (expression conditionnelle ou logique) est évaluée, c’est à dire
En algorithmique
1. Forme simple : Si.......Alors.....Finsi
Dans cette forme, la condition est évaluée. Si elle vaut vrai alors
c’est la séquence d’instructions 1 qui est exécutée sinon c’est l’instruc-
tion qui suit l’instruction conditionnelle dans l’algorithme qui est exécutée.
Syntaxe en algorithmique
Si <Condition> alors
Instructions 1 ;
Finsi
Format Pseudo-code
Exemple 3.2 Exemples de test simple : Donner la valeur absolue d’un réel
saisi par l’utilisateur
Exemple 3.3 Exemple de test composé : Affiche la valeur absolue d’un entier
saisi par l’utilisateur.
Format Pseudo-code
q Cet algorithme est correct mais il évalue les trois conditions qui portent sur
la même variable et qui sont exclusives. En effet, si (t <= 0), alors on ne peut pas
avoir (t>= 0 et t < 100) ni (t > 100).
q Il est donc inutile d’évaluer les deux dernières conditions si la première est
vérifiée, ou d’évaluer la dernière condition si la deuxième est vérifiée.
q Pour éviter ce cas de figure, il sera préférable d’utiliser des tests imbriqués
comme suit :
Remarque 3.1
3 Utiliser les tests imbriqués pour limiter le nombre de tests et placer d’abord les
conditions les plus probables
3 Un sinon se rapporte toujours au dernier si qui n’a pas encore de sinon associé.
3 Il est recommandé de structurer le bloc associé à si et celui associé à sinon.
Définition
- Il existe une autre variante d’instructions conditionnelles qui permet d’effectuer
des actions différentes suivant les différentes valeurs que peut avoir une variable.
- Une structure de contrôle conditionnelle est dite à choix lorsque le traitement
dépend de la valeur que prendra un sélecteur. Ce sélecteur est de type entier,
caractère ou booléen.
- Cette structure conditionnelle est appelée aussi sélective car elle sélectionne
entre plusieurs choix à la fois, et non entre deux choix alternatifs (le cas de la
structure Si...Sinon).
En algorithmique
Cette structure est décrite comme suit :
Syntaxe en algorithmique
Selon <Sélecteur> faire
Valeur 1 : Instruction 1 ;
Valeur 2 : Instruction 2 ;
.................. ;
.................. ;
Valeur N : Instruction N ;
Sinon
Instruction(s) par défaut ;
FinSelon
Format Pseudo-code
Remarque 3.2
Dans la structure de test à choix multiples :
3 Le sélecteur peut être une variable ou une expression arithmétique ou logique ;
3 La valeur est une constante de même type que le sélecteur ;
3 La partie « sinon » est exécutée si aucun des autres cas n’est vérifié ;
3 L’exécution des différents cas (y compris le cas par défaut) est exclusive c’est-
à-dire l’exécution d’un seul cas provoque la sortie de cette structure ;
3 L’instruction qui sera exécutée est celle qui correspondra à la valeur courante
de la variable testée ;
3 Lorsque cette exécution est achevée, on va ignorer toutes les séquences des
instructions suivantes ;
3 La partie sinon est facultative. Elle est exécutée si aucune des valeurs n’est égale
au sélecteur.
Exercice 3.1
Ecrire un algorithme qui affiche selon un numéro compris entre 1 et 12 le mois
équivalent.
En python, on utilise aussi des tests qui permettent d’exécuter des différentes
instructions selon la valeur d’une condition logique. La syntaxe d’un test condi-
tionnel est la suivante :
Syntaxe en Python
if condition1 :
instruction1
instruction2
............
else :
instruction3
instruction4
............
1 x = 4
2 y = 3
3 i f x < y: # ecriture classique
4 plus_petit = x
5 else :
6 plus_petit = y
7 p r i n t ( " Plus p e t i t : " , p l u s _ pe t i t )
8 Plus p e t i t : 3
Exercice 3.2
Écrire un programme Python qui demande à l’utilisateur de saisir un nombre, puis
détermine si le nombre est positif, nul ou négatif.
Format Pseudo-code
Évaluation
q Les variables de la condition doivent être initialisées avant la boucle.
q Tant que la condition est vraie, on répète l’exécution du bloc d’instructions ;
q Dès qu’elle devient fausse, on sort de la boucle ;
q Si la condition est fausse initialement, le bloc d’instructions ne sera jamais
exécuté.
Remarque 3.3
3 La condition (dite condition de contrôle de la boucle) est évaluée avant chaque
itération ;
3 Le nombre d’itérations dans une boucle TantQue n’est pas connu au moment
d’entrée dans la boucle. Il dépend de l’évolution de la valeur de condition ;
3 Une des instructions du corps de la boucle doit absolument changer la valeur
de condition de vrai à faux (après un certain nombre d’itérations), sinon le pro-
gramme tourne indéfiniment ;
3 Il est possible que les instructions à répéter ne soient jamais exécutées.
Exemple 3.9 Exemple d’algorithme qui calcule la somme des entiers positifs
inférieurs ou égaux à N.
Exercice 3.3
1- Expliquer ce qu’il fait cet algorithme.
2- Proposer une correction pour éviter la boucle infinie.
Attention
+ Une des instructions du corps de la boucle doit absolument changer la valeur
de la condition de vrai à faux (après un certain nombre d’itérations), sinon le
programme va tourner indéfiniment.
Exercice 3.4
Écrire un algorithme qui demande un nombre de départ, et qui ensuite affiche
les dix nombres suivants. Par exemple, si l’utilisateur entre le nombre 17, le pro-
gramme affichera les nombres de 18 à 27.
q La boucle répéter est utilisée elle aussi lorsque le nombre d’itérations n’est pas
connu. On répète l’exécution d’un bloc d’instruction jusqu’à ce qu’une condition
soit vraie.
q Dans la boucle Répéter, le bloc instructions est exécuté au moins une fois
quelle que soit la condition. les instructions entre Répéter et jusqu’à sont exécutées
au moins une fois et leur exécution est répétée jusqu’à ce que condition soit vrai
Format Pseudo-code
Évaluation
q La liste d’instructions est exécutée, puis la condition est évaluée.
q Si elle est fausse, le corps de la boucle est exécuté à nouveau puis la
condition est réévaluée.
q Si elle a la valeur "Vrai", le programme sort de la boucle et exécute l’ins-
truction qui suit Jusqu’à.
Attention
+ Cette boucle est dangereuse car il n’y a pas de vérification de la condition
avant d’y entrer !.
Exemple 3.10 Exemple d’algorithme qui calcule la somme des entiers posi-
tifs inférieurs ou égaux à N.
Format Pseudo-code
Évaluation
q La variable compteur est de type entier. Elle est initialisée à la valeur initiale.
Le compteur augmente sa valeur de un (1) automatiquement à chaque tour de
boucle jusqu’à la valeur finale.
q Pour chaque valeur prise par la variable compteur, la liste des instructions
est exécutée.
q Lorsque la variable compteur vaut la valeur finale, le traitement est exécuté
une dernière fois puis le programme sort de la boucle.
Exemple 3.11 Exemple d’algorithme permettant de calculer la somme des
dix premiers nombres entiers.
Remarque 3.3
3 Par défaut la variable compteur est incrémentée de 1 à chaque tour de boucle.
3 Pour modifier la valeur d’incrémentation, il suffit de rajouter le mot Pas (en
anglais step) et la valeur de ce pas à la boucle Pour.
Exercice 3.5
Écrire un algorithme qui permet de saisir un nombre entier et qui calcule la somme
des entiers pairs jusqu’à ce nombre. Par exemple, si l’on saisi 10, le programme
doit calculer : 0 + 2 + 4 + 6 + 8 + 10 = 30 ;
Le langage Python propose deux types de boucles : While et For. Elles proposent
une écriture simplifiée pour répéter la même séquence d’instructions pour
tous les éléments d’un ensemble.
3.6.1 La boucle While
1 c=0
2 w h i l e c <10 :
3 p r i n t (7∗ c )
4 c=c+1
1 For e i n [ 1 , 4 , 5 , 0 , 9 , 1 ] :
2 print ( e )
3 For e i n [ " a " , " e " , " i " , " o " , " u " , " y " ] :
4 print ( e )
5 For e i n " python " :
6 print ( e )
7 For l e t t r e i n " c i a o " :
8 print ( l e t t r e )
La fonction range()
La boucle la plus répandue est celle qui parcourt des indices entiers compris
entre 0 et n-1. On utilise pour cela la boucle for et la fonction range(val1,val2),
cette fonction renvoie la "collection" des valeurs comprises entre val1 (inclus)
et val2 (exclus).
1 f o r i in range (5) :
2 print ( i )
3 f o r i in range ( 1 , 6 ) :
4 p r i n t ( i , end=" , " )
1 f o r i in range ( 1 , 1 1 , 2 ) :
2 print ( i )
3 f o r i in range (10 ,0 , −1) :
4 print ( i )
Exercice 3.6
Écrire un programme Python qui permet de compter le nombre de voyelles (a, e, i,
o, u, y) dans la phrase "Python est un langage tres sympa" et afficher le résultat.
Les mots réservés break et continue sont utilisés pour modifier le cours nor-
mal du déroulement d’une boucle for ou d’une boucle while. Il arrive
en effet que dans certaines situations (détectées par un test if à l’intérieur d’une
boucle), on décide soit de sortir de la boucle (grâce à l’instruction break), soit
de sauter le reste des instructions de la boucle pour commencer direc-
tement l’itération suivante de la boucle (grâce à l’instruction continue).
1 f o r x in range (1 , 11) :
2 i f x == 5 :
3 br ea k
4 p r i n t ( x , end=" " )
5 ...
6 1 2 3 4
7 p r i n t ( " Boucle i n t e r r o m p u e pour x =" , x )
8 Boucle i n t e r r o m p u e pour x = 5
q Pour certains éléments d’une boucle, lorsqu’il n’est pas nécessaire d’exé-
cuter toutes les instructions, il est possible de passer directement à l’élé-
ment suivant ou l’itération suivante.
q L’instruction continue permet de passer à l’itération suivante.
1 f o r x in range (1 , 11) :
2 i f x == 5 :
3 continue
4 p r i n t ( x , end=" " )
5 ...
6 1 2 3 4 6 7 8 9 10
7 #l a b o u c l e a s a u t e l a v a l e u r 5
3.8.1 Indentation