Vous êtes sur la page 1sur 31

Fiche 1 : Variables et affectations

Exercice 1.1 Exercice 1.2


Quelles seront les valeurs des variables A et B Quelles seront les valeurs des variables A, B et C
aprs excution des instructions suivantes ? aprs excution des instructions suivantes ?
Variables A, B : Entier Variables A, B, C : Entier
Dbut Dbut
A1 A5
BA+3 B3
A3 CA+B
Fin A2
CBA
Fin

Exercice 1.3 Exercice 1.4


Quelles seront les valeurs des variables A et B Quelles seront les valeurs des variables A, B et C
aprs excution des instructions suivantes ? aprs excution des instructions suivantes ?
Variables A, B : Entier Variables A, B, C : Entier
Dbut Dbut
A5 A3
BA+4 B 10
AA+1 CA+B
BA4 BA+B
Fin AC
Fin

Exercice 1.5
1) Quelles seront les valeurs des variables A et B aprs excution des instructions suivantes ?
Variables A, B : Entier
Dbut
A5
B2
AB
BA
Fin
2) Les deux dernires instructions permettent-elles dchanger les deux valeurs de B et A ?
3) Si lon inverse les deux dernires instructions, cela change-t-il quelque chose ?

Exercice 1.6 Exercice 1.7


Ecrire un algorithme permettant dchanger les Une variante du prcdent : on dispose de trois
valeurs de deux variables A et B. variables A, B et C.
Ecrivez un algorithme transfrant B la valeur de
A, C la valeur de B et A la valeur de C .
CORRECTION

Exercice 1.1 Exercice 1.2


Aprs La valeur des variables est : Aprs La valeur des variables est :
A1 A=1 B=? A5 A=5 B=? C=?
BA+3 A=1 B=4 B3 A=5 B=3 C=?
A3 A = 3 B = 4 CA+B A=5 B=3 C=8
A2 A=2 B=3 C=8
CBA A = 2 B = 3 C = 1

Exercice 1.3 Exercice 1.4


Aprs La valeur des variables est : Aprs La valeur des variables est :
A5 A=5 B=? A3 A=3 B=? C=?
BA+4 A=5 B=9 B 10 A=3 B = 10 C=?
AA+1 A=6 B=9 CA+B A=3 B = 10 C = 13
BA4 A = 6 B = 2 BA+B A=3 B = 13 C = 13
AC A = 13 B = 13 C = 13

Exercice 1.5 Exercice 1.6


Aprs La valeur des variables est : Dbut
A5 A=5 B=?
B2 A=5 B=2 CA
AB A=2 B=2 AB
BA A = 2 B = 2 BC
Les deux dernires instructions ne permettent donc Fin
pas dchanger les deux valeurs de B et A, puisque On est oblig de passer par une variable dite
lune des deux valeurs (celle de A) est ici crase. temporaire (la variable C).
Si lon inverse les deux dernires instructions, cela
ne changera rien du tout, hormis le fait que cette
fois cest la valeur de B qui sera crase.
Partie 2
Lecture et Ecriture
Un programme est un sort jet sur un ordinateur, qui transforme tout texte saisi au clavier en message
derreur. - Anonyme

Un clavier Azerty en vaut deux - Anonyme

1. De quoi parle-t-on ?
Trifouiller des variables en mmoire vive par un chouette programme, cest vrai que cest trs marrant, et
dailleurs on a tous bien rigol au chapitre prcdent. Cela dit, la fin de la foire, on peut tout de mme se
demander quoi a sert.
En effet. Imaginons que nous ayons fait un programme pour calculer le carr dun nombre, mettons 12. Si on a
fait au plus simple, on a crit un truc du genre :
Variable A en Numrique
Dbut
A 12^2
Fin
Dune part, ce programme nous donne le carr de 12. Cest trs gentil lui. Mais si lon veut le carr dun autre
nombre que 12, il faut rcrire le programme. Bof.
Dautre part, le rsultat est indubitablement calcul par la machine. Mais elle le garde soigneusement pour elle,
et le pauvre utilisateur qui fait excuter ce programme, lui, ne saura jamais quel est le carr de 12. Re-bof.
Cest pourquoi, heureusement, il existe des dinstructions pour permettre la machine de dialoguer avec
lutilisateur (et Lyce de Versailles, et ajout lestim Pierre Dac, qui en prcurseur mconnu de
lalgorithmique, affirmait tout aussi profondment que rien ne sert de penser, il faut rflchir avant ).
Dans un sens, ces instructions permettent lutilisateur de rentrer des valeurs au clavier pour quelles soient
utilises par le programme. Cette opration est la lecture.
Dans lautre sens, dautres instructions permettent au programme de communiquer des valeurs lutilisateur en
les affichant lcran. Cette opration est lcriture.
Remarque essentielle : A premire vue, on peut avoir limpression que les informaticiens taient beurrs comme
des petits lus lorsquils ont baptis ces oprations ; puisque quand lutilisateur doit crire au clavier, on appelle
a la lecture, et quand il doit lire sur lcran on appelle lcriture. Mais avant dagonir dinsultes une digne
corporation, il faut rflchir un peu plus loin. Un algorithme, cest une suite dinstructions qui programme la
machine, pas lutilisateur ! Donc quand on dit la machine de lire une valeur, cela implique que lutilisateur va
devoir crire cette valeur. Et quand on demande la machine dcrire une valeur, cest pour que lutilisateur
puisse la lire. Lecture et criture sont donc des termes qui comme toujours en programmation, doivent tre
compris du point de vue de la machine qui sera charge de les excuter. Et l, tout devient parfaitement logique.
Et toc.

Retour Haut de Page


2. Les instructions de lecture et dcriture
Tout btement, pour que lutilisateur entre la (nouvelle) valeur de Titi, on mettra :
Lire Titi
Ds que le programme rencontre une instruction Lire, lexcution sinterrompt, attendant la frappe dune valeur
au clavier
Ds lors, aussitt que la touche Entre (Enter) a t frappe, lexcution reprend. Dans le sens inverse, pour
crire quelque chose lcran, cest aussi simple que :
Ecrire Toto
Avant de Lire une variable, il est trs fortement conseill dcrire des libells lcran, afin de prvenir
lutilisateur de ce quil doit frapper (sinon, le pauvre utilisateur passe son temps se demander ce que
lordinateur attend de lui et cest trs dsagrable !) :
Ecrire "Entrez votre nom : "
Lire NomFamille
Lecture et Ecriture sont des instructions algorithmiques qui ne prsentent pas de difficults particulires, une
fois quon a bien assimil ce problme du sens du dialogue (homme machine, ou machine homme).
Et a y est, vous savez dores et dj sur cette question tout ce quil y a savoir
PARTIE 2
Enonce des Exercices
Exercice 2.1
Quel rsultat produit le programme suivant ?
Variables val, double numriques
Dbut
Val 231
Double Val * 2
Ecrire Val
Ecrire Double
Fin
corrig - retour au cours

Exercice 2.2
Ecrire un programme qui demande un nombre lutilisateur, puis qui calcule et affiche le carr de ce nombre.
corrig - retour au cours

Exercice 2.3
Ecrire un programme qui lit le prix HT dun article, le nombre darticles et le taux de TVA, et qui fournit le prix
total TTC correspondant. Faire en sorte que des libells apparaissent clairement.
corrig - retour au cours

