Beruflich Dokumente
Kultur Dokumente
Chapitre 2:
Les structures de contrle:
notions fondamentales
Introduction
Les structures conditionnelles
Les boucles
La dmarche itrative
Introduction
En programmation procdurale comme en algorithmique (qui respecte les contraintes
fondamentales de la programmation!), l'ordre des instructions est primordial.
Le processeur excute les instructions dans l'ordre dans lequel elles apparaissent dans le
programme. On dit que l'excution est squentielle.
Une fois que le programme a fini une instruction, il passe la suivante. Tant qu'une
instruction n'est pas termine, il attend avant de continuer. Par exemple, une instruction de
saisie va attendre que l'utilisateur rentre une valeur au clavier avant de continuer.
Parfois, il est ncessaire que le processeur n'excute pas toutes les instructions, ou encore
qu'il recommence plusieurs fois les mmes instructions. Pour cela, il faudra casser la
squence. C'est le rle des structures de contrle.
A. Prsentation
L3-M1-M2-INFORMATIQUE-TELECOMS
K. Zabo Les structures de contrle Centre Universitaire Professionnalis
Dans le droulement d'un algorithme, on doit souvent choisir entre deux actions, suivant une
condition concernant la valeur de certaines donnes. La structure alternative va permettre
d'effectuer des choix.
Supposons que nous ayons besoin, dans un programme, d'crire un message prcisant si la
valeur d'une variable, nomme a, est positive ou ngative.
Si la condition n < 0 mentionne aprs le mot Si est vraie, on excute ce qui figure aprs le
mot Alors; si la condition est fausse, on excute ce qui figure aprs le mot Sinon.
Si<condition>
Alors <traitement1>
Sinon <traitement2>
Finsi
Pour une meilleure lisibilit du programme, on dcale le Alors et le Sinon par rapport au Si.
On faire apparatre un trait vertical Si et Finsi.
Pour l'instant cela peut paratre superflu, mais en fait quand les programmes se compliquent,
ces rgles d'criture facilitent grandement leur relecture.
Rappelons que les traitements apparaissant aprs les mots Alors et Sinon peuvent tre
constitus d'une instruction simple, comme dans notre premier exemple, mais aussi d'un
ensemble d'instructions, appel bloc d'instruction.
L3-M1-M2-INFORMATIQUE-TELECOMS
K. Zabo Les structures de contrle Centre Universitaire Professionnalis
Dbut
Si op = "s"
Alors res nb1 + nb2
afficher "la somme est", res bloc n1
Sinon res nb1 * nb2
afficher "le produit est", res
Finsi bloc n2
Fin
Une expression conditionnelle (ou expression logique, ou expression boolenne) est une
expression dont la valeur est soit VRAI soit FAUX. Il existe plusieurs types dexpressions
conditionnelles.
Dans nos deux exemples, les conditions que nous avons rencontr (a < 0) et (op ="s") sont des
conditions simples. Une condition simple est une comparaison de deux expressions de mme
type. (a<0 type entier ou rel, op = "s" type caractre)
Pour les comparaisons de caractres, on utilise l'ordre ASCII, qui respecte lordre
alphabtique. Une lettre place avant une autre dans l'ordre alphabtique sera infrieure
l'autre.
"a" est infrieur "b", mais "s" est suprieur "m".
Attention, une condition simple ne veut pas dire une condition courte. Une condition simple
peut tre la comparaison de deux expressions comme:
(a + b - 3) * c (5 * y 2) / 3
Application
L3-M1-M2-INFORMATIQUE-TELECOMS
K. Zabo Les structures de contrle Centre Universitaire Professionnalis
Supposons que nous voulions afficher la valeur absolue de la diffrence entre deux nombres
entiers. Ces nombres entiers seront nots x et y.
Nous voulons donc afficher x y si x est plus grand que y et y x sinon.
Si x > y
Alors Afficher x y
Sinon Afficher y x
Finsi
Les conditions (ou expressions conditionnelles) peuvent aussi tre complexes, c'est dire
formes de plusieurs conditions simples ou variables boolennes relies entre elles par les
oprateurs logiques et, ou, non.
Exemples:
Si a < 0 et b < 0
Alors
Si (a +3 = b et c < 0) ou (a = c *2 et b c) Alors
Et
Une condition compose de deux conditions simples relies par et est vraie si les deux
conditions sont vraies.
La condition a < 0 et
b<0
est vraie si a < 0 est vraie et si b < 0 est vraie
Ou
Une condition compose de deux conditions simples spares par ou est vraie si au mois l'une
des conditions simples est vraie.
a <0 ou b < 0
est vraie si a < 0 ou si b < 0 ou si a et b sont ngatifs.
Non
Une conditions prcde par non est vraie si la condition simple est fausse et inversement.
non (a < 0) est vraie si a >=0
L'usage des parenthses permet de rgler d'ventuels problmes de priorits des oprateurs
logiques.
L3-M1-M2-INFORMATIQUE-TELECOMS
K. Zabo Les structures de contrle Centre Universitaire Professionnalis
Les variables boolennes, comme les expressions conditionnelles, sont soit vraies, soit
fausses. On peut donc affecter une expression conditionnelle un boolen et on peut aussi
trouver une variable boolenne la place dune expression conditionnelle.
Les variables boolennes et les expressions conditionnelles sont quivalentes. A chaque fois
que lon peut trouver une expression conditionnelle, on peut aussi trouver une variable
boolenne.
Ex :
Ce programme saisit un nombre et affiche si ce nombre est compris dans les intervalles 510
ou 15-20
Si <condition> Alors
<traitement>
Finsi
Exemple:
Dans un programme de calcul d'une facture, on veut effectuer une remise de 1% si le montant
de la facture dpasse 1000F.
Supposons que la variable qui contient le montant de la facture s'appelle mont. On veut crire
l'algorithme qui affiche le montant payer.
Si le montant est infrieur 1000F, on veut juste afficher le montant tel quel. Mais si le
montant est suprieur 1000F, il faut prendre en compte la remise et calculer le nouveau
montant.
5
L3-M1-M2-INFORMATIQUE-TELECOMS
K. Zabo Les structures de contrle Centre Universitaire Professionnalis
Seule la boucle Tant que est fondamentale. Avec cette boucle, on peut raliser toutes
les autres boucles alors que l'inverse n'est pas vrai. La boucle Pour est trs utilise aussi car
elle permet de simplifier la boucle Tantque lorsque le nombre de tour de boucle est connu
davance. La boucle Rpter, trs peu utilise, sera tudie au chapitre suivant.
La boucle Tant que Faire permet de rpter un traitement tant qu'une expression
conditionnelle est vraie. Si d'emble, la condition n'est pas vraie, le traitement ne sera
pas excut. On voit donc que la boucle Tant que a un point commun avec la structure
conditionnelle o si la condition n'est pas vraie, le traitement n'est pas excut.
Syntaxe:
Tant que <condition d'excution> Faire
FinTantque
L3-M1-M2-INFORMATIQUE-TELECOMS
K. Zabo Les structures de contrle Centre Universitaire Professionnalis
Supposons que l'on veuille que l'algorithme calcule le cube des nombres qu'on lui fournit et
que pour arrter, l'utilisateur doive entrer 0.
Si le nombre saisi est 0, on ne veut pas afficher le cube et le traitement est termin. Si le
nombre saisi est diffrent de 0, on affiche son cube et on recommence (on demande d'entrer
un nombre, on le saisit, etc)
On veut donc excuter les instructions dans l'ordre suivant:
saisir un nombre
vrifier la condition d'excution (x 0)
si x vaut 0, on sort de la boucle
sinon on affiche le cube et on attend que l'utilisateur entre un autre nombre
On vrifie la condition d'excution (x 0)
si x vaut 0, on sort de la boucle
sinon on affiche le cube et on attend que l'utilisateur entre un autre nombre
On voit donc qu'aprs la saisie du premier nombre, on rpte les trois dernires instructions.
On va donc pouvoir les inscrire dans une boucle. La condition de continuation (x 0) est
inscrite aprs le tant que. Cette condition est vrifie chaque fois qu'on a termin les
traitements de la boucle.
Programme cube
Var
x : Entier
Dbut
Afficher "Ce programme calcul le cube des nombres que vous entrez. Pour arrter tapez 0."
Afficher "Entrez un nombre"
Saisir x
Tant que x 0 Faire
Afficher "le cube de " , x , " est ", x*x*x
Afficher "Entrez un nombre ou 0 pour arrter"
Saisir x
FinTQ
Afficher "Fin"
Fin
Fonctionnement de ce programme
Il affiche tout d'abord le libell de saisie et attend que l'utilisateur entre un nombre, qui est
alors saisi dans la variable x.
Ensuite, la condition qui suit le Tant que est value. Si l'utilisateur rentre comme premier
nombre 0, la condition est fausse et le corps de la boucle ne sera pas excut et le processeur
continuera la premire instruction suivant le FinTQ (Afficher "Fin"). Si l'utilisateur entre
un nombre diffrent de 0, son cube est calcul et affich et un nouveau nombre est saisi. Au
niveau du FinTQ, le processeur effectue un branchement, c'est dire qu'il n'effectue pas
L3-M1-M2-INFORMATIQUE-TELECOMS
K. Zabo Les structures de contrle Centre Universitaire Professionnalis
L'utilisateur peut calculer autant de cubes qu'il dsire et quand il veut arrter, il lui suffit de
taper 0. On dit que 0 est une valeur drapeau, c'est--dire une valeur qui indique la fin d'un
traitement.
La trace d'un algorithme reprsente la valeur des diffrentes informations d'un programme
durant son excution. Il est vivement conseill d'effectuer la trace d'un algorithme afin de
vrifier qu'il fonctionne.
La premire chose faire est de choisir des donnes sur lesquelles ont va effectuer le test de
l'algorithme. Pour ces donnes, on calcule la main le rsultat attendu. Puis on effectue la
trace et on compare le rsultat attendu avec le rsultat de la trace qui doivent tre les mmes
(sinon, il y a une erreur quelque part)
B. La boucle Pour
La boucle Pour permet de rpter une instruction un nombre connu de fois. Elle a le
formalisme suivant:
L3-M1-M2-INFORMATIQUE-TELECOMS
K. Zabo Les structures de contrle Centre Universitaire Professionnalis
Pour < compteur> de <valeur initiale> jq <valeur finale> [pas de <incrment>] Faire
<traitement>
FinPour
Elle permet de faire la mme chose que la boucle Tant que mais de faon plus rapide, du
moins lorsque le nombre de rptition est connu.
La variable compteur est de type entier. Elle est initialise la valeur initiale. Le compteur
augmente (implicitement) de l'incrment chaque rptition du traitement.
Lorsque la variable compteur vaut la valeur finale, le traitement est excut une dernire
fois puis le programme sort de la boucle.
Par dfaut, lincrment est de 1
Exemple:
Pour x de 1 jq 20 Faire
x x+1 incrmentation
automatique <traitement>
FinPour
Grce une telle structure, le traitement va tre rpte 20 fois. On pourrait faire la mme
chose avec une boucle tant que, mais il faudrait initialiser la variable compteur et
l'incrmenter explicitement.
X 1
Tant que x <= 20 Faire
<traitement>
x x+1
FinTantQue
Application
Affichons la table de multiplication du 7. Pour cela on va utiliser une variable a qui varie de
1 10 et multiplier cette variable par 7 chaque incrmentation. Cette variable va aussi
servir de compteur pour la structure Pour.
Programme multiplication7
Var a:
Entier
Dbut
Pour a de 1 10 pas de 1
Afficher a, " * 7 = ", a * 7
FinPour
Fin
L3-M1-M2-INFORMATIQUE-TELECOMS
K. Zabo Les structures de contrle Centre Universitaire Professionnalis
A. Compter et Accumuler
Reprenons le programme cube. Supposons maintenant que nous ayons besoin de compter
combien de cube ont t calcul. Comment procder ?
Il suffit dutiliser une variable qui va servir de compteur. Avant lentre dans la boucle, le
compteur est mis 0. Ce compteur est incrment de 1 chaque tour de boucle. Pour cela, on
ajoute linstruction compteur compteur + 1 lintrieur de la boucle: Une telle
instruction sappelle incrmentation.
Programme cube
Var
x : Entier
compteur : entier
Dbut
(cf III)
Tant que x 0 Faire
Afficher "le cube de " , x , " est ", x*x*x
compteur compteur + 1
Afficher "Entrez un nombre ou 0 pour arrter"
Saisir x
FinTantque
Afficher Vous avez demand , compteur, cubes Fin
Si on ne veut augmenter le compteur que dans une certaine condition (ici, dans le cas o le
nombre saisi est ngatif), il suffit de placer lincrmentation lintrieur dune
structure conditionnelle.
Programme cube
Var
x : Entier
compteur : entier
Dbut
(cf III)
10
L3-M1-M2-INFORMATIQUE-TELECOMS
K. Zabo Les structures de contrle Centre Universitaire Professionnalis
On peut vouloir compter plusieurs choses simultanment dans la mme boucle. Pour
reprendre notre exemple, nous pourrions vouloir compter les cubes ngatifs mais aussi les
cubes pairs. Dans ce cas, un seul compteur ne suffit plus. Il faut utiliser autant de compteur
que lon a de choses compter.
Programme cube
Var
x : entier
cptneg : entier // compteur des cubes ngatifs
cptpair :entier // compteur des cubes pairs
Dbut
(cf III)
Tant que x 0 Faire
Afficher "le cube de " , x , " est ", x*x*x
Si x<0 Alors
cptneg cptneg + 1
FinSi
Si x*x*x mod 2 = 0 Alors
cptpair cptpair + 1
FinSi
Afficher "Entrez un nombre ou 0 pour arrter"
Saisir x
FinTantque
Afficher Vous avez obtenu , cptnegr, cubes ngatifs, et , cptpair, cubes pairs Fin
4. Calculer le rsultat de xn avec une itration
Dans certains langages, loprateur exposant nexiste pas. Supposons que nous ne pouvons
pas lutiliser en algorithmique. Nous allons crire lalgorithme qui permet de calculer un
nombre un exposant donn. Le nombre x et lexposant n sont saisis.
Rappel :
x1=x
x2= x*x x1*x
x3= x*x*x x2*x
x4= x*x*x*x x3*x
11
L3-M1-M2-INFORMATIQUE-TELECOMS
K. Zabo Les structures de contrle Centre Universitaire Professionnalis
On ne peut pas faire tout dun coup le nombre de multiplication ncessaire car on ne sait pas
combien vaut lexposant au moment d'crire le programme. Le programmeur ne sait pas quel
exposant va taper lutilisateur. Il y a une infinit de possibilits.
Pour contourner cette difficult, on va rpter n fois la multiplication par x dans une boucle.
On utilise la boucle pour car on sait combien de fois on rpte la multiplication : n fois.
Que fait-on du rsultat de la multiplication par x: on laffecte dans une variable rsultat, que
lon va utiliser au tour suivant. Quest-ce quon multiplie par x chaque tour : le rsultat du
tour prcdent.
Et au premier tour ? Il ny a pas encore de rsultat. Il suffit dinitialiser la variable rsultat
avec 1.
Effectuons la trace du morceau dalgorithme gris dans le cas o lutilisateur entre 5 pour x
et 4 pour n.
Nous voulons trouver le plus petit parmi une liste de 100 nombres saisis par lutilisateur.
Comment faire ?
12
L3-M1-M2-INFORMATIQUE-TELECOMS
K. Zabo Les structures de contrle Centre Universitaire Professionnalis
Il est irraliste de dclarer 100 variables et de les comparer toutes une une.
La saisie des nombres de la liste va se faire lintrieur dune boucle laide dune seule
variable.
Pour obtenir le minimum, nous allons utiliser une itration.
A chaque tour de boucle, un nombre supplmentaire est saisi. Si on connat le minimum
parmi tous les prcdents nombre saisis, il suffit de comparer le nouveau nombre ce
minimum pour avoir le nouveau minimum (parmi tous les nombres, y compris le dernier). Si
le nouveau nombre saisi est plus petit que le plus petit des nombres prcdents, alors le
nouveau nombre est le nouveau minimum parmi tous les nombres saisis. Sinon, le minimum
reste le mme.
Avant la premire saisie, il ny a pas de minimum. En fait, lorsquun seul nombre est saisi,
cest forcment lui le minimum. Donc on commence faire la boucle partir du deuxime
lment saisi.
Dbut
Aff Entrez un nombre
Saisir nb min nb //le premier nombre saisi est le minimum des nombres dj saisi
(il est le seul !!)
Pour i de 2 jusqu 100 Faire //pour tous les autres lments du 2 au dernier
Aff entrez un autre nombre
Saisir nb //on le met en mmoire
Si nb < min Alors // si il est plus petit que le minimum trouv au tour prcdent
min nb // cest lui le nouveau minimum parmi les nombre dj saisis
Finsi
Finpour // la sortie de la boucle, min vaut le minimum des 100 nombres saisis
Aff Le minimum des nombres saisis est , min
Fin
13
L3-M1-M2-INFORMATIQUE-TELECOMS
K. Zabo Les structures de contrle Centre Universitaire Professionnalis
Une itration consiste un cheminement d'un tat initial un tat final, celui qui est
recherch. Un tat est reprsent par les valeurs des variables un moment donn. La
progression (le cheminement) vers l'tat recherch se fait en passant par des tats
intermdiaires.
Une boucle permet de progresser d'un tat un autre tat, en se rapprochant de l'tat final.
Lorsque l'tat final est atteint, la boucle doit d'arrter.
tat
initial
Pour "dcouvrir" une itration, il n'y a pas de recette miracle. Il faut utiliser son imagination
et son intelligence.
Nanmoins, la dmarche suivante peut aider trouver une itration pour rsoudre un
problme.
1) Chercher un tat intermdiaire entre l'tat initial et l'tat final (par exemple, pour
le minimum tudi au paragraphe prcdent, l'tat intermdiaire est qu'on a trouv
le minimum des i nombres dj taps). On ne se proccupe pas de la manire dont on
est parvenu cet tat, on suppose que cet tat est atteint
4) Enfin, trouver comment commencer. Il faut trouver un tat initial o toutes les
valeurs sont connues et qui permet de passer un tat intermdiaire. Certaines
variables doivent tre initialises.(dans le cas du minimum, le minimum est connu
quand un seul nombre a t saisi)
14
L3-M1-M2-INFORMATIQUE-TELECOMS
K. Zabo Les structures de contrle Centre Universitaire Professionnalis
Ecrire un algorithme qui demande un nombre lutilisateur, et linforme ensuite si ce nombre est positif ou
ngatif (on laisse de ct le cas o le nombre vaut zro).
Exercice 2.2
Ecrire un algorithme qui demande deux nombres lutilisateur et linforme ensuite si leur produit est ngatif ou
positif (on laisse de ct le cas o le produit est nul). Attention toutefois : on ne doit pas calculer le produit des
deux nombres.
Exercice 2.3
Ecrire un algorithme qui demande trois noms lutilisateur et linforme ensuite sils sont rangs ou non dans
lordre alphabtique.
Exercice 2.4
Ecrire un algorithme qui demande un nombre lutilisateur, et linforme ensuite si ce nombre est positif ou
ngatif (on inclut cette fois le traitement du cas o le nombre vaut zro).
Exercice 2.5
Ecrire un algorithme qui demande deux nombres lutilisateur et linforme ensuite si le produit est ngatif ou
positif (on inclut cette fois le traitement du cas o le produit peut tre nul). Attention toutefois, on ne doit pas
calculer le produit !
Exercice 2.6
Ecrire un algorithme qui demande lge dun enfant lutilisateur. Ensuite, il linforme de sa catgorie :
"Poussin" de 6 7 ans
"Pupille" de 8 9 ans
"Minime" de 10 11 ans
"Cadet" aprs 12 ans Peut-on concevoir plusieurs algorithmes quivalents menant ce rsultat ?
15
L3-M1-M2-INFORMATIQUE-TELECOMS
K. Zabo Les structures de contrle Centre Universitaire Professionnalis
16
L3-M1-M2-INFORMATIQUE-TELECOMS