Algo1 Apad 2012 s1 Cours Algo Corrige
Algo1 Apad 2012 s1 Cours Algo Corrige
Algo1 Apad 2012 s1 Cours Algo Corrige
3 Variables 5
3.1 Quest ce quune variable ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.2 Dfinition dune variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4 Types fondamentaux 7
4.1 Les entiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
4.2 Les rels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
4.3 Les boolens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
4.4 Les caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4.5 Les chanes de caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5 Constantes 10
6 Expressions 10
7 Instructions dentre/sorties 12
7.1 Opration dentre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
7.2 Opration de sortie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
8 Affectation 14
9 Structures de contrle 16
9.1 Enchanement squentiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
9.2 Instructions conditionnelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
9.2.1 Conditionnelle Si ... Alors ... FinSi . . . . . . . . . . . . . . . . . 17
9.2.2 Conditionnelle Si ... Alors ... Sinon ... FinSi . . . . . . . . . . 19
9.2.3 La clause SinonSi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
9.2.4 Conditionnelle Selon . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
9.3 Instructions de rptitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
9.3.1 Rptition TantQue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
9.3.2 Rptition Rpter ... Jusqu . . . . . . . . . . . . . . . . . . . . . . . 28
9.3.3 Rptition Pour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
9.3.4 Quelle rptition choisir ? . . . . . . . . . . . . . . . . . . . . . . . . . 31
13 Dbut
14 -- Saisir le rayon
15 crire("Rayon = ")
16 Lire(rayon)
17
18 -- Calculer le primtre
19 primtre <- 2 * PI * rayon -- par dfinition
20 { primtre = 2 * PI * rayon }
21
22 -- Afficher le primtre
23 crire("Le primtre est : ", primtre)
24 Fin
2.3 Identificateurs
Les entits qui apparaissent (le programme, les variables, les constantes, les types, les sous-
programmes, etc.) doivent avoir un nom. Ce nom permet lordinateur de les distinguer et aux
hommes de les comprendre et de les dsigner. Les noms ainsi donns sont appels identifica-
teurs. Un identificateur commence par une lettre ou un soulign (_) et se continue par un nombre
quelconque de lettres, chiffres ou souligns.
2.4 Commentaires
Notre langage algorithmique propose deux types de commentaires, lun introduit par deux
tirets et qui se termine la fin de la ligne et lautre dlimit par des accolades. Nous donnerons
une signification particulire ces deux types de commentaires :
Les commentaires introduits par deux tirets seront utiliss pour faire apparatre les raffi-
nages, donc la structure de lalgorithme, dans lalgorithme lui-mme. Les commentaires
prcdent et sont aligns avec les instructions quils dcrivent.
Ils peuvent tre galement utiliss pour expliquer ce qui a t fait. Dans ce cas, ils sont
placs la fin de la ligne et ont un rle de justification. Ils sont galement utiliss pour
expliquer le rle dune variable ou dune constante, etc.
Les commentaires entre accolades seront utiliss pour mettre en vidence une proprit sur
ltat du programme. Ces commentaires contiennent en gnral une expression boolenne
qui doit tre vraie cet endroit du programme.
Dans lexemple du calcul du primtre dun cercle (listing 1), nous trouvons ces diffrents
types de commentaires :
le premier commentaire explique lobjectif du programme (R0) ;
les commentaires saisir le rayon , calculer le primtre et afficher le primtre
correspondent aux tapes identifies lors du raffinage ;
les commentaires le rayon du cercle lu au clavier et le primtre du cercle expliquent
le rle de la variable ;
le commentaire { primtre = 2 * PI * rayon } indique qu ce moment du programme,
la valeur de la variable primtre est la mme que celle de lexpression 2 * PI * rayon.
3 Variables
3.1 Quest ce quune variable ?
Un algorithme est fait pour rsoudre un ensemble de problmes semblables (cf dfinition
du terme algorithmique dans le petit Robert). Par exemple, un logiciel qui gre la facturation
dune entreprise doit connatre les noms et adresses des clients, les produits commands, etc. Ces
informations ne peuvent pas tre devines par le programme et doivent donc tre saisies par les
utilisateurs. Ces informations sont appeles donnes en entre. Elles proviennent de lextrieur
du programme et sont utilises dans le programme.
Inversement, le programme effectue des oprations, des calculs dont les rsultats devront tre
transmis aux utilisateurs. Par exemple, le total dune facture est calcule comme la somme de
tous les produits commands en multipliant le nombre darticles par leur prix unitaire ; le total
des ventes pour une priode donne est obtenu en faisant la somme des montants des factures,
etc. Ces informations seront affiches lcran, imprimes, stockes dans des bases de donnes,
etc. Ce sont des informations qui sortent du programme. On les appelle donnes en sortie.
Le programmeur, pour dcrire son algorithme utilise des variables pour reprsenter les don-
nes manipules par un programme. Ce peut tre les donnes en entre, les donnes en sortie
mais galement les donnes rsultant de calculs intermdiaires. Ainsi, pour calculer le montant
dune ligne dune facture, le programmeur expliquera que le montant est obtenu en multipliant
le prix unitaire par la quantit darticles commands. Il utilisera donc trois variables :
prix_unitaire, le prix unitaire de larticle ;
quantit, la quantit darticles command ;
et montant, le montant de la ligne du bon de commande.
sa valeur : La variable contient une information qui peut varier au cours de lexcution
dun programme. Cest cette information que lon appelle valeur de la variable. La valeur
dune variable doit correspondre au type de la variable. Ainsi, une variable quantit de
type entier pourra prendre successivement les valeurs de 10, 25 et 3.
La valeur dune variable nexiste que lorsque le programme est excut. Les autres infor-
mations (nom, rle et type) sont dfinies lors de la conception du programme, pendant la con-
struction de lalgorithme. Le rle, le nom et le type sont des informations statiques qui doivent
tre prcises lors de la dclaration de la variable. En revanche, la valeur est une information
dynamique qui changera au cours de lexcution du programme.
Rgle : Une variable doit toujours tre initialise avant dtre utilise.
Dfinition : Une variable est un nom dsignant symboliquement un emplacement mmoire typ
auquel est associ une valeur courante. Cette valeur peut tre accde 1 (expressions, section 6)
ou modifie (affectation, section 8).
Attention : Le nom dune variable doit tre significatif : il doit suggrer, si possible sans am-
bigut, la donne reprsente par cette variable.
Rgle : En gnral, ds quon identifie une variable, il faut mettre un commentaire qui explique
ce quelle reprsente et le rle quelle joue dans lalgorithme.
Lensemble de variables et leur description constitue le dictionnaire des donnes.
4 Types fondamentaux
Dfinition : Un type caractrise les valeurs que peut prendre une variable. Il dfinit galement
les oprations, gnralement appeles oprateurs, qui pourront tre appliques sur les donnes
de ce type.
On appelle types fondamentaux les types qui sont dfinis dans notre langage algorithme par
opposition aux types structurs (tableaux, enregistrements et types numrs) qui doivent tre
dfinis par le programmeur.
Intrts : Les types ont deux intrts principaux :
Permettre de vrifier automatiquement (par le compilateur) la cohrence de certaines opra-
tions. Par exemple, une valeur dfinie comme entire ne pourra par recevoir une valeur
chane de caractres.
Connatre la place ncessaire pour stocker la valeur de la variable. Ceci est gr par le
compilateur du langage de programmation considr et est en gnral transparent pour le
programmeur.
Oprateur : chaque type est associ un ensemble doprations (ou oprateurs).
Oprateurs de comparaison : Tous les types prsents dans cette partie sont munis des opra-
tions de comparaison suivantes : <, >, <=, >=, = et <>.
Les oprateurs de comparaison sont des oprateurs valeur boolenne (cf type boolen, sec-
tion 4.3).
1. Le verbe lire est parfois utilis en informatique pour indiquer que lon accde la valeur de la variable.
Il ne faut pas confondre ce lire avec linstruction dentre/sortie de mme nom et qui permet dinitialiser une
variable partir dune valeur lue sur priphrique dentre tel que le clavier. Il ne faut donc pas confondre les deux
sens de lire : accder la valeur dune variable et saisir la valeur dune variable .
Attention : Tous les types manipuls par une machine sont discrets et borns. Ces limites dpen-
dent du langage de programmation et/ou de la machine cible considrs. Aussi, nous nen tien-
drons pas compte ici. Il faut cependant garder lesprit que toute entit manipule est ncessaire-
ment borne.
Les oprations sont : +, -, *, Div (division entire), Mod (reste de la division entire) et Abs
(valeur absolue)
- et + peuvent tre unaires ou binaires.
1 10 Mod 3 -- 1 (le reste de la division entire de 10 par 3)
2 10 Div 3 -- 3 (le quotient de la division entire de 10 par 3)
3 1 Div 2 -- 0 (le quotient de la division entire de 1 par 2)
4 Abs(-5) -- 5 (lentier est mis entre parenthses (cf sous-programmes))
Lois de De Morgan : Les lois de De Morgan sont particulirement importantes connatre (cf
structures de contrle, section 9).
Il est prfrable dutiliser A et Non A. Les deux autres formulations, si elles ne sont pas fausses,
sont des plonasmes !
Remarque : On considre que les lettres majuscules, les lettres minuscules et les chiffres se
suivent. Ainsi, pour savoir si un variable c de type caractre correspond un chiffre, il suffit
dvaluer lexpression (c >= 0) Et (c <= 9).
Oprations :
Ord : Permet de convertir un caractre en entier.
Chr : Permet de convertir un entier en caractre.
Pour tout c: Caractre on a Chr(Ord(c)) = c.
Remarque : Nous verrons plus en dtail les chanes de caractres lorsque nous traiterons de la
structure de donnes tableau .
Attention : Il ne faut pas confondre le nom dune variable et une constante chane de caractres !
5 Constantes
Certaines informations manipules par un programme ne changent jamais. Cest par exemple
la cas de la valeur de , du nombre maximum dtudiants dans une promotion, etc.
Ces donnes ne sont donc pas variables mais constantes. Plutt que de mettre explicitement
leur valeur dans le texte du programme (constantes littrales), il est prfrable de leur donner un
nom symbolique (et significatif). On parle alors de constantes (symboliques).
1 PI = 3.1415 -- Valeur de PI
2 MAJORIT = 18 -- ge correspondant la majorit
3 TVA = 19.6 -- Taux de TVA en vigueur au 15/09/2000 (en %)
4 CAPACIT = 120 -- Nombre maximum dtudiants dans une promotion
5 INTITUL = "Algorithmique et programmation" -- par exemple
peut tre considre comme une constante absolue. Son utilisation permet essentiellement
de gagner en clart et lisibilit. Les constantes MAJORIT, TVA, CAPACIT, etc. sont utilises
pour paramtrer le programme. Ces quantits ne peuvent pas changer au cours de lexcution
dun programme. Toutefois, si un changement doit tre ralis (par exemple, la prcision de PI
utilise nest pas suffisante), il suffit de changer la valeur de la constante symbolique dans sa
dfinition (et de recompiler le programme) pour que la modification soit prise en compte dans le
reste de lalgorithme. 2
Question : Quel est lintrt dune constante symbolique ?
Solution : Au moins les deux explications ci-dessus.
6 Expressions
Dfinition : Une expression est quelque chose qui a une valeur. Ainsi, en fonction de ce
quon a vu jusqu prsent, une expression est une constante, une variable ou toute combinaison
dexpressions en utilisant les oprateurs arithmtiques, les oprateurs de comparaison ou les
oprateurs logiques.
Exemple : Voici quelques exemples de valeurs relles :
1 10.0 -- une constante litrale
2 PI -- une constante symbolique
3 rayon -- une variable de type rel
4 2*rayon -- loprateur * appliqu sur 2 et rayon
5 2*PI*rayon -- une expression mlant oprateurs, constantes et variables
6 rayon >= 0 -- expression avec un oprateur de comparaison
Attention : Pour quune expression soit acceptable, il est ncessaire que les types des oprandes
dun oprateur soient compatibles. Par exemple, faire laddition dun entier et dun boolen na
pas de sens. De mme, on ne peut appliquer les oprateurs logiques que sur des expressions
boolennes.
Quelques rgles sur la compatibilit :
Deux types gaux sont compatibles.
2. Ceci suppose darrter le programme, de le recompiler et de lexcuter nouveau.
On peut ensuite prendre comme rgle : le type A est compatible avec le type B si et
seulement si le passage dun type A un type B se fait sans perte dinformation. En
dautres termes, tout lment du type A a un correspondant dans le type B. Par exemple,
Entier est compatible avec Rel mais linverse est faux.
Si lon crit n + x avec n entier et x rel, alors il y a coertion : lentier n est converti en
un rel puis laddition est ralise sur les rels, le rsultat tant bien sr rel.
Rgle dvaluation dune expression : Une expression est value en fonction de la priorit
des oprateurs qui la composent, en commenant par ceux de priorit plus forte. priorit gale,
les oprateurs sont valus de gauche droite.
Voici les oprateurs rangs par priorit dcroissante 3 :
. (accs un champ) la priorit la plus forte
+, -, Non (unaires)
*, /, Div, Mod, Et
+, -, Ou
<, >, <=, >=, = et <> priorit la plus faible
Il est toujours possible de mettre des parenthses pour modifier les priorit.
1 prix_ht * (1 + tva) -- prix_ttc
Solution :
1 (2 + (x * 3)) -- ok si x Entier (ou Rel)
2 (((- x) + (3 * y)) <= (10 + 3)) -- ok si x et y Entier (ou Rel)
3 ((x = (0 Ou y)) = 0) -- incorrecte car 0 non boolen
Solution :
3. Attention, nous donnons ici les priorits du pseudo-langage. Si la priorit des oprateurs arithmtiques est la
mme quelque soit le langage, il nen va de mme pour les oprateurs de comparaison.
1 a, b, nb : Entier
2 rep, R, C : Caractre
3 termine, trouve : Boolen
Remarque : Les fonctions que nous verrons par la suite sont galement des expressions. Elles
sont assimilables des oprateurs dfinis par le programmeur.
Exemple : Les expressions boolennes.
Une expression boolenne peut tre constitue par :
une constante boolenne (VRAI ou FAUX) ;
une variable boolenne ;
une comparaison entre deux expressions de mme type (=, 6=, <, >, , ) ;
la composition de une ou deux expressions boolennes relies par un oprateur boolen
(Et, Ou, Non).
7 Instructions dentre/sorties
Le point de rfrence est le programme. Ainsi les informations dentre sont les informa-
tions produites lextrieur du programme et qui rentrent dans le programme (saisie clavier par
exemple), les informations de sortie sont labores par le programme et transmises lextrieur
(lcran par exemple).
Lire(var)
crire(expr)
Variantes : Nous utiliserons une variante EcrireLn(expr) qui ajoute un saut de ligne sur le
priphrique de sortie aprs avoir affich la valeur de lexpression.
Remarque : Lire et crire sont deux instructions qui peuvent prendre en paramtre nim-
porte quel type fondamental. Si la variable est entire, Lire lit un entier, si cest une chane de
caractres, alors cest une chane de caractres qui est saisie. On dit que Lire et crire sont
polymorphes.
Exercice 5 : Cube dun rel
crire un programme qui affiche le cube dun nombre rel saisi au clavier.
Solution :
1 R0 : Afficher le cube dun nombre rel
2
3 Tests :
4 0 -> 0
5 1 -> 1
6 2 -> 8
7 -2 -> -8
8 1.1 -> 1,331
9
10 R1 : Raffinage De Afficher le cube dun nombre rel
11 | Saisir un nombre rel x: out Rel
12 | Afficher le cube de x x: in Rel
13
14 R2 : Raffinage De Afficher le cube de x
15 | crire(x * x * x)
8 Affectation
Dfinition : Laffectation permet de modifier la valeur associe une variable.
1 var <- expr
Solution :
La variable n prend pour valeurs successives : 5, la valeur saisie par lutilisateur du pro-
gramme, 10 et enfin 11.
Aprs ces affectations les valeurs respectives de n et c sont 11 et c.
Exercice 7 : Permuter deux caractres
crire un programme qui permute la valeur de deux variables c1 et c2 de type caractre.
Solution : Le principe est dutiliser une variable intermdiaire (tout comme on utilise un r-
cipient intermdiaire si lon veut changer le contenu de deux bouteilles). On en dduit donc
lalgorithme suivant :
1 Variable
2 c1, c2: Caractre -- les deux caractres permuter
3 tmp: Caractre -- notre intermdiaire
4 Dbut
5 -- initialiser c1 et c2
6 ...
7
8 -- permuter c1 et c2
9 tmp <- c1
10 c1 <- c2
11 c2 <- tmp
12
13 { les valeurs de c1 et c2 ont t permutes }
14
15 ...
16 Fin
20 Fin
9 Structures de contrle
Dans un langage impratif, on peut dfinir ltat dun programme en cours dexcution par
deux choses :
lensemble des valeurs des variables du programme ;
linstruction qui doit tre excute.
Lexcution dun programme est alors une squence daffectations qui font passer dun tat
initial (les valeurs des variables sont indtermines) un tat final considr comme le rsultat.
Les structures de contrle dcrivent comment les affectations senchanent squentiellement.
Elles dfinissent dont le transfert du contrle aprs la fin de lexcution dune instruction.
Remarque : Ceci tait avant ralis en utilisant des goto , instruction qui a t banni en 1970
avec la naissance de la programmation structure.
En programmation structure, le transfert de contrle sexprime par :
1. enchanement squentiel (une instruction puis la suivante) ;
2. traitements conditionnels ;
3. traitements rptitifs (itratifs) ;
4. appel dun sous-programme (un autre programme qui ralise un traitement particulier).
Pour chacune des structures de contrle prsentes ci-aprs, sont donnes la syntaxe de la
structure dans notre langage algorithmique, les rgles respecter (en particulier pour le typage),
la smantique (cest--dire la manire dont elle doit tre comprise et donc interprte), des ex-
emples ou exercices but illustratifs.
Exemple :
1 tmp <- a -- premire instruction
2 a <- b -- deuxime instruction
3 b <- tmp -- troisime instruction
Question : Quand utilisera-t-on cette squence de trois instructions ? Que permet-elle de faire ?
Solution : Quand on veut permuter les valeurs des deux variables a et b.
Remarque : On utilise parfois le terme dinstruction compose.
1 Si condition Alors
2 squence -- une squence dinstructions
3 FinSi
vrai
condition
faux squence
11
12 R2 : Raffinage De Afficher le verdict de parit
13 | Si n est paire Alors
14 | | crire("paire")
15 | FinSi
16
17 R3 : Raffinage De n est paire
18 | Rsultat <- n Mod 2 = 0
Dans le raffinage prcdent un point est noter. Il sagit du raffinage R2 qui dcompose
Afficher le verdict de parit . Nous navons pas directement mis la formule n Mod 2 = 0 .
Lintrt est que la formulation n est paire est plus facile comprendre. Avec la formule,
il faut dabord comprendre la formule, puis en dduire sa signification. n est paire nous
indique ce qui nous intresse comme information (facile lire et comprendre) et son raffinage
(R3) explique comment on dtermine si n est paire. Le lecteur peut alors vrifier la formule en
sachant ce quelle est sense reprsenter.
Raffiner est quelque chose de compliquer car on a souvent tendance descendre trop vite
dans les dtails de la solution sans sarrter sur les tapes intermdiaires du raffinage alors que
ce sont elles qui permettent dexpliquer et de donner du sens la solution.
Dans cet exercice, vous vous tes peut-tre pos la question : mais comment sait-on que
n est paire . Si vous avez trouv la solution vous avez peut-re donne directement la formule
alors que le point cl est la question. Il faut la conserver dans lexpression de votre algorithme
ou programme, donc en faire une tape du raffinage.
Si vous arrivez sur une tape que vous avez du mal dcrire, ce sera toujours une indication
dune tape qui doit apparatre dans le raffinage. Cependant, mme pour quelque chose de simple,
que vous savez faire directement, il faut tre capable de donner les tapes intermdiaires qui
conduisent vers et expliquent la solution propose. Ceci fait partie de lactivit de construction
dun programme ou algorithme.
Remarque : Il est gnralement conseill dviter de mlanger traitement et entres/sorties.
Cest pourtant ce qui a t fait ci-dessus. On aurait pu crire le premier niveau de raffinage
diffremment en faisant.
1 R1 : Raffinage De Afficher ...
2 | Saisir la valeur entire n: out Entier
3 | Dterminer la parit de n n: in ; paire: out Boolen
4 | Afficher le verdict de parit paire: in Boolen
5
6 R2 : Raffinage De Dterminer la parit de n
7 | parit <- (n Mod 2) = 0
8
9 R2 : Raffinage De Afficher le verdict de parit
10 | Si paire Alors
11 | | crire("paire")
12 | FinSi
On constate ici que la variable intermdiaire paire permet davoir un programme plus
lisible car on a donn un nom la quantit (n Mod 2) = 0.
1 Si condition Alors
2 squence1 -- squence excute ssi condition est VRAI
3 Sinon { Non condition }
4 squence2 -- squence excute ssi condition est FAUX
5 FinSi
valuation : Si la condition est vraie, cest squence1 qui est excute, sinon cest squence2 .
Dans les deux cas, aprs lexcution de la squence, linstruction suivante excuter est celle qui
suit le FinSi.
Remarque : Il est recommand de faire apparatre sous forme de commentaire la condition
associe la partie Sinon.
Organigramme :
vrai faux
condition
squence1 squence2
4
5 Variable
6 x1, x2: Rel -- les deux rels saisis au clavier
7 max: Rel -- le plus grand de x1 et x2
8
9 Dbut
10 -- Saisir les deux rels
11 Lire(x1, x2)
12
13 -- Dterminer le maximum
14 Si x1 > x2 Alors
15 max <- x1
16 Sinon
17 max <- x2
18 FinSi
19
20 -- Afficher le maximum
21 crire(max)
22 Fin
Exercice 11 : Sinon et Si
Rcrire une instruction Si ... Alors ... Sinon ... FinSi en utilisant seulement la struc-
ture Si ... Alors ... FinSi (sans utiliser le Sinon).
Solution : Soit la structure
1 Si condition Alors
2 squence1
3 Sinon
4 squence2
5 FinSi
valuation : Les conditions sont values dans lordre dapparition. Ds quune condition est
vraie, la squence associe est excute. Linstruction suivante excuter sera alors celle qui suit
le FinSi. Si aucune condition nest vrifie, alors la squence associe au Sinon, si elle existe,
est excute.
Organigramme :
vrai faux
condition1
squence2
vrai faux
conditionN
squenceN squence
Le principe est dutliser un SinonSi car les trois cas sont exclusifs.
1 Algorithme signe_entier
2
3 -- Afficher le signe dun entier
4
5 Variable
6 n: Entier -- entier saisi au clavier
7
8 Dbut
9 -- Saisir un entier n
10 Lire(n)
11
12 -- Afficher le signe de n
13 Si n > 0 Alors
14 crire("positif");
15 SinonSi n < 0 Alors
16 crire("positif");
17 Sinon { Non (n > 0) Et Non (n < 0) donc N = 0 }
18 crire("nul");
19 FinSi
20 Fin
Rgles :
expression est ncessairement une expression de type scalaire.
choixi est une liste de choix spars par des virgules. Chaque choix est soit une constante,
soit un intervalle (10..20, par exemple).
Linstruction Selon peut donc tre considre comme un cas particulier de la condition-
nelle
Si ... SinonSi ... FinSi.
valuation : Lexpression est value, puis sa valeur est successivement compare chacun
des ensembles choixi . Ds quil y a correspondance, les comparaisons sont arrtes et la squence
associe est excute. Les diffrents choix sont donc exclusifs. Si aucun choix ne correspondant,
alors la squence associe au Sinon, si elle existe, est excute.
Remarque : La clause Sinon est optionnelle... mais il faut tre sr de traiter tous les cas (toutes
les valeurs possibles de lexpression).
Organigramme :
expression
choix2 choix1 choixn autres cas
Exercice 13 : Rponse
crire un programme qui demande lutilisateur de saisir un caractre et qui affiche affirmatif
si le caractre est un o (minuscule ou majuscule), ngatif si cest un n (minuscule ou
majuscule) et ? ! ? ! ? ! ? dans les autres cas.
Solution :
1 Algorithme repondre
2
3 -- Rpondre par affirmatif , ngatif ou ?!?!?!? .
4
5 Variable
6 reponse: Charactere -- caractre lu au clavier
7
8 Dbut
9 -- saisir le caractre
10 crire("Votre rponse (o/n) : ")
11 Lire(reponse)
12
13 -- afficher la rponse
14 Selon reponse Dans
15 o, O: { rponse positive }
16 crireln("Affirmatif !")
17
18 n, N: { rponse ngative }
19 crireln("Ngatif !")
20
21 Sinon
22 crireln("?!?!?!?")
23 FinSelon
24 Fin
Rgles :
La condition doit tre une expression boolenne.
Pour que la boucle se termine, il est ncessaire que la squence modifie la condition.
valuation : La condition est value. Si elle vaut FAUX alors la boucle se termine et lexcution
se poursuit avec linstruction qui suit FinTQ. Si elle vaut VRAI alors la squence dinstructions est
excute et la condition est de nouveau value.
Organigramme :
faux
condition
vrai
squence
Remarque : On fera apparatre explicitement cette condition sous forme de commentaire aprs
le FinTQ.
Remarque : Comme le test de la condition est fait en premier, la squence peut ne pas tre
excute. Il suffit que la condition soit fausse ds le dbut.
On en dduit : i = n + 1.
La troisime donne alors : n
X
somme = j
j=1
1 Algorithme somme_n
2
3 -- Afficher la somme des n premiers entiers
4
5 Variable
6 n: Entier -- valeur lue au clavier
7 i: Entier -- parcourir les entiers de 1 n
8 somme: Entier -- somme des entiers de 0 i
9
10 Dbut
11 -- Saisir la valeur de n (pas de contrle)
12 crire("Nombre dentiers : ");
13 Lire(n)
14
15 -- Calculer la somme des n premiers entiers
16 somme <- 0
17 i <- 1
18 TantQue i <= n Faire
19 { Variant : n - i + 1 }
Pi1
20 { Invariant : somme = j=0 j }
21 somme <- somme + i
22 i <- i + 1
23 FinTQ
24
25 -- Afficher la somme
26 crire("La somme est : ")
27 crire(somme)
28 Fin.
Thorme : Tout algorithme (calculable) peut tre exprim laide de laffectation et des trois
structures Si Alors FinSi, TantQue et enchanement squentiel.
... Mais ce nest pas forcment pratique, aussi des structures supplmentaires ont t intro-
duites.
1 Rpter
2 squence
3 Jusqu condition
Remarques :
la condition nest value quaprs lexcution de la squence ;
la squence est excute au moins une fois ;
la condition doit tre modifie par la squence ;
Organigramme :
squence
condition faux
vrai
3 Variables
4 n: Entier -- un entier saisi au clavier
5 s: Entier -- la somme des n premiers entiers
6 i: Entier -- parcourir les entiers de 1 n
7 rponse: Caractre -- rponse lue au clavier
8 Dbut
9 Rpter
10 -- Afficher la somme des n premiers entiers
11
12 -- saisir n (il faudrait la contrler !)
13 crire("Valeur de n = ")
14 Lire(n)
15
16 -- calculer la somme des n premiers entiers
17 somme <- 0
18 i <- 1
19 TantQue i <= n Faire
20 { Variant : n - i + 1 }
Pi1
21 { Invariant : somme = j=1 j }
22 somme <- somme + i
23 i <- i + 1
24 FinTQ
25
26 -- afficher le rsultat
27 crireLn("La somme des entiers est : ", somme);
28
29 -- Demander si lutilisateur veut recommencer
30 crire("Encore (o/n) ? ")
31 Lire(rponse)
32
33 Jusqu (rponse = n) Ou (rponse = N)
34 Fin.
devient :
1 squence
2 TantQue Non condition Faire
3 squence
4 FinTQ
Inversement,
1 TantQue condition Faire
2 squence
3 FinTQ
devient :
1 Si condition Alors
2 Rpter
3 squence
4 Jusqu Non condition
5 FinSi
Rgle :
La variable var est une variable dun type scalaire. Elle est dite variable de contrle.
Les expressions val_min et val_max sont dun type compatible avec celui de var.
La squence dinstructions ne doit pas modifier la valeur de la variable var.
valuation : Les expressions val_min et val_max sont values. La variable var prend alors
successivement chacune des valeurs de lintervalle [val_min..val_max] dans lordre indiqu et
pour chaque valeur, la squence est excute.
Remarques :
Cette structure est utilise lorsquon connat lavance le nombre ditrations faire.
Les expressions val_min et val_max ne sont values quune seule fois.
La squence peut ne pas tre excute (intervalle vide : val_min > val_max).