Exercice 2.4
Ecrire un algorithme utilisant des variables de type chane de caractres, et affichant quatre variantes
possibles de la clbre belle marquise, vos beaux yeux me font mourir damour . On ne se soucie pas de la
ponctuation, ni des majuscules.
corrig - retour au cours
PARTIE 2
Corrigs des Exercices
Exercice 2.1
On verra apparatre lcran 231, puis 462 (qui vaut 231 * 2)
nonc - retour au cours

Exercice 2.2
Variables nb, carr en Entier
Dbut
Ecrire "Entrez un nombre :"
Lire nb
carr nb * nb
Ecrire "Son carr est : ", carr
Fin
En fait, on pourrait tout aussi bien conomiser la variable carr en remplaant les deux avant-dernires lignes
par :
Ecrire "Son carr est : ", nb*nb
C'est une question de style ; dans un cas, on privilgie la lisibilit de l'algorithme, dans l'autre, on privilgie
l'conomie d'une variable.
nonc - retour au cours

Exercice 2.3
Variables nb, pht, ttva, pttc en Numrique
Dbut
Ecrire "Entrez le prix hors taxes :"
Lire pht
Ecrire "Entrez le nombre darticles :"
Lire nb
Ecrire "Entrez le taux de TVA :"
Lire ttva
pttc nb * pht * (1 + ttva)
Ecrire "Le prix toutes taxes est : ", pttc
Fin
L aussi, on pourrait squeezer une variable et une ligne en crivant directement. :
Ecrire "Le prix toutes taxes est : ", nb * pht * (1 + ttva)
C'est plus rapide, plus lger en mmoire, mais un peu plus difficile relire (et crire !)
nonc - retour au cours

Exercice 2.4
Variables t1, t2, t3, t4 en Caractre
Dbut
t1 "belle Marquise"
t2 "vos beaux yeux"
t3 "me font mourir"
t4 "damour"
Ecrire t1 & " " & t2 & " " & t3 & " " & t4
Ecrire t3 & " " & t2 & " " & t4 & " " & t1
Ecrire t2 & " " & t3 & " " & t1 & " " & t4
Ecrire t4 & " " & t1 & " " & t2 & " " & t3
Fin
nonc - retour au cours
Partie 3
Les Tests
Il est assez difficile de trouver une erreur dans son code quand on la cherche. Cest encore bien plus dur
quand on est convaincu que le code est juste. - Steve McConnell

Il nexiste pas, et il nexistera jamais, de langage dans lequel il soit un tant soit peu difficile dcrire de
mauvais programmes . - Anonyme

Si le dboguage est lart denlever les bogues, alors la programmation doit tre lart de les crer. - Anonyme

Je vous avais dit que lalgorithmique, cest la combinaison de quatre structures lmentaires. Nous en avons dj
vu deux, voici la troisime. Autrement dit, on a quasiment fini le programme.
Mais non, je rigole.
1. De quoi sagit-il ?
Reprenons le cas de notre programmation algorithmique du touriste gar . Normalement, lalgorithme
ressemblera quelque chose comme : Allez tout droit jusquau prochain carrefour, puis prenez droite et
ensuite la deuxime gauche, et vous y tes .
Mais en cas de doute lgitime de votre part, cela pourrait devenir : Allez tout droit jusquau prochain
carrefour et l regardez droite. Si la rue est autorise la circulation, alors prenez la et ensuite cest la
deuxime gauche. Mais si en revanche elle est en sens interdit, alors continuez jusqu la prochaine droite,
prenez celle-l, et ensuite la premire droite .
Ce deuxime algorithme a ceci de suprieur au premier quil prvoit, en fonction dune situation pouvant se
prsenter de deux faons diffrentes, deux faons diffrentes dagir. Cela suppose que linterlocuteur (le
touriste) sache analyser la condition que nous avons fixe son comportement ( la rue est-elle en sens
interdit ? ) pour effectuer la srie dactions correspondante.
Eh bien, croyez le ou non, mais les ordinateurs possdent cette aptitude, sans laquelle dailleurs nous aurions
bien du mal les programmer. Nous allons donc pouvoir parler notre ordinateur comme notre touriste, et lui
donner des sries dinstructions effectuer selon que la situation se prsente dune manire ou dune autre.
Cette structure logique rpond au doux nom de test. Toutefois, ceux qui tiennent absolument briller en
socit parleront galement de structure alternative.

Retour Haut de Page


2. Structure dun test
Il ny a que deux formes possibles pour un test ; la premire est la plus simple, la seconde la plus complexe.
Si boolen Alors
Instructions
Finsi
Si boolen Alors
Instructions 1
Sinon
Instructions 2
Finsi
Ceci appelle quelques explications.
Un boolen est une expression dont la valeur est VRAI ou FAUX. Cela peut donc tre (il ny a que deux
possibilits) :

une variable (ou une expression) de type boolen


une condition

Nous reviendrons dans quelques instants sur ce quest une condition en informatique.
Toujours est-il que la structure dun test est relativement claire. Dans la forme la plus simple, arriv la
premire ligne (Si Alors) la machine examine la valeur du boolen. Si ce boolen a pour valeur VRAI, elle
excute la srie dinstructions. Cette srie dinstructions peut tre trs brve comme trs longue, cela na
aucune importance. En revanche, dans le cas o le boolen est faux, l'ordinateur saute directement aux
instructions situes aprs le FinSi.
Dans le cas de la structure complte, c'est peine plus compliqu. Dans le cas o le boolen est VRAI, et aprs
avoir excut la srie d'instructions 1, au moment o elle arrive au mot Sinon , la machine saute directement
la premire instruction situe aprs le Finsi . De mme, au cas o le boolen a comme valeur Faux , la
machine saute directement la premire ligne situe aprs le Sinon et excute lensemble des instructions
2 . Dans tous les cas, les instructions situes juste aprs le FinSi seront excutes normalement.
En fait, la forme simplifie correspond au cas o lune des deux branches du Si est vide. Ds lors, plutt
qucrire sinon ne rien faire du tout , il est plus simple de ne rien crire. Et laisser un Si... complet, avec une
des deux branches vides, est considr comme une trs grosse maladresse pour un programmeur, mme si cela
ne constitue pas proprement parler une faute.
Exprim sous forme de pseudo-code, la programmation de notre touriste de tout lheure donnerait donc
quelque chose du genre :
Allez tout droit jusquau prochain carrefour
Si la rue droite est autorise la circulation Alors
Tournez droite
Avancez
Prenez la deuxime gauche
Sinon
Continuez jusqu la prochaine rue droite
Prenez cette rue
Prenez la premire droite
Finsi

Retour Haut de Page


3. Quest ce quune condition ?
Une condition est une comparaison
Cette dfinition est essentielle ! Elle signifie quune condition est compose de trois lments :

une valeur
un oprateur de comparaison
une autre valeur

Les valeurs peuvent tre a priori de nimporte quel type (numriques, caractres). Mais si lon veut que la
comparaison ait un sens, il faut que les deux valeurs de la comparaison soient du mme type !
Les oprateurs de comparaison sont :

gal
diffrent de
strictement plus petit que
strictement plus grand que
plus petit ou gal
plus grand ou gal

Lensemble des trois lments constituant la condition constitue donc, si lon veut, une affirmation, qui a un
moment donn est VRAIE ou FAUSSE.
A noter que ces oprateurs de comparaison peuvent tout fait semployer avec des caractres. Ceux-ci sont
cods par la machine dans lordre alphabtique (rappelez vous le code ASCII vu dans le prambule), les
majuscules tant systmatiquement places avant les minuscules. Ainsi on a :
t < w VRAI
Maman > Papa FAUX
maman > Papa VRAI
Remarque trs importante

