Vous êtes sur la page 1sur 15

K.

Zabo Algo: Chap 3 Centre Universitaire Professionnalis

Chapitre 3
Les structures de contrle: approfondissements
Nous allons reprendre dans ce chapitre, l'tude des structures de contrle . Dans un
premier temps, nous tudierons d'autres structures que celles que l'on a tudi jusqu'
prsent. Ensuite, nous verrons comment on peut imbriquer les structures de contrle et
par la mme occasion, nous tudierons la programmation descendante.

I. Les diffrentes structures de contrle

A. Un extension de la structure Si:

La structure SelonFaire (de choix)

La structure Selon permet de choisir le traitement effectuer en fonction de la valeur ou


de l'intervalle de valeur d'une variable ou d'une expression. Cette structure permet de
remplacer avantageusement une succession de structures SiAlors.

La syntaxe de cette structure est

Selon expression Faire


valeur 1 de l'expression : traitement 1
valeur 2 de l'expression : traitement 2
valeur 3 de l'expression : traitement 3
[Sinon traitement par dfaut]
Finselon

Exemple1: Les diffrents cas sont des valeurs littrales.

Voil l'algorithme qui affiche le mois en toute lettre selon son numro. Le
numro du mois en mmoris dans la variable mois.

Selon mois Faire


1 : Afficher "Janvier"
2 : Afficher "Fvrier"
3 : Afficher "Mars"
4 : Afficher "Avril"

11: Afficher "Novembre"
12: Afficher "Dcembre"
Sinon Afficher "Un numro de mois doit tre compris entre 1 et 12"
Finselon

L3-M1-M2-INFORMATIQUE-TELECOMS 1
K. Zabo Algo: Chap 3 Centre Universitaire Professionnalis