En formulant une condition dans un algorithme, il faut se mfier comme de la peste de certains raccourcis du
langage courant, ou de certaines notations valides en mathmatiques, mais qui mnent des non-sens
informatiques. Prenons par exemple la phrase Toto est compris entre 5 et 8 . On peut tre tent de la
traduire par : 5 < Toto < 8
Or, une telle expression, qui a du sens en franais, comme en mathmatiques, ne veut rien dire en
programmation. En effet, elle comprend deux oprateurs de comparaison, soit un de trop, et trois valeurs, soit
l aussi une de trop. On va voir dans un instant comment traduire convenablement une telle condition.
PARTIE 3
Enonce des Exercices
Exercice 3.1
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).
corrig - retour au cours

Exercice 3.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.
corrig - retour au cours

Exercice 3.3
Ecrire un algorithme qui demande trois noms lutilisateur et linforme ensuite sils sont rangs ou non dans
lordre alphabtique.
corrig - retour au cours

Exercice 3.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).
corrig - retour au cours

Exercice 3.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 !
corrig - retour au cours

Exercice 3.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 ?


corrig - retour au cours
PARTIE 3
Corrigs des Exercices
Exercice 3.1
Variable n en Entier
Dbut
Ecrire "Entrez un nombre : "
Lire n
Si n > 0 Alors
Ecrire "Ce nombre est positif
Sinon
Ecrire "Ce nombre est ngatif"
Finsi
Fin
nonc - retour au cours

Exercice 3.2
Variables m, n en Entier
Dbut
Ecrire "Entrez deux nombres : "
Lire m, n
Si (m > 0 ET n > 0) OU (m < 0 ET n < 0) Alors
Ecrire "Leur produit est positif"
Sinon
Ecrire "Leur produit est ngatif"
Finsi
Fin
nonc - retour au cours

Exercice 3.3
Variables a, b, c en Caractre
Dbut
Ecrire "Entrez successivement trois noms : "
Lire a, b, c
Si a < b ET b < c Alors
Ecrire "Ces noms sont classs alphabtiquement"
Sinon
Ecrire "Ces noms ne sont pas classs"
Finsi
Fin
nonc - retour au cours

Exercice 3.4
Variable n en Entier
Dbut
Ecrire "Entrez un nombre : "
Lire n
Si n < 0 Alors
Ecrire "Ce nombre est ngatif"
SinonSi n = 0 Alors
Ecrire "Ce nombre est nul"
Sinon
Ecrire "Ce nombre est positif"
Finsi
Fin
nonc - retour au cours

Exercice 3.5
Variables m, n en Entier
Dbut
Ecrire "Entrez deux nombres : "
Lire m, n
Si m = 0 OU n = 0 Alors
Ecrire "Le produit est nul"
SinonSi (m < 0 ET n < 0) OU (m > 0 ET n > 0) Alors
Ecrire "Le produit est positif"
Sinon
Ecrire "Le produit est ngatif"
Finsi
Fin
Si on souhaite simplifier lcriture de la condition lourde du SinonSi, on peut toujours passer par des variables
boolennes intermdiaires. Une astuce de sioux consiste galement employer un Xor (c'est l'un des rares cas
dans lesquels il est pertinent)
nonc - retour au cours

Exercice 3.6
Variable age en Entier
Dbut
Ecrire "Entrez lge de lenfant : "
Lire age
Si age >= 12 Alors
Ecrire "Catgorie Cadet"
SinonSi age >= 10 Alors
Ecrire "Catgorie Minime"
SinonSi age >= 8 Alors
Ecrire "Catgorie Pupille"
SinonSi age >= 6 Alors
Ecrire "Catgorie Poussin"
Finsi
Fin
On peut videmment crire cet algorithme de diffrentes faons, ne serait-ce quen commenant par la
catgorie la plus jeune.
nonc - retour au cours
Partie 4
Encore de la Logique
La programmation peut tre un plaisir ; de mme que la cryptographie. Toutefois, il faut viter de combiner
les deux. - Kreitzberg et Sneidermann

1. Faut-il mettre un ET ? Faut-il mettre un OU ?


Une remarque pour commencer : dans le cas de conditions composes, les parenthses jouent un rle
fondamental.
Variables A, B, C, D, E en Boolen
Variable X en Entier
Dbut
Lire X
A X > 12
BX>2
CX<6
D (A ET B) OU C
E A ET (B OU C)
Ecrire D, E
Fin
Si X = 3, alors on remarque que D sera VRAI alors que E sera FAUX.
Sil ny a dans une condition que des ET, ou que des OU, en revanche, les parenthses ne changent strictement
rien.
Dans une condition compose employant la fois des oprateurs ET et des oprateurs OU, la prsence de
parenthses possde une influence sur le rsultat, tout comme dans le cas dune expression numrique
comportant des multiplications et des additions.
On en arrive une autre proprit des ET et des OU, bien plus intressante.
Spontanment, on pense souvent que ET et OU sexcluent mutuellement, au sens o un problme donn sexprime
soit avec un ET, soit avec un OU. Pourtant, ce nest pas si vident.
Quand faut-il ouvrir la fentre de la salle ? Uniquement si les conditions limposent, savoir :
Si il fait trop chaud ET il ne pleut pas Alors
Ouvrir la fentre
Sinon
Fermer la fentre
Finsi
Cette petite rgle pourrait tout aussi bien tre formule comme suit :
Si il ne fait pas trop chaud OU il pleut Alors
Fermer la fentre
Sinon
Ouvrir la fentre
Finsi
Ces deux formulations sont strictement quivalentes. Ce qui nous amne la conclusion suivante :
Toute structure de test requrant une condition compose faisant intervenir loprateur ET peut tre exprime
de manire quivalente avec un oprateur OU, et rciproquement.
Ceci est moins surprenant quil ny parat au premier abord. Jetez pour vous en convaincre un il sur les tables
de vrit, et vous noterez la symtrie entre celle du ET et celle du OU. Dans les deux tables, il y a trois cas sur
quatre qui mnent un rsultat, et un sur quatre qui mne au rsultat inverse. Alors, rien dtonnant ce quune
situation qui sexprime avec une des tables (un des oprateurs logiques) puisse tout aussi bien tre exprime
avec lautre table (lautre oprateur logique). Toute lastuce consiste savoir effectuer correctement ce
passage.
Bien sr, on ne peut pas se contenter de remplacer purement et simplement les ET par des OU ; ce serait un peu
facile. La rgle dquivalence est la suivante (on peut la vrifier sur lexemple de la fentre) :
Si A ET B Alors
Instructions 1
Sinon
Instructions 2
Finsi

quivaut :

Si NON A OU NON B Alors


Instructions 2
Sinon
Instructions 1
Finsi

Cette rgle porte le nom de transformation de Morgan, du nom du mathmaticien anglais qui l'a formule.
PARTIE 4
Enonce des Exercices
Exercice 4.1
Formulez un algorithme quivalent lalgorithme suivant :
Si Tutu > Toto + 4 OU Tata = "OK" Alors
Tutu Tutu + 1
Sinon
Tutu Tutu 1
Finsi
corrig - retour au cours

Exercice 4.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.
corrig - retour au cours

Exercice 4.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.
corrig - retour au cours

Exercice 4.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.
corrig - retour au cours

Exercice 4.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.
corrig - retour au cours

Exercice 4.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.
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).
corrig - retour au cours

Exercice 4.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 !)
corrig - retour au cours

Exercice 4.8
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 .
corrig - retour au cours
PARTIE 4
Corrigs des Exercices
Exercice 4.1
Aucune difficult, il suffit dappliquer la rgle de la transformation du OU en ET vue en cours (loi de Morgan).
Attention toutefois la rigueur dans la transformation des conditions en leur contraire...
Si Tutu <= Toto + 4 ET Tata <> "OK" Alors
Tutu Tutu - 1
Sinon
Tutu Tutu + 1
Finsi
nonc - retour au cours

Exercice 4.2
Variables h, m en Numrique
Dbut
Ecrire "Entrez les heures, puis les minutes : "
Lire h, m
mm+1
Si m = 60 Alors
m0
hh+1
FinSi
Si h = 24 Alors
h0
FinSi
Ecrire "Dans une minute il sera ", h, "heure(s) ", m, "minute(s)"
Fin
nonc - retour au cours

Exercice 4.3
Variables h, m, s en Numrique
Dbut
Ecrire "Entrez les heures, puis les minutes, puis les secondes : "
Lire h, m, s
ss+1
Si s = 60 Alors
s0
mm+1
FinSi
Si m = 60 Alors
m0
hh+1
FinSi
Si h = 24 Alors
h0
FinSi
Ecrire "Dans une seconde il sera ", h, "h", m, "m et ", s, "s"
Fin
nonc - retour au cours

Exercice 4.4
Variables n, p en Numrique
Dbut
Ecrire "Nombre de photocopies : "
Lire n
Si n <= 10 Alors
p n * 0,1
SinonSi n <= 30 Alors
p 10 * 0,1 + (n 10) * 0,09
Sinon
p 10 * 0,1 + 20 * 0,09 + (n 30) * 0,08
FinSi
Ecrire "Le prix total est: ", p
Fin
nonc - retour au cours

Exercice 4.5
Variable sex en Caractre
Variable age en Numrique
Variables C1, C2 en Boolen
Dbut
Ecrire "Entrez le sexe (M/F) : "
Lire sex
Ecrire "Entrez lge: "
Lire age
C1 sex = "M" ET age > 20
C2 sex = "F" ET (age > 18 ET age < 35)
Si C1 ou C2 Alors
Ecrire "Imposable"
Sinon
Ecrire "Non Imposable"
FinSi
Fin
nonc - retour au cours

Exercice 4.6
Cet exercice, du pur point de vue algorithmique, n'est pas trs mchant. En revanche, il reprsente dignement la
catgorie des noncs pigs.
En effet, rien de plus facile que d'crire : si le candidat a plus de 50%, il est lu, sinon s'il a plus de 12,5 %, il
est au deuxime tour, sinon il est limin. H h h... mais il ne faut pas oublier que le candidat peut trs bien
avoir eu 20 % mais tre tout de mme limin, tout simplement parce que l'un des autres a fait plus de 50 % et
donc qu'il n'y a pas de deuxime tour !...
Moralit : ne jamais se jeter sur la programmation avant d'avoir soigneusement men l'analyse du problme
traiter.
Variables A, B, C, D en Numrique
Variables C1, C2, C3, C4 en Boolen
Dbut
Ecrire "Entrez les scores des quatre prtendants :"
Lire A, B, C, D
C1 A > 50
C2 B > 50 ou C > 50 ou D > 50
C3 A >= B et A >= C et A >= D
C4 A >= 12,5
Si C1 Alors
Ecrire Elu au premier tour"
Sinonsi C2 ou Non(C4) Alors
Ecrire Battu, limin, sorti !!!
SinonSi C3 Alors
Ecrire "Ballotage favorable"
Sinon
Ecrire "Ballotage dfavorable"
FinSi
Fin
nonc - retour au cours
Exercice 4.7
L encore, on illustre l'utilit d'une bonne analyse. Je propose deux corrigs diffrents. Le premier suit
l'nonc pas pas. C'est juste, mais c'est vraiment lourd. La deuxime version s'appuie sur une vraie
comprhension d'une situation pas si embrouille qu'elle n'en a l'air.
Dans les deux cas, un recours aux variables boolennes are srieusement l'criture.
Donc, premier corrig, on suit le texte de l'nonc pas pas :
Variables age, perm, acc, assur en Numrique
Variables C1, C2, C3 en Boolen
Variable situ en Caractre
Dbut
Ecrire "Entrez lge: "
Lire age
Ecrire "Entrez le nombre d'annes de permis: "
Lire perm
Ecrire "Entrez le nombre d'accidents: "
Lire acc
Ecrire "Entrez le nombre d'annes d'assurance: "
Lire assur
C1 age >= 25
C2 perm >= 2
C3 assur > 1
Si Non(C1) et Non(C2) Alors
Si acc = 0 Alors
situ "Rouge"
Sinon
situ "Refus"
FinSi
Sinonsi ((Non(C1) et C2) ou (C1 et Non(C2)) Alors
Si acc = 0 Alors
situ "Orange"
SinonSi acc = 1 Alors
situ "Rouge"
Sinon
situ "Refus"
FinSi
Sinon
Si acc = 0 Alors
situ "Vert"
SinonSi acc = 1 Alors
situ "Orange"
SinonSi acc = 2 Alors
situ "Rouge"
Sinon
situ "Refus"
FinSi
FinSi
Si C3 Alors
Si situ = "Rouge" Alors
situ "Orange"
SinonSi situ = "Orange" Alors
situ "Orange"
SinonSi situ = "Vert" Alors
situ "Bleu"
FinSi
FinSi
Ecrire "Votre situation : ", situ
Fin
Vous trouvez cela compliqu ? Oh, certes oui, a l'est ! Et d'autant plus qu'en lisant entre les lignes, on pouvait
s'apercevoir que ce galimatias de tarifs recouvre en fait une logique trs simple : un systme points. Et il
suffit de comptabiliser les points pour que tout s'claire... Reprenons juste aprs l'affectation des trois
variables boolennes C1, C2, et C3. On crit :
P0
Si Non(C1) Alors
PP+1
FinSi
Si Non(C2) Alors
PP+1
FinSi
P P + acc
Si P < 3 et C3 Alors
PP-1
FinSi
Si P = -1 Alors
situ "Bleu"
SinonSi P = 0 Alors
situ "Vert"
SinonSi P = 1 Alors
situ "Orange"
SinonSi P = 2 Alors
situ "Rouge"
Sinon
situ "Refus"
FinSi
Ecrire "Votre situation : ", situ
Fin
Cool, non ?
nonc - retour au cours

Exercice 4.8
En ce qui concerne le dbut de cet algorithme, il ny a aucune difficult. Cest de la saisie bte et mme pas
mchante:
Variables J, M, A, JMax en Numrique
Variables VJ, VM, B en Booleen
Dbut
Ecrire "Entrez le numro du jour"
Lire J
Ecrire "Entrez le numro du mois"
Lire M
Ecrire "Entrez l'anne"
Lire A
C'est videmment ensuite que les ennuis commencent La premire manire d'aborder la chose consiste se
dire que fondamentalement, la structure logique de ce problme est trs simple. Si nous crons deux variables
boolennes VJ et VM, reprsentant respectivement la validit du jour et du mois entrs, la fin de l'algorithme
sera d'une simplicit biblique (lanne est valide par dfinition, si on vacue le dbat byzantin concernant
lexistence de lanne zro) :
Si VJ et VM alors
Ecrire "La date est valide"
Sinon
Ecrire "La date n'est pas valide"
FinSi
Toute la difficult consiste affecter correctement les variables VJ et VM, selon les valeurs des variables J,
M et A. Dans l'absolu, VJ et VM pourraient tre les objets d'une affectation monstrueuse, avec des conditions
atrocement composes. Mais franchement, crire ces conditions en une seule fois est un travail de bndictin
sans grand intrt. Pour viter d'en arriver une telle extrmit, on peut srier la difficult en crant deux
variables supplmentaires :