Exemple 2: Les diffrents cas possibles sont dcrits par des intervalles de valeur (taux
de remise diffrent selon le montant d'achat)

Selon montant Faire


<1000 : taux 1
1000 et < 3000: taux 2
3000 et < 10000: taux 3
10000: taux 4
FinSelon
montant montant * ( 1 taux/100)

B. La boucle RpterJusqu'

Cette boucle sert rpter une instruction jusqu' ce qu'une condition (expression
boolenne) soit vraie. Son formalisme est le suivant:

Rpter
traitement // une instruction simple ou un bloc d'instructions

Jusqu' condition d'arrt

Le traitement est excut, puis la condition est vrifie. Si elle n'est pas vraie, on retourne
au dbut de la boucle et le traitement est rpt. Si la condition est vraie, on sort de la
boucle et le programme continue squentiellement. A chaque fois que le traitement est
excut, la condition d'arrt est de nouveau vrifie la fin.

Exemple:

Programme Aire
Var
rayon : rel
rponse : chane
Dbut
Afficher "Calcul de l'aire d'un cercle"
Rpter
Afficher "Entrez le rayon d'un cercle en cm"
Saisir rayon
Afficher "L'aire de ce cercle est ", rayon*rayon *3.14, "cm"
Afficher "Voulez-vous l'aire d'un autre cercle? (oui/non)"
Saisir rponse
Jusqu' rponse "oui" //si la rponse est diffrente de "oui", la rptition du traitement s'arrte
Afficher "Au revoir!"
Fin

L3-M1-M2-INFORMATIQUE-TELECOMS 2
K. Zabo Algo: Chap 3 Centre Universitaire Professionnalis

La boucle Rpter n'est pas indispensable. Elle peut toujours tre remplace par une
boucle Tantque. C'est pourquoi certains langages n'ont pas d'quivalent pour la boucle
Rpter.
Diffrences entre la boucle Rpter et Tantque

Tant queFaire Rpter Jusqu'


Condition vrifie avant le traitement: Condition vrifie aprs le traitement: le
le traitement peut ne pas tre excut traitement est forcment excut une fois

condition de continuation : condition d'arrt : le traitement est


le traitement est rpt si la condition est rpt si la condition est fausse
vraie

Vrai traitement
test
Faux

traitement test
Faux

Vrai
suite suite

II. L'imbrication des Structures Si


Les structures conditionnelles peuvent tre imbriques (c'est--dire incluses les unes dans
les autres).
Voil un programme qui fait la mme chose que l'exemple 2 sur la structure Selon, mais
utilisant l'imbrication des structures Si.

Programme taux

Var
montant, taux: entiers

Dbut
Si montant < 1000 //(1)
Alors taux 1
Sinon Si montant < 3000 //(2)
Alors taux 2
Sinon Si montant < 10000 //(3)
Alors taux 3
Sinon taux 4
Finsi //(3)
Finsi //(2)
Finsi //(1)
Montant montant - montant * taux/100
Afficher montant
Fin

L3-M1-M2-INFORMATIQUE-TELECOMS 3
K. Zabo Algo: Chap 3 Centre Universitaire Professionnalis

Si le montant est infrieur 1000, la valeur 1 est affecte au taux et le programme passe
l'instruction suivante. Attention, l'instruction suivante n'est pas celle qui suit Sinon.
Si la condition est vrifie, tout ce qui suit le Sinon est ignor, y compris les Si qui sont
imbriqus dans le Sinon. Donc le programme passe l'instruction suivante qui est
montant montant - montant * taux/100

En ce qui concerne la prsentation, nous avons dcal vers la gauche les structures
imbriques. C'est une convention d'criture qu'on retrouve pour toutes les structures, et
qui a pour but de rendre l'algorithme plus lisible.

Les structures imbriques sont embotes telles des poupes russes. Il est
impossible qu'elles se chevauchent.

Cela est valable pour les structures conditionnelles et pour toutes les autres structures.
Dans ce cas, le premier FinSi rencontr dans l'algorithme indique toujours la fin de la
structure la plus imbrique. Il est donc inutile de numroter les structures pour
reconnatre o elles se terminent.

La plupart du temps, la structure Selon va permettre d'viter l'imbrication des structures


Si. Pourtant, il est indispensable de savoir les utiliser pour deux raisons:
- dans le langages C++ et dans d'autres langages, la Structure quivalente Selon
ne permet pas d'utiliser des intervalles de valeur (voir le cours de C++).
- il est parfois impossible d'utiliser la structure Selon, en particulier lorsque les
conditions portent sur plusieurs variables.

III. L'imbrication des boucles


Comme les structures conditionnelles, les boucles peuvent tre imbriques.
Cette partie n'apporte pas de notion nouvelle mais permet de souligner certains aspects
dlicats.

L3-M1-M2-INFORMATIQUE-TELECOMS 4
K. Zabo Algo: Chap 3 Centre Universitaire Professionnalis

Le morceau d'algorithme suivant permet simplement d'afficher 5 toiles. Il n'y a pas


d'imbrication pour l'instant.

Pour i de 1 jusqu' 5 Faire


Afficher "*"
FinPour
Si on inclut cette squence l'intrieur d'une boucle qui se rpte 3 fois, on va effectuer 3
fois l'affichage de 5 toiles donc on va obtenir l'affichage de 15 toiles.
L'imbrication des boucles multiplie les tours de boucles

Pour j de 1 jusqu' 3 Faire


Pour i de 1 jusqu' 5 Faire
Afficher "*"
FinPour ***************
FinPour

Remarque TRES importante:


Lorsque l'on imbrique des boucles, IL FAUT UTILISER DES COMPTEURS
DIFFERENTS pour chaque boucle.

Pour pouvoir afficher 3 lignes de 5 toiles, au lieu de 15 toiles la suite, il suffit d'ajouter
un saut de ligne aprs le Pour le plus imbriqu.

*****
*****
*****

Pour j de 1 jusqu' 3 Faire


Pour i de 1 jusqu' 5 Faire
Afficher "*"
FinPour
Afficher "\n"
FinPour

La boucle la plus imbrique s'excute alors que la "grande" boucle s'excute seulement 3
fois. Le compteur i varie 5 fois plus vite que le compteur j.

Trace
j=1 j=2 j=3
i=1 i=2 i=3 i=4 i=5 i=1 i=2 i=3 i=4 i=5 i=1 i=2 i=3 i=4 i=5
* * * * * * * * * * * * * * *
saut de ligne saut de ligne saut de ligne

Tous les types de boucles peuvent s'imbriquer entre eux. La seule rgle respecter est que
les boucles ne doivent pas se chevaucher: elles doivent s'emboter. Si vous
respectez bien la rgle des dcalages, vous ne pouvez pas vous tromper.

OK IMPOSSIBLE
L3-M1-M2-INFORMATIQUE-TELECOMS 5
K. Zabo Algo: Chap 3 Centre Universitaire Professionnalis

Tantque a > b Faire


Tantque a > b Faire Pour i de 1
Pour i de 1 jusqu' n Faire jusqu' n Faire


FinPour
FinTantque
FinPour

FinTantque

Exemple d'imbrication de boucles diffrentes

Voil un programme qui calcule le chiffre d'affaire annuel d'un reprsentant partir de la
saisie des 12 chiffres d'affaire mensuels. Le programme permet de recommencer le calcul
avec un autre reprsentant si l'utilisateur tape le caractre 'o' (pour oui).

Programme CA
Var
CAM : rel //chiffre d'affaire mensuel
CAA : rel //chiffre d'affaire annuel
mois : entier //compteur de la boucle qui calcule le CA annuel
rponse : caractre
Dbut
Rpter
Afficher "Veuillez entrer les 12 chiffres d'affaire mensuels d'un reprsentant"
CAA 0 //rinitialisation du CA annuel pour chaque reprsentant.
Pour mois de 1 jusqu' 12 Faire
Saisir CAM
CAA CAA + CAM //cumul
FinPour

Afficher "Chiffre d'affaire annuel :" , CAA


Afficher "Voulez-vous calculer le chiffre d'affaire annuel d'un autre reprsentant?"
Saisir rponse
Jusqu' rponse 'o'
Fin

L'imbrication des boucles n'est pas complique si on pense bien dcomposer les
problmes, du gnral au particulier (c'est l'approche descendante). Pour cela, il faut
procder une analyse du problme sans rentrer dans les dtails de l'algorithme. On
rflchit d'abord QUOI faire avant de rflchir COMMENT faire.

Le quoi faire de l'algorithme prcdent pourrait s'exprimer ainsi.

Rpter
calculer le chiffre d'affaire d'un reprsentant et l'afficher
demander l'utilisateur s'il veut continuer
Jusqu' ce qu'il ne rponde pas 'o' (recommencer tant qu'il rpond 'o')

L3-M1-M2-INFORMATIQUE-TELECOMS 6
K. Zabo Algo: Chap 3 Centre Universitaire Professionnalis

A l'issue de cette tape d'analyse, on rflchit au COMMENT. On se rend compte alors que
pour calculer le chiffre d'affaire d'un reprsentant, il faut utiliser une boucle Pour. Cette
boucle vient donc naturellement s'imbriquer dans la boucle Rpter.

Application de la dmarche descendante : les tables de multiplication

On veut crire un algorithme qui calcule et affiche les 10 tables de multiplication (de 1
10).
Chaque table doit tre prsente comme exemple de la table du 7 ci-dessous:
La table du 7 est:
1*7=7
2 * 7 = 14
3 * 7 = 21
4 * 7 = 28
5 * 7 = 35
6 * 7 = 42
7 * 7 = 49
8 * 7 = 56
9 * 7 = 63 10 * 7 = 70

Plutt que d'essayer d'crire immdiatement l'algorithme complet, il est prfrable de faire
une approche descendante du problme. Cela consiste dcomposer le problme en sous-
problmes plus simples rsoudre. Si certains sous-problmes sont dcomposables en
problmes plus petits , on les dcompose encore. Ensuite, chaque sous problme est rsolu
sparment et enfin, ils sont r-assembls pour composer la solution complte.

Dans notre problme, nous constatons qu'il s'agit d'afficher 10 tables de multiplication, le
numro de la table augmentant d'un chaque fois: on va donc utiliser une boucle Pour.

Pour n de 1 jusqu' 10 Faire


afficher la table numro n
FinPour

Le traitement dcrit en italique doit tre prcis.

Pour crire la table des n, on affiche d'abord le libell, puis on utilise une boucle pour
chaque nombre de 1 10.
ATTENTION : n est le numro de la table, donc on ne peut pas l'utiliser comme compteur
dans la boucle des 10 nombres. On va plutt utiliser l comme ligne

Afficher "La table du", n, "est :"


Pour l de 1 jusqu' 10 Faire
Afficher la ligne l de la table n
FinPour

Le traitement dcrit en italique doit encore tre prcis.


Pour afficher une ligne, il suffit d'utiliser l'instruction:
Afficher l, " * ", n, " = ", l *n

L3-M1-M2-INFORMATIQUE-TELECOMS 7
K. Zabo Algo: Chap 3 Centre Universitaire Professionnalis

On va maintenant recomposer le programme entier en ajoutant les dclarations


habituelles:

Programme tables
Var
n: entier //numro de la table l
: entier // ligne de la table
Dbut
Pour n de 1 jusqu' 10 Faire
Afficher "La table du", n, "est :"
Pour l de 1 jusqu' 10 Faire
Afficher l, " * ", n, " = ", l *n
FinPour
FinPour Fin

L3-M1-M2-INFORMATIQUE-TELECOMS 8
K. Zabo Algo: Chap 3 Centre Universitaire Professionnalis

L3-M1-M2-INFORMATIQUE-TELECOMS 9
K. Zabo Algo: Chap 3 Centre Universitaire Professionnalis

PARTIE 3 Enonce des Exercices


Exercice 3.1

Formulez un algorithme quivalent lalgorithme suivant :


Si Tutu > Toto + 4 OU Tata = "OK" Alors
Tutu Tutu + 1 Sinon
Tutu Tutu 1
Finsi

Exercice 3.2

Cet algorithme est destin prdire l'avenir, et il doit tre infaillible !


Il lira au clavier lheure et les minutes, et il affichera lheure quil sera une minute plus tard. Par exemple,
si l'utilisateur tape 21 puis 32, l'algorithme doit rpondre :
"Dans une minute, il sera 21 heure(s) 33".
NB : on suppose que l'utilisateur entre une heure valide. Pas besoin donc de la vrifier.

Exercice 3.3

De mme que le prcdent, cet algorithme doit demander une heure et en afficher une autre. Mais cette
fois, il doit grer galement les secondes, et afficher l'heure qu'il sera une seconde plus tard.

Par exemple, si l'utilisateur tape 21, puis 32, puis 8, l'algorithme doit rpondre : "Dans une seconde, il
sera 21 heure(s), 32 minute(s) et 9 seconde(s)".
NB : l encore, on suppose que l'utilisateur entre une date valide.

Exercice 3.4

Un magasin de reprographie facture 0,10 E les dix premires photocopies, 0,09 E les vingt suivantes et
0,08 E au-del. Ecrivez un algorithme qui demande lutilisateur le nombre de photocopies effectues
et qui affiche la facture correspondante.

Exercice 3.5

Les habitants de Zorglub paient limpt selon les rgles suivantes :

les hommes de plus de 20 ans paient limpt


les femmes paient limpt si elles ont entre 18 et 35 ans
les autres ne paient pas dimpt

Le programme demandera donc lge et le sexe du Zorglubien, et se prononcera donc ensuite sur le fait
que lhabitant est imposable.

Exercice 3.6
Les lections lgislatives, en Guignolerie Septentrionale, obissent la rgle suivante :

lorsque l'un des candidats obtient plus de 50% des suffrages, il est lu ds le premier tour.
L3-M1-M2-INFORMATIQUE-TELECOMS 10
K. Zabo Algo: Chap 3 Centre Universitaire Professionnalis

en cas de deuxime tour, peuvent participer uniquement les candidats ayant obtenu au moins
12,5% des voix au premier tour.

Vous devez crire un algorithme qui permette la saisie des scores de quatre candidats au premier tour.
Cet algorithme traitera ensuite le candidat numro 1 (et uniquement lui) : il dira s'il est lu, battu, s'il
se trouve en ballottage favorable (il participe au second tour en tant arriv en tte l'issue du premier
tour) ou dfavorable (il participe au second tour sans avoir t en tte au premier tour).

Exercice 3.7
Une compagnie d'assurance automobile propose ses clients quatre familles de tarifs identifiables par
une couleur, du moins au plus onreux : tarifs bleu, vert, orange et rouge. Le tarif dpend de la situation
du conducteur :

un conducteur de moins de 25 ans et titulaire du permis depuis moins de deux ans, se voit
attribuer le tarif rouge, si toutefois il n'a jamais t responsable d'accident. Sinon, la
compagnie refuse de l'assurer.
un conducteur de moins de 25 ans et titulaire du permis depuis plus de deux ans, ou de plus de
25 ans mais titulaire du permis depuis moins de deux ans a le droit au tarif orange s'il n'a jamais
provoqu d'accident, au tarif rouge pour un accident, sinon il est refus.
un conducteur de plus de 25 ans titulaire du permis depuis plus de deux ans bnficie du tarif
vert s'il n'est l'origine d'aucun accident et du tarif orange pour un accident, du tarif rouge
pour deux accidents, et refus au-del
De plus, pour encourager la fidlit des clients accepts, la compagnie propose un contrat de la
couleur immdiatement la plus avantageuse s'il est entr dans la maison depuis plus d'un an.

Ecrire l'algorithme permettant de saisir les donnes ncessaires (sans contrle de saisie) et de traiter ce
problme. Avant de se lancer corps perdu dans cet exercice, on pourra rflchir un peu et s'apercevoir
qu'il est plus simple qu'il n'en a l'air (cela s'appelle faire une analyse !)

Exercice 2.14
Ecrivez un algorithme qui a prs avoir demand un numro de jour, de mois et d'anne l'utilisateur,
renvoie s'il s'agit ou non d'une date valide.
Cet exercice est certes dun manque doriginalit affligeant, mais aprs tout, en algorithmique comme
ailleurs, il faut connatre ses classiques ! Et quand on a fait cela une fois dans sa vie, on apprcie
pleinement lexistence dun type numrique date dans certains langages).
Il n'est sans doute pas inutile de rappeler rapidement que le mois de fvrier compte 28 jours, sauf si
lanne est bissextile, auquel cas il en compte 29. Lanne est bissextile si elle est divisible par quatre.
Toutefois, les annes divisibles par 100 ne sont pas bissextiles, mais les annes divisibles par 400 le sont.
Ouf !
Un dernier petit dtail : vous ne savez pas, pour linstant, exprimer correctement en pseudo-code lide
quun nombre A est divisible par un nombre B. Aussi, vous vous contenterez dcrire en bons
tlgraphistes que A divisible par B se dit A dp B .

L3-M1-M2-INFORMATIQUE-TELECOMS 11
K. Zabo Algo: Chap 3 Centre Universitaire Professionnalis

Exercice 3.8

Ecrire un algorithme qui demande lutilisateur un nombre compris entre 1 et 3 jusqu ce que la rponse
convienne.

Exercice 3.9

Ecrire un algorithme qui demande un nombre compris entre 10 et 20, jusqu ce que la rponse convienne.
En cas de rponse suprieure 20, on fera apparatre un message : Plus petit ! , et inversement,
Plus grand ! si le nombre est infrieur 10.

Exercice 3.10

Ecrire un algorithme qui demande un nombre de dpart, et qui ensuite affiche les dix nombres suivants.
Par exemple, si l'utilisateur entre le nombre 17, le programme affichera les nombres de 18

27.

Exercice 3.11

Ecrire un algorithme qui demande un nombre de dpart, et qui ensuite crit la table de multiplication de
ce nombre, prsente comme suit (cas o l'utilisateur entre le nombre 7) :
Table de 7 :
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21

7 x 10 = 70

Exercice 3.12
Ecrire un algorithme qui demande un nombre de dpart, et qui calcule la somme des entiers jusqu ce
nombre. Par exemple, si lon entre 5, le programme doit calculer :
1 + 2 + 3 + 4 + 5 = 15

NB : on souhaite afficher uniquement le rsultat, pas la dcomposition du calcul.

Exercice 3.13
Ecrire un algorithme qui demande un nombre de dpart, et qui calcule sa factorielle.
NB : la factorielle de 8, note 8 !, vaut
1x2x3x4x5x6x7x8

Exercice 3.14
Ecrire un algorithme qui demande successivement 20 nombres lutilisateur, et qui lui dise ensuite quel
tait le plus grand parmi ces 20 nombres :
Entrez le nombre numro 1 : 12
Entrez le nombre numro 2 : 14 etc.
Entrez le nombre numro 20 : 6
Le plus grand de ces nombres est : 14

L3-M1-M2-INFORMATIQUE-TELECOMS 12
K. Zabo Algo: Chap 3 Centre Universitaire Professionnalis

Modifiez ensuite lalgorithme pour que le programme affiche de surcrot en quelle position avait t saisie
ce nombre :
Ctait le nombre numro 2

Exercice 3.15
Rcrire lalgorithme prcdent, mais cette fois-ci on ne connat pas davance combien lutilisateur
souhaite saisir de nombres. La saisie des nombres sarrte lorsque lutilisateur entre un zro.

Exercice 3.16
Lire la suite des prix (en euros entiers et termine par zro) des achats dun client. Calculer la somme
quil doit, lire la somme quil paye, et simuler la remise de la monnaie en affichant les textes "10 Euros",
"5 Euros" et "1 Euro" autant de fois quil y a de coupures de chaque sorte rendre.

Exercice 3.17
crire un algorithme qui permette de connatre ses chances de gagner au tierc, quart, quint et autres
impts volontaires.
On demande lutilisateur le nombre de chevaux partants, et le nombre de chevaux jous. Les deux
messages affichs devront tre :
Dans lordre : une chance sur X de gagner
Dans le dsordre : une chance sur Y de gagner

X et Y nous sont donns par la formule suivante, si n est le nombre de chevaux partants et p le nombre
de chevaux jous (on rappelle que le signe ! signifie "factorielle", comme dans l'exercice 5.6 ci-dessus) :
X = n ! / (n - p) !
Y = n ! / (p ! * (n p) !)

NB : cet algorithme peut tre crit dune manire simple, mais relativement peu performante. Ses
performances peuvent tre singulirement augmentes par une petite astuce. Vous commencerez par
crire la manire la plus simple, puis vous identifierez le problme, et crirez une deuxime version
permettant de le rsoudre.

L3-M1-M2-INFORMATIQUE-TELECOMS 13
K. Zabo Algo: Chap 3 Centre Universitaire Professionnalis

TANT QUE REPETER POUR

TANT QUE <condition d'excution> FAIRE REPETER POUR <variable> DE <valeur intiale> JUSQU'A
<valeur finale> PAS DE
<traitement (corps de la boucle)> <traitement (corps de la boucle)> <incrment> FAIRE

FINTANTQUE JUSQU'A <condition d'arrt> <traitement (corps de la boucle)>

Le corps de la boucle n'est excut que Le corps de la boucle est excut au moins FINPOUR
si la condition est vraie. Il peut ne une fois
jamais tre excut. La valeur de l'expression value dans la Le nombre de fois o la boucle sera
La valeur de l'expression value dans condition d'excution doit devenir vraie excut est connu d'avance
la condition d'excution doit devenir pour sortir de la boucle. <variable> est augmente de l'incrment
fausse pour sortir de la boucle. chaque tour de boucle

Programme exemple
Var Programme exemple
n, cpt :entiers /* n est la valeur pour laquelle la boucle Var Programme exemple
doit s'arrter et cpt est le compteur*/ Var
n, cpt :entier /* n est la valeur pour laquelle la boucle
Dbut doit s'arrter et cpt est le compteur*/ n, cpt :entiers /* n est la valeur pour laquelle la boucle doit
/*initialisations*/ s'arrter et cpt est le compteur*/
Dbut
Saisir n /* initialisations*/ Dbut
cpt 1 Saisir n
/* initialisations*/
/* boucle*/ Saisir n
cpt 0 /*boucle*/
Tantque cpt <= n /*boucle*/
Faire Pour cpt de 1 jq n Faire
Rpter Afficher cpt
Afficher cpt cpt cpt cpt + 1
cpt + 1 Finpour
Afficher cpt Fin
Fintantque Jusqu' cpt = n
Fin Fin

L3-M1-M2-INFORMATIQUE-TELECOMS
K. Zabo Algo: Chap 3 Centre Universitaire Professionnalis

L3-M1-M2-INFORMATIQUE-TELECOMS

Vous aimerez peut-être aussi