B : variable boolenne qui indique s'il s'agit d'une anne bissextile


JMax : variable numrique qui indiquera le dernier jour valable pour le mois entr.

Avec tout cela, on peut y aller et en ressortir vivant.


On commence par initialiser nos variables boolennes, puis on traite les annes, puis les mois, puis les jours.
On note "dp" la condition "divisible par" :
B A dp 400 ou (non(A dp 100) et A dp 4)
Jmax 0
VM M >= 1 et M =< 12
Si VM Alors
Si M = 2 et B Alors
JMax 29
SinonSi M = 2 Alors
JMax 28
SinonSi M = 4 ou M = 6 ou M = 9 ou M = 11 Alors
JMax 30
Sinon
JMax 31
FinSi
VJ J >= 1 et J =< Jmax
FinSi
Cette solution a le mrite de ne pas trop compliquer la structure des tests, et notamment de ne pas rpter
l'criture finale l'cran. Les variables boolennes intermdiaires nous pargnent des conditions composes
trop lourdes, mais celles-ci restent nanmoins srieuses.

Une approche diffrente consisterait limiter les conditions composes, quitte le payer par une structure
beaucoup plus exigeante de tests imbriqus. L encore, on vite de jouer les extrmistes et l'on s'autorise
quelques conditions composes lorsque cela nous simplifie l'existence. On pourrait aussi dire que la solution
prcdente "part de la fin" du problme (la date est elle valide ou non ?), alors que celle qui suit "part du dbut"
(quelles sont les donnes entres au clavier ?) :
Si M < 1 ou M > 12 Alors
Ecrire "Date Invalide"
SinonSi M = 2 Alors
Si A dp 400 Alors
Si J < 1 ou J > 29 Alors
Ecrire "Date Invalide"
Sinon
Ecrire "Date Valide"
FinSi
SinonSi A dp 100 Alors
Si J < 1 ou J > 28 Alors
Ecrire "Date Invalide"
Sinon
Ecrire "Date Valide"
FinSi
SinonSi A dp 4 Alors
Si J < 1 ou J > 29Alors
Ecrire "Date Invalide"
Sinon
Ecrire "Date Valide"
FinSi
Sinon
Si J < 1 ou J > 28 Alors
Ecrire "Date Invalide"
Sinon
Ecrire "Date Valide"
FinSi
FinSi
SinonSi M = 4 ou M = 6 ou M = 9 ou M = 11 Alors
Si J < 1 ou J > 30 Alors
Ecrire "Date Invalide"
Sinon
Ecrire "Date Valide"
FinSi
Sinon
Si J < 1 ou J > 31 Alors
Ecrire "Date Invalide"
Sinon
Ecrire "Date Valide"
FinSi
FinSi
On voit que dans ce cas, l'alternative finale (Date valide ou invalide) se trouve rpte un grand nombre de fois.
Ce n'est en soi ni une bonne, ni une mauvaise chose. C'est simplement une question de choix stylistique.
Personnellement, j'avoue prfrer assez nettement la premire solution, qui fait ressortir beaucoup plus
clairement la structure logique du problme (il n'y a qu'une seule alternative, autant que cette alternative ne
soit crite qu'une seule fois).

Il convient enfin de citer une solution trs simple et lgante, un peu plus difficile peut-tre imaginer du
premier coup, mais qui avec le recul apparat comme trs immdiate. Sur le fond, cela consiste dire qu'il y a
quatre cas pour qu'une date soit valide : celui d'un jour compris entre 1 et 31 dans un mois 31 jours, celui d'un
jour compris entre 1 et 30 dans un mois 30 jours, celui d'un jour compris entre 1 et 29 en fvrier d'une anne
bissextile, et celui d'un jour de fvrier compris entre 1 et 28. Ainsi :
B (A dp 4 et Non(A dp 100)) ou A dp 400
K1 (m=1 ou m=3 ou m=5 ou m=7 ou m=8 ou m=10 ou m=12) et (J>=1 et J=<31)
K2 (m=4 ou m=6 ou m=9 ou m=11) et (J>=1 et J=<30)
K3 m=2 et B et J>=1 et J=<29
K4 m=2 et J>=1 et J=<28
Si K1 ou K2 ou K3 ou K4 Alors
Ecrire "Date valide"
Sinon
Ecrire "Date non valide"
FinSi
Fin
Tout est alors rgl avec quelques variables boolennes et quelques conditions composes, en un minimum de
lignes de code.
La morale de ce long exercice - et non moins long corrig, c'est qu'un problme de test un peu compliqu admet
une pliade de solutions justes...
...Mais que certaines sont plus astucieuses que d'autres !
nonc - retour au cours
Partie 5
Les Boucles
Les premiers 90% du code prennent les premiers 90% du temps de dveloppement. Les 10% restants prennent
les autres 90% du temps de dveloppement - Tom Cargill

Et a y est, on y est, on est arrivs, la voil, cest Broadway, la quatrime et dernire structure : a est les
boucles. Si vous voulez pater vos amis, vous pouvez galement parler de structures rptitives, voire
carrment de structures itratives. Ca calme, hein ? Bon, vous faites ce que vous voulez, ici on est entre nous,
on parlera de boucles.
Les boucles, c'est gnralement le point douloureux de l'apprenti programmeur. C'est l que a coince, car
autant il est assez facile de comprendre comment fonctionnent les boucles, autant il est souvent long d'acqurir
les rflexes qui permettent de les laborer judicieusement pour traiter un problme donn.
On peut dire en fait que les boucles constituent la seule vraie structure logique caractristique de la
programmation. Si vous avez utilis un tableur comme Excel, par exemple, vous avez sans doute pu manier des
choses quivalentes aux variables (les cellules, les formules) et aux tests (la fonction SI). Mais les boucles, a,
a n'a aucun quivalent. Cela n'existe que dans les langages de programmation proprement dits.
Le maniement des boucles, s'il ne diffrencie certes pas l'homme de la bte (il ne faut tout de mme pas
exagrer), est tout de mme ce qui spare en informatique le programmeur de l'utilisateur, mme averti.
Alors, vos futures et invitables - difficults sur le sujet, il y a trois remdes : de la rigueur, de la patience,
et encore de la rigueur !
1. A quoi cela sert-il donc ?
Prenons le cas dune saisie au clavier (une lecture), o par exemple, le programme pose une question laquelle
lutilisateur doit rpondre par O (Oui) ou N (Non). Mais tt ou tard, lutilisateur, factieux ou maladroit, risque
de taper autre chose que la rponse attendue. Ds lors, le programme peut planter soit par une erreur
dexcution (parce que le type de rponse ne correspond pas au type de la variable attendu) soit par une erreur
fonctionnelle (il se droule normalement jusquau bout, mais en produisant des rsultats fantaisistes).
Alors, dans tout programme un tant soit peu srieux, on met en place ce quon appelle un contrle de saisie, afin
de vrifier que les donnes entres au clavier correspondent bien celles attendues par lalgorithme.
A vue de nez, on pourrait essayer avec un SI. Voyons voir ce que a donne :
Variable Rep en Caractre
Dbut
Ecrire "Voulez vous un caf ? (O/N)"
Lire Rep
Si Rep <> "O" et Rep <> "N" Alors
Ecrire "Saisie erronne. Recommencez"
Lire Rep
FinSi
Fin
Cest impeccable. Du moins tant que lutilisateur a le bon got de ne se tromper quune seule fois, et dentrer une
valeur correcte la deuxime demande. Si lon veut galement btonner en cas de deuxime erreur, il faudrait
rajouter un SI. Et ainsi de suite, on peut rajouter des centaines de SI, et crire un algorithme aussi lourd
quune blague des Grosses Ttes, on nen sortira pas, il y aura toujours moyen quun acharn flanque le
programme par terre.
La solution consistant aligner des SI en pagaille est donc une impasse. La seule issue est donc de flanquer une
structure de boucle, qui se prsente ainsi :
TantQue boolen

Instructions

FinTantQue
Le principe est simple : le programme arrive sur la ligne du TantQue. Il examine alors la valeur du boolen (qui,
je le rappelle, peut tre une variable boolenne ou, plus frquemment, une condition). Si cette valeur est VRAI,
le programme excute les instructions qui suivent, jusqu ce quil rencontre la ligne FinTantQue. Il retourne
ensuite sur la ligne du TantQue, procde au mme examen, et ainsi de suite. Le mange enchant ne sarrte que
lorsque le boolen prend la valeur FAUX.
Illustration avec notre problme de contrle de saisie. Une premire approximation de la solution consiste
crire :
Variable Rep en Caractre
Dbut
Ecrire "Voulez vous un caf ? (O/N)"
TantQue Rep <> "O" et Rep <> "N"
Lire Rep
FinTantQue
Fin
L, on a le squelette de lalgorithme correct. Mais de mme quun squelette ne suffit pas pour avoir un tre
vivant viable, il va nous falloir ajouter quelques muscles et organes sur cet algorithme pour quil fonctionne
correctement.
Son principal dfaut est de provoquer une erreur chaque excution. En effet, lexpression boolenne qui figure
aprs le TantQue interroge la valeur de la variable Rep. Malheureusement, cette variable, si elle a t dclare,
na pas t affecte avant lentre dans la boucle. On teste donc une variable qui na pas de valeur, ce qui
provoque une erreur et larrt immdiat de lexcution. Pour viter ceci, on na pas le choix : il faut que la
variable Rep ait dj t affecte avant quon en arrive au premier tour de boucle. Pour cela, on peut faire une
premire lecture de Rep avant la boucle. Dans ce cas, celle-ci ne servira quen cas de mauvaise saisie lors de
cette premire lecture. Lalgorithme devient alors :
Variable Rep en Caractre
Dbut
Ecrire "Voulez vous un caf ? (O/N)"
Lire Rep
TantQue Rep <> "O" et Rep <> "N"
Lire Rep
FinTantQue
Fin
Une autre possibilit, frquemment employe, consiste ne pas lire, mais affecter arbitrairement la variable
avant la boucle. Arbitrairement ? Pas tout fait, puisque cette affectation doit avoir pour rsultat de
provoquer lentre obligatoire dans la boucle. Laffectation doit donc faire en sorte que le boolen soit mis
VRAI pour dclencher le premier tour de la boucle. Dans notre exemple, on peut donc affecter Rep avec
nimporte quelle valeur, hormis O et N : car dans ce cas, lexcution sauterait la boucle, et Rep ne serait
pas du tout lue au clavier. Cela donnera par exemple :
Variable Rep en Caractre
Dbut
Rep "X"
Ecrire "Voulez vous un caf ? (O/N)"
TantQue Rep <> "O" et Rep <> "N"
Lire Rep
FinTantQue
Fin
Cette manire de procder est connatre, car elle est employe trs frquemment.
Il faut remarquer que les deux solutions (lecture initiale de Rep en dehors de la boucle ou affectation de Rep)
rendent toutes deux lalgorithme satisfaisant, mais prsentent une diffrence assez importante dans leur
structure logique.
En effet, si lon choisit deffectuer une lecture pralable de Rep, la boucle ultrieure sera excute uniquement
dans lhypothse dune mauvaise saisie initiale. Si lutilisateur saisit une valeur correcte la premire demande
de Rep, lalgorithme passera sur la boucle sans entrer dedans.
En revanche, avec la deuxime solution (celle dune affectation pralable de Rep), lentre de la boucle est
force, et lexcution de celle-ci, au moins une fois, est rendue obligatoire chaque excution du programme. Du
point de vue de lutilisateur, cette diffrence est tout fait mineure ; et la limite, il ne la remarquera mme
pas. Mais du point de vue du programmeur, il importe de bien comprendre que les cheminements des instructions
ne seront pas les mmes dans un cas et dans lautre.
Pour terminer, remarquons que nous pourrions peaufiner nos solutions en ajoutant des affichages de libells qui
font encore un peu dfaut. Ainsi, si lon est un programmeur zl, la premire solution (celle qui inclut deux
lectures de Rep, une en dehors de la boucle, lautre lintrieur) pourrait devenir :
Variable Rep en Caractre
Dbut
Ecrire "Voulez vous un caf ? (O/N)"
Lire Rep
TantQue Rep <> "O" et Rep <> "N"
Ecrire "Vous devez rpondre par O ou N. Recommencez"
Lire Rep
FinTantQue
Ecrire "Saisie accepte"
Fin
Quant la deuxime solution, elle pourra devenir :
Variable Rep en Caractre
Dbut
Rep "X"
Ecrire "Voulez vous un caf ? (O/N)"
TantQue Rep <> "O" et Rep <> "N"
Lire Rep
Si Rep <> "O" et Rep <> "N" Alors
Ecrire "Saisie Errone, Recommencez"
FinSi
FinTantQue
Fin
Le Gag De La Journe
Cest dcrire une structure TantQue dans laquelle le boolen nest jamais VRAI. Le programme ne rentre alors
jamais dans la superbe boucle sur laquelle vous avez tant su !
Mais la faute symtrique est au moins aussi dsopilante.
Elle consiste crire une boucle dans laquelle le boolen ne devient jamais FAUX. Lordinateur tourne alors dans
la boucle comme un drat et nen sort plus. Seule solution, quitter le programme avec un dmonte-pneu ou un
bton de dynamite. La boucle infinie est une des hantises les plus redoutes des programmeurs. Cest un peu
comme le verre baveur, le poil gratter ou le bleu de mthylne : cest cul, mais a fait toujours rire.
Cette faute de programmation grossire mais frquente - ne manquera pas dgayer lambiance collective de
cette formation et accessoirement dtancher la soif proverbiale de vos enseignants.
Bon, eh bien vous allez pouvoir faire de chouettes algorithmes, dj rien quavec a
Exercice 5.1
Exercice 5.2
Exercice 5.3

Retour Haut de Page


2. Boucler en comptant, ou compter en bouclant
Dans le dernier exercice, vous avez remarqu quune boucle pouvait tre utilise pour augmenter la valeur dune
variable. Cette utilisation des boucles est trs frquente, et dans ce cas, il arrive trs souvent quon ait besoin
deffectuer un nombre dtermin de passages. Or, a priori, notre structure TantQue ne sait pas lavance
combien de tours de boucle elle va effectuer (puisque le nombre de tours dpend de la valeur dun boolen).
Cest pourquoi une autre structure de boucle est notre disposition :
Variable Truc en Entier
Dbut
Truc 0
TantQue Truc < 15
Truc Truc + 1
Ecrire "Passage numro : ", Truc
FinTantQue
Fin
Equivaut :
Variable Truc en Entier
Dbut
Pour Truc 1 15
Ecrire "Passage numro : ", Truc
Truc Suivant
Fin
Insistons : la structure Pour Suivant nest pas du tout indispensable ; on pourrait fort bien programmer
toutes les situations de boucle uniquement avec un Tant Que . Le seul intrt du Pour est dpargner un
peu de fatigue au programmeur, en lui vitant de grer lui-mme la progression de la variable qui lui sert de
compteur (on parle dincrmentation, encore un mot qui fera forte impression sur votre entourage).
Dit dune autre manire, la structure Pour Suivant est un cas particulier de TantQue : celui o le
programmeur peut dnombrer lavance le nombre de tours de boucles ncessaires.
Il faut noter que dans une structure Pour Suivant , la progression du compteur est laisse votre libre
disposition. Dans la plupart des cas, on a besoin dune variable qui augmente de 1 chaque tour de boucle. On ne
prcise alors rien linstruction Pour ; celle-ci, par dfaut, comprend quil va falloir procder cette
incrmentation de 1 chaque passage, en commenant par la premire valeur et en terminant par la deuxime.
Mais si vous souhaitez une progression plus spciale, de 2 en 2, ou de 3 en 3, ou en arrire, de 1 en 1, ou de 10
en 10, ce nest pas un problme : il suffira de le prciser votre instruction Pour en lui rajoutant le mot
Pas et la valeur de ce pas (Le pas dont nous parlons, cest le pas du marcheur, step en anglais).
Naturellement, quand on stipule un pas ngatif dans une boucle, la valeur initiale du compteur doit tre
suprieure sa valeur finale si lon veut que la boucle tourne ! Dans le cas contraire, on aura simplement crit
une boucle dans laquelle le programme ne rentrera jamais.
Nous pouvons donc maintenant donner la formulation gnrale dune structure Pour . Sa syntaxe gnrale
est :
Pour Compteur Initial Final Pas ValeurDuPas

Instructions

Compteur suivant
Les structures TantQue sont employes dans les situations o lon doit procder un traitement systmatique
sur les lments dun ensemble dont on ne connat pas davance la quantit, comme par exemple :

le contrle dune saisie


la gestion des tours dun jeu (tant que la partie nest pas finie, on recommence)
la lecture des enregistrements dun fichier de taille inconnue(cf. Partie 9)

Les structures Pour sont employes dans les situations o lon doit procder un traitement systmatique sur
les lments dun ensemble dont le programmeur connat davance la quantit.
Nous verrons dans les chapitres suivants des sries dlments appels tableaux (parties 7 et 8) et chanes de
caractres (partie 9). Selon les cas, le balayage systmatique des lments de ces sries pourra tre effectu
par un Pour ou par un TantQue : tout dpend si la quantit dlments balayer (donc le nombre de tours de
boucles ncessaires) peut tre dnombre lavance par le programmeur ou non.

Retour Haut de Page


3. Des boucles dans des boucles
( tout est dans tout... et rciproquement )
On rigole, on rigole !
De mme que les poupes russes contiennent dautres poupes russes, de mme quune structure SI ALORS
peut contenir dautres structures SI ALORS, une boucle peut tout fait contenir dautres boucles. Y a pas de
raison.
Variables Truc, Trac en Entier
Dbut
Pour Truc 1 15
Ecrire "Il est pass par ici"
Pour Trac 1 6
Ecrire "Il repassera par l"
Trac Suivant
Truc Suivant
Fin
Dans cet exemple, le programme crira une fois "il est pass par ici" puis six fois de suite "il repassera par l",
et ceci quinze fois en tout. A la fin, il y aura donc eu 15 x 6 = 90 passages dans la deuxime boucle (celle du
milieu), donc 90 critures lcran du message il repassera par l . Notez la diffrence marquante avec cette
structure :
Variables Truc, Trac en Entier
Dbut
Pour Truc 1 15
Ecrire "Il est pass par ici"
Truc Suivant
Pour Trac 1 6
Ecrire "Il repassera par l"
Trac Suivant
Fin
Ici, il y aura quinze critures conscutives de "il est pass par ici", puis six critures conscutives de "il
repassera par l", et ce sera tout.
Des boucles peuvent donc tre imbriques (cas n1) ou successives (cas n2). Cependant, elles ne peuvent jamais,
au grand jamais, tre croises. Cela naurait aucun sens logique, et de plus, bien peu de langages vous
autoriseraient ne serait-ce qu crire cette structure aberrante.
Variables Truc, Trac en Entier
Pour Truc
instructions
Pour Trac
instructions
Truc Suivant
instructions
Trac Suivant
Pourquoi imbriquer des boucles ? Pour la mme raison quon imbrique des tests. La traduction en bon franais
dun test, cest un cas . Eh bien un cas (par exemple, est-ce un homme ou une femme ? ) peut trs bien
se subdiviser en dautres cas ( a-t-il plus ou moins de 18 ans ? ).
De mme, une boucle, cest un traitement systmatique, un examen dune srie dlments un par un (par
exemple, prenons tous les employs de lentreprise un par un ). Eh bien, on peut imaginer que pour chaque
lment ainsi considr (pour chaque employ), on doive procder un examen systmatique dautre chose
( prenons chacune des commandes que cet employ a traites ). Voil un exemple typique de boucles
imbriques : on devra programmer une boucle principale (celle qui prend les employs un par un) et lintrieur,
une boucle secondaire (celle qui prend les commandes de cet employ une par une).
Dans la pratique de la programmation, la matrise des boucles imbriques est ncessaire, mme si elle nest pas
suffisante. Tout le contraire dAlain Delon, en quelque sorte.

Retour Haut de Page


4. Et encore une btise ne pas faire !
Examinons lalgorithme suivant :
Variable Truc en Entier
Dbut
Pour Truc 1 15
Truc Truc * 2
Ecrire "Passage numro : ", Truc
Truc Suivant
Fin
Vous remarquerez que nous faisons ici grer en double la variable Truc, ces deux gestions tant
contradictoires. Dune part, la ligne
Pour
augmente la valeur de Truc de 1 chaque passage. Dautre part la ligne
Truc Truc * 2
double la valeur de Truc chaque passage. Il va sans dire que de telles manipulations perturbent compltement
le droulement normal de la boucle, et sont causes, sinon de plantages, tout au moins dexcutions erratiques.
Le Gag De La Journe
Il consiste donc manipuler, au sein dune boucle Pour, la variable qui sert de compteur cette boucle. Cette
technique est proscrire absolument sauf bien sr, si vous cherchez un prtexte pour rgaler tout le monde
au bistrot.
Mais dans ce cas, nayez aucune inhibition, proposez-le directement, pas besoin de prtexte.
PARTIE 5
Enonce des Exercices
Exercice 5.1
Ecrire un algorithme qui demande lutilisateur un nombre compris entre 1 et 3 jusqu ce que la rponse
convienne.
corrig - retour au cours

Exercice 5.2
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.
corrig - retour au cours

Exercice 5.3
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.
corrig - retour au cours

Exercice 5.4
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 :
7x1=7
7 x 2 = 14
7 x 3 = 21

7 x 10 = 70
corrig - retour au cours

Exercice 5.5
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.
corrig - retour au cours

Exercice 5.6
Ecrire un algorithme qui demande un nombre de dpart, et qui calcule sa factorielle.
NB : la factorielle de 8, note 8 !, vaut
1x2x3x4x5x6x7x8
corrig - retour au cours

Exercice 5.7
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
Modifiez ensuite lalgorithme pour que le programme affiche de surcrot en quelle position avait t saisie ce
nombre :
Ctait le nombre numro 2
corrig - retour au cours

Exercice 5.8
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.
corrig - retour au cours

Exercice 5.9
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.
corrig - retour au cours

Exercice 5.10
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.
PARTIE 5
Corrigs des Exercices
Exercice 5.1
Variable N en Entier
Debut
N0
Ecrire "Entrez un nombre entre 1 et 3"
TantQue N < 1 ou N > 3
Lire N
Si N < 1 ou N > 3 Alors
Ecrire "Saisie errone. Recommencez
FinSi
FinTantQue
Fin
nonc - retour au cours

Exercice 5.2
Variable N en Entier
Debut
N0
Ecrire "Entrez un nombre entre 10 et 20"
TantQue N < 10 ou N > 20
Lire N
Si N < 10 Alors
Ecrire "Plus grand !"
SinonSi N > 20 Alors
Ecrire "Plus petit !"
FinSi
FinTantQue
Fin
nonc - retour au cours

Exercice 5.3
Variables N, i en Entier
Debut
Ecrire "Entrez un nombre : "
Lire N
Ecrire "Les 10 nombres suivants sont : "
Pour i N + 1 N + 10
Ecrire i
i Suivant
Fin
nonc - retour au cours

Exercice 5.4
Variables N, i en Entier
Debut
Ecrire "Entrez un nombre : "
Lire N
Ecrire "La table de multiplication de ce nombre est : "
Pour i 1 10
Ecrire N, " x ", i, " = ", n*i
i Suivant
Fin
nonc - retour au cours

Exercice 5.5
Variables N, i, Som en Entier
Debut
Ecrire "Entrez un nombre : "
Lire N
Som 0
Pour i 1 N
Som Som + i
i Suivant
Ecrire "La somme est : ", Som
Fin
nonc - retour au cours
Exercice 5.6
Variables N, i, F en Entier
Debut
Ecrire "Entrez un nombre : "
Lire N
F1
Pour i 2 N
FF*i
i Suivant
Ecrire "La factorielle est : ", F
Fin
nonc - retour au cours

Exercice 5.7
Variables N, i, PG en Entier
Debut
PG 0
Pour i 1 20
Ecrire "Entrez un nombre : "
Lire N
Si i = 1 ou N > PG Alors
PG N
FinSi
i Suivant
Ecrire "Le nombre le plus grand tait : ", PG
Fin
En ligne 3, on peut mettre nimporte quoi dans PG, il suffit que cette variable soit affecte pour que le premier
passage en ligne 7 ne provoque pas d'erreur.

Pour la version amliore, cela donne :


Variables N, i, PG, IPG en Entier
Debut
PG 0
Pour i 1 20
Ecrire "Entrez un nombre : "
Lire N
Si i = 1 ou N > PG Alors
PG N
IPG i
FinSi
i Suivant
Ecrire "Le nombre le plus grand tait : ", PG
Ecrire "Il a t saisi en position numro ", IPG
Fin
nonc - retour au cours

Exercice 5.8
Variables N, i, PG, IPG en Entier
Debut
N1
i0
PG 0
TantQue N <> 0
Ecrire "Entrez un nombre : "
Lire N
ii+1
Si i = 1 ou N > PG Alors
PG N
IPG i
FinSi
FinTantQue
Ecrire "Le nombre le plus grand tait : ", PG
Ecrire "Il a t saisi en position numro ", IPG
Fin
nonc - retour au cours

Exercice 5.9
Variables E, somdue, M, Reste, Nb10E, Nb5E En Entier
Debut
E1
somdue 0
TantQue E <> 0
Ecrire "Entrez le montant : "
Lire E
somdue somdue + E
FinTantQue
Ecrire "Vous devez :", somdue, " euros"
Ecrire "Montant vers :"
Lire M
Reste M - somdue
Nb10E 0
TantQue Reste >= 10
Nb10E Nb10E + 1
Reste Reste 10
FinTantQue
Nb5E 0
Si Reste >= 5
Nb5E 1
Reste Reste 5
FinSi
Ecrire "Rendu de la monnaie :"
Ecrire "Billets de 10 E : ", Nb10E
Ecrire "Billets de 5 E : ", Nb5E
Ecrire "Pices de 1 E : ", reste
Fin
nonc - retour au cours

Exercice 5.10
Spontanment, on est tent d'crire l'algorithme suivant :
Variables N, P, i, Num, Dno1, Dno2 en Entier
Debut Ecrire "Entrez le nombre de chevaux partants : "
Lire N
Ecrire "Entrez le nombre de chevaux jous : "
Lire P
Num 1
Pour i 2 N
Num Num * i
i Suivant
Dno1 1
Pour i 2 N-P
Dno1 Dno1 * i
i Suivant
Dno2 1
Pour i 2 P
Dno2 Dno2 * i
i Suivant
Ecrire "Dans lordre, une chance sur ", Num / Dno1
Ecrire "Dans le dsordre, une sur ", Num / (Dno1 * Dno2)
Fin
Cette version, formellement juste, comporte tout de mme deux faiblesses.

La premire, et la plus grave, concerne la manire dont elle calcule le rsultat final. Celui-ci est le quotient d'un
nombre par un autre ; or, ces nombres auront rapidement tendance tre trs grands. En calculant, comme on le
fait ici, d'abord le numrateur, puis ensuite le dnominateur, on prend le risque de demander la machine de
stocker des nombres trop grands pour qu'elle soit capable de les coder (cf. le prambule). C'est d'autant plus
bte que rien ne nous oblige procder ainsi : on n'est pas oblig de passer par la division de deux trs grands
nombres pour obtenir le rsultat voulu.

La deuxime remarque est qu'on a programm ici trois boucles successives. Or, en y regardant bien, on peut voir
qu'aprs simplification de la formule, ces trois boucles comportent le mme nombre de tours ! (si vous ne me
croyez pas, crivez un exemple de calcul et biffez les nombres identiques au numrateur et au dnominateur).
Ce triple calcul (ces trois boucles) peut donc tre ramen(es) un(e) seul(e). Et voil le travail, qui est non
seulement bien plus court, mais aussi plus performant :
Variables N, P, i, A, B en Numrique
Debut
Ecrire "Entrez le nombre de chevaux partants : "
Lire N
Ecrire "Entrez le nombre de chevaux jous : "
Lire P
A1
B1
Pour i 1 P
A A * (i + N - P)
BB*i
i Suivant
Ecrire "Dans lordre, une chance sur ", A
Ecrire "Dans le dsordre, une chance sur ", A / B
Fin
nonc - retour au cours