Vous êtes sur la page 1sur 32

PAD INPT Cours Algo, Semaine 1

A LGORITHMIQUE ET PROGRAMMATION 1 avrilmai 2013

Algorithmique et programmation : les bases (Algo)


Corrig
Rsum
Ce document dcrit les lments de base de notre langage algorithmique : la structure
dun algorithmique, les variables, les types, les constantes, les expressions et les instructions.

Table des matires


1 Pourquoi dfinir notre langage algorithmique ? 3

2 Structure dun algorithme 3


2.1 Exemple dalgorithme : calculer le primtre dun cercle . . . . . . . . . . . . . 3
2.2 Structure de lalgorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.3 Identificateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.4 Commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

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

Cours Algo, Semaine 1


c INPTPAD 1/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

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

Liste des exercices


Exercice 1 : Lien entre raffinage et algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Exercice 2 : Vrifier les formules de De Morgan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Exercice 3 : Parenthser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Exercice 4 : Validit dinstructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Exercice 5 : Cube dun rel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Exercice 6 : Comprendre laffectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Exercice 7 : Permuter deux caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Exercice 8 : Cube dun rel (avec une variable) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Exercice 9 : Une valeur entire est-elle paire ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Exercice 10 : Maximum de deux valeurs relles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Exercice 11 : Sinon et Si . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Exercice 12 : Signe dun entier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Exercice 13 : Rponse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Exercice 14 : Condition aprs un FinTQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Exercice 15 : Somme des premiers entiers (TantQue) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Exercice 16 : Saisie contrle dun numro de mois . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Exercice 17 : Plusieurs sommes des n premiers entiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Exercice 18 : Saisie contrle dun numro de mois . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Exercice 19 : TantQue et Rpter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Exercice 20 : Somme des premiers entiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

Cours Algo, Semaine 1


c INPTPAD 2/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

1 Pourquoi dfinir notre langage algorithmique ?


Plusieurs raisons justifient lutilisation dun langage algorithmique spcifique :
bien insister sur la diffrence entre programmation et construction dune solution algorith-
mique.
tre indpendant dun langage de programmation particulier : mme si ce langage est
proche de Pascal dans sa structure, il nest pas identique, et peut tre trs facilement traduit
dans dautres langages de programmation tels que C, Ada, Fortran, Modula-2, etc.
utiliser des concepts intressants issus de plusieurs langages comme par exemple :
les structures de contrle de Pascal avec les mots-cls de fin de structure de Modula-2 ;
les modes de passages des paramtres aux sous-programmes dAda ;
la variable prdfinie Rsultat dEiffel pour les fonctions, etc.
favoriser la crativit en ayant un langage souple (permettant par exemple des instructions
abstraites) mais suffisamment rigoureux pour que tout le monde puisse comprendre un
algorithme crit dans ce langage.

2 Structure dun algorithme


Un algorithme (comme un programme) est compos de trois parties principales :
1. La partie dfinitions permet de dfinir les entits qui pourront tre manipules dans
lalgorithme. En particulier, on dfinit des constantes, des types et des sous-programmes.
2. La partie dclarations permet de dclarer les donnes qui sont utilises par le programme.
Les donnes sont reprsentes par des variables.
3. La partie instructions constitue le programme principal. Les instructions sont excutes
par lordinateur pour transformer les donnes.

2.1 Exemple dalgorithme : calculer le primtre dun cercle


Un exemple dalgorithme/programme est donn ci-dessous. Il dcrit comment obtenir le
primtre dun cercle partir de son diamtre. Cet exemple est volontairement trs simple.
Listing 1 Algorithme pour calculer le primtre dun cercle
1 Algorithme primtre_cercle
2
3 -- Dterminer le primtre dun cercle partir de son rayon
4 -- Attention : aucun contrle sur la saisie du rayon ==> non robuste !
5
6 Constante
7 PI = 3.1415
8
9 Variable
10 rayon: Rel -- le rayon du cercle lu au clavier
11 primtre: Rel -- le perimtre du cercle
12

Cours Algo, Semaine 1


c INPTPAD 3/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

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.2 Structure de lalgorithme


Lalgorithme est compos dun nom. Ensuite, un commentaire gnral explique lobjectif de
lalgorithme.
Dans le partie dfinition , nous avons dfini la constante PI.
Dans la partie dclaration , deux variables sont dclares pour reprsenter respectivement
le rayon du cercle et son primtre.
Dans la partie instruction , les instructions permettent dafficher (crire) des informations
lutilisateur du programme ( Rayon = ) et de lui demander de saisir la valeur du rayon (Lire)
et dinitialiser la variable primtre. Lalgorithme se termine avec laffichage du primtre pour
que lutilisateur puisse le voir sur lcran.
Exercice 1 : Lien entre raffinage et algorithme
Donner le raffinage qui a conduit lalgorithme dcrit dans le listing 1.
Solution :
1 R0 : Dterminer le primtre dun cercle partir de son rayon
2
3 R1 : Raffinage De Dterminer le primtre dun cercle partir de son rayon
4 | Saisir le rayon rayon: out Rel
5 | Calculer le primtre rayon: in ; primtre: out Rel
6 | Afficher le primtre primtre: in
7
8 R2 : Raffinage De Saisir le rayon
9 | crire("Donner le rayon du cercle : ")
10 | Lire(rayon)
11
12 R2 : Raffinage De Calculer le primtre
13 | primtre <- 2 * PI * rayon
14
15 R2 : Raffinage De Afficher le primtre
16 | crireLn("Le primtre est : ", primtre)
17
18 Le dictionnaire des donnes est :
19 rayon: Rel -- le rayon du cercle saisi au clavier
20 primtre: Rel; -- le primtre du cercle

Cours Algo, Semaine 1


c INPTPAD 4/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

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.

Cours Algo, Semaine 1


c INPTPAD 5/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

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.

3.2 Dfinition dune variable


Une variable peut tre vue comme une zone dans la mmoire (vive) de lordinateur qui est
utilise pour conserver les donnes qui seront manipules par lordinateur.
Une variable est caractrise par quatre informations :
son rle : il indique quoi va servir la variable dans le programme. Par exemple, on peut
utiliser une variable pour conserver le prix unitaire dun article, prix exprim en euros.
Cette information doit apparatre dans lalgorithme sous la forme dun commentaire in-
formel (texte libre) associ la variable ;
son nom : compos uniquement de lettres minuscules, majuscules, de chiffres et du car-
actre soulign, il permet didentifier la variable. On parle d identificateur . Ce nom
doit tre significatif (reflter le rle de la variable). Un compromis doit bien sr tre trouv
entre expressivit et longueur. On peut par exemple appeler prix_unitaire une variable
qui reprsente le prix unitaire dun article. Le nom prix_unitaire_d_un_article est un
nom beaucoup trop long ;
son type : une variable est utilise pour reprsenter des donnes qui sont manipules par
le programme. Un type est utilis pour caractriser lensemble des valeurs quune variable
peut prendre. Par exemple le prix unitaire reprsente le prix dun article exprim en euros.
On peut considrer quil est reprsent par un rel. Il ne peut alors prendre que ce type
de valeurs. De la mme manire la quantit, ne peut prendre que des valeurs entires et le
nom est une chane de caractres. On dira respectivement que le type de prix_unitaire
est Rel, le type de quantit est Entier et le type de nom est Chane.
1 prix_unitaire: Rel -- prix unitaire dun article (en euros)
2 quantit: Entier -- quantit darticles commands
3 nom: Chane -- nom de larticle

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

Cours Algo, Semaine 1


c INPTPAD 6/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

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 .

Cours Algo, Semaine 1


c INPTPAD 7/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

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.

4.1 Les entiers


Le type Entier caractrise les entiers relatifs.
1 -- Exemple de reprsentants des entiers
2 10
3 0
4 -10

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))

4.2 Les rels


Le type Rel caractrise les rels.
1 -- Exemple de reprsentants des rels
2 10.0
3 0.0
4 -10e-4

Les oprations sont : +, -, *, /, Abs (valeur absolue), Trunc (partie entire).


- et + peuvent tre unaires ou binaires.

4.3 Les boolens


Le type Boolen caractrise les valeurs boolennes qui ne correspondent qu deux valeurs
VRAI ou FAUX.
Les oprations sont Et, Ou et Non qui sont dfinies par la table de vrit suivante :
A B A Et B A Ou B Non A
VRAI VRAI VRAI VRAI FAUX
VRAI FAUX FAUX VRAI FAUX
FAUX VRAI FAUX VRAI VRAI
FAUX FAUX FAUX FAUX VRAI

Lois de De Morgan : Les lois de De Morgan sont particulirement importantes connatre (cf
structures de contrle, section 9).

Cours Algo, Semaine 1


c INPTPAD 8/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

1 Non (A Et B) = (Non A) Ou (Non B)


2 Non (A Ou B) = (Non A) Et (Non B)
3 Non (Non A) = A

Exercice 2 : Vrifier les formules de De Morgan


En utilisant des tables de vrit, vrifier que les formules de De Morgan sont correctes.
Remarque :
1 A: Boolen -- A est une variable de type Boolen
2
3 A est quivalent A = VRAI
4 Non A est quivalent A = FAUX

Il est prfrable dutiliser A et Non A. Les deux autres formulations, si elles ne sont pas fausses,
sont des plonasmes !

4.4 Les caractres


Le type Caractre caractrise les caractres.
1 -- Exemple de reprsentants des caractres
2 a -- le caractre a
3 \ -- le caractre
4 \\ -- le caractre \
5 \n -- retour la ligne
6 \t -- Caractre tabulation

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.

4.5 Les chanes de caractres


Le type Chane caractrise les chanes de caractres.
1 "Une chane de caractres" -- un exemple de Chane
2 "Une chane avec guillement (\")" -- un exemple de Chane

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 !

Cours Algo, Semaine 1


c INPTPAD 9/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

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.

Cours Algo, Semaine 1


c INPTPAD 10/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

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

En cas dambigut (ou de doute), il est prfrable de mettre des parenthses.


Exercice 3 : Parenthser
Parenthser compltement les expressions suivantes. Peuvent-elles tre considres comme cor-
rectes et si oui, quelles conditions, si non pourquoi ?
1 2 + x * 3
2 - x + 3 * y <= 10 + 3
3 x = 0 Ou y = 0

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

Exercice 4 : Validit dinstructions


quelles conditions les instructions suivantes sont-elles cohrentes ?
1 (a Mod b)
2 (rep = o) Ou (rep = n)
3 (R <> O) Et (R <> o)
4 (C >= A) Et (C <= Z) Ou (C >= a) Et (C <= z)
5 termine Ou (nb > 10)
6 Non trouve Ou (x = y)

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.

Cours Algo, Semaine 1


c INPTPAD 11/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

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).

7.1 Opration dentre


Lire(var) : lire sur le priphrique dentre une valeur et la ranger dans la variable var.
Autre formulation : affecter la variable var avec une valeur lue au clavier.
Rgle : Le paramtre var est ncessairement une variable. En effet, la valeur lue sur le
priphrique dentre doit tre range dans var .
valuation : Lvaluation se fait en deux temps :
rcuprer linformation sur le priphrique dentre (elle est convertie dans le type de la
variable var) ;
ranger cette information dans la variable var.
Organigramme :

Lire(var)

7.2 Opration de sortie


crire(expr) : transfrer (afficher, imprimer...) la valeur de lexpression expr vers le p-
riphrique de sortie.
Rgle : expr est une expression quelconque dun type fondamental.

Cours Algo, Semaine 1


c INPTPAD 12/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

valuation : Lvaluation se fait en deux temps :


valuer lexpression (cest--dire calculer sa valeur) ;
afficher (ajouter) sur le priphrique de sortie la valeur de lexpression.
Organigramme :

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)

On en dduit alors lalgorithme suivant :


1 Algorithme cube
2
3 -- afficher le cube dun nombre rel
4
5 Variable
6 x: Rel -- un nombre saisi par lutilisateur
7
8 Dbut
9 -- Saisir un nombre rel
10 crire("Nombre = ")
11 Lire(x)
12
13 -- Afficher le cube de x

Cours Algo, Semaine 1


c INPTPAD 13/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

14 crire("Son cube est : ")


15 crire(x * x * x)
16 Fin

8 Affectation
Dfinition : Laffectation permet de modifier la valeur associe une variable.
1 var <- expr

Rgle : Le type de expr doit tre compatible avec le type de var.


valuation : Lvaluation de laffectation se fait en deux temps :
1. calculer la valeur de lexpression expr ;
2. ranger cette valeur dans la variable var.
Organigramme :

var < expr

Exemple : Voici quelques exemples daffectation :


1 rayon <- 10
2 diamtre <- 2 * rayon
3 primtre <- PI * diamtre

Exercice 6 : Comprendre laffectation


Quelle est la valeur de n aprs lexcution de chacune des instructions suivantes ?
1 n <- 5
2 c <- c
3 Lire (n)
4 n <- 10
5 n <- n + 1

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 :

Cours Algo, Semaine 1


c INPTPAD 14/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

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

Exercice 8 : Cube dun rel (avec une variable)


Reprenons lexercice 5.
8.1 Utiliser une variable intermdiaire pour le rsoudre.
Solution : On reprend le mme R0 et les mmes tests. En fait, seule la manire de rsoudre le
problme change.
1 R1 : Raffinage De Afficher le cube dun nombre rel
2 | Saisir un nombre rel x: out Rel
3 | Calculer le cube de x x: in Rel ; cube: out Rel
4 | Afficher le cube
5
6 R2 : Raffinage De Afficher le cube de x
7 | cube <- x * x * x

On en dduit alors lalgorithme suivant :


1 Algorithme cube
2
3 -- afficher le cube dun nombre rel
4
5 Variable
6 x: Rel -- un nombre saisi par lutilisateur
7 cube: Rel -- le cube de x
8
9 Dbut
10 -- Saisir un nombre rel
11 crire("Nombre = ")
12 Lire(x)
13
14 -- Calculer le cube de x
15 cube <- x * x * x
16
17 -- Afficher le cube
18 crire("Son cube est : ")
19 crire(cube)

Cours Algo, Semaine 1


c INPTPAD 15/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

20 Fin

8.2 Quel est lintrt dutiliser une telle variable ?


Solution : Lintrt dutiliser une variable intermdiaire est damliorer la lisibilit du pro-
gramme car elle permet de mettre un nom sur une donne manipule. Ici on nomme cube la
donne x * x * x.
De plus, ceci nous a permis, au niveau du raffinage, de dcoupler le calcul du cube de son
affichage. Il est toujours souhaitable de sparer calcul des oprations dentres/sorties car linter-
face avec lutilisateur est la partie dune application qui a le plus de risque dvoluer.
8.3 Excuter la main lalgorithme ainsi crit.
Solution : faire soi-mme !

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.

9.1 Enchanement squentiel


Les instructions sont excutes dans lordre o elles apparaissent.
1 opration1
2 ...
3 oprationn

Cours Algo, Semaine 1


c INPTPAD 16/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

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.

9.2 Instructions conditionnelles


9.2.1 Conditionnelle Si ... Alors ... FinSi

1 Si condition Alors
2 squence -- une squence dinstructions
3 FinSi

Rgle : La condition est ncessairement une expression boolenne.


valuation :
la condition est value ;
si la condition est vraie, la squence est excute puis le contrle passe linstruction qui
suit le FinSi ;
si la condition est fausse, le contrle passe linstuction qui suit le FinSi.
En dautres termes, la squence est excute si et seulement si la condition est VRAI.
Organigramme :

vrai
condition

faux squence

Exercice 9 : Une valeur entire est-elle paire ?


crire un algorithme qui lit une valeur entire au clavier et affiche paire si elle est paire.
Solution :
1 R0 : Afficher paire si une valeur entire saisie au clavier est paire
2
3 tests :
4 2 -> paire
5 5 -> -----
6 0 -> paire
7
8 R1 : Raffinage De Afficher ...
9 | Saisir la valeur entire n
10 | Afficher le verdict de parit

Cours Algo, Semaine 1


c INPTPAD 17/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

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.

Cours Algo, Semaine 1


c INPTPAD 18/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

9.2.2 Conditionnelle Si ... Alors ... Sinon ... FinSi

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

Exercice 10 : Maximum de deux valeurs relles


tant donnes deux valeurs relles lues au clavier, afficher lcran la plus grande des deux.
Solution :
1 R0 : Afficher le plus grand de deux rels saisis au clavier
2
3 tests :
4 1 et 2 -> 2
5 2 et 1 -> 1
6 3 et 3 -> 3
7
8 R1 : Raffinage De Afficher le plus grand de deux rels ...
9 | Saisir les deux rels x1, x2 : out Rel
10 | Dterminer le maximum x1, x2 : in ; max : out Rel
11 | Afficher le maximum
12
13 R2 : Raffinage De Dterminer le maximum
14 | Si x1 > x2 Alors
15 | | max <- x1
16 | Sinon
17 | | max <- x2
18 | FinSi

Lalgorihme est alors le suivant :


1 Algorithme calculer_max
2
3 -- Afficher le plus grand de deux rels saisis au clavier

Cours Algo, Semaine 1


c INPTPAD 19/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

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

On la rcrit sans utiliser le Sinon de la manire suivante :


1 Si condition Alors
2 squence1
3 FinSi
4 Si Non condition Alors
5 squence2
6 FinSi

Quel est lintrt du Sinon ?


Solution :
Il apparat clairement que les deux groupes dinstructions (les deux squences) sont ex-
clusifs. Au del de la structure syntaxique, ceci est aussi renforc par la prsentation (et
lindentation).
Accessoirement, le traitement peut tre plus efficace puisque la condition ne sera value
quune seule fois.
Si on veut faire du test par couverture en prenant comme critre de couverture tous les
chemins on ne pourra jamais atteindre les 100% ! ! !

Cours Algo, Semaine 1


c INPTPAD 20/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

9.2.3 La clause SinonSi


La conditionnelle Si ... Alors ... Sinon ... FinSi peut tre complte avec des clauses
SinonSi suivant le schma suivant :
1 Si condition1 Alors
2 squence1
3 SinonSi condition2 Alors
4 squence2
5 ...
6 SinonSi conditionN Alors
7 squenceN
8 Sinon { Expliciter la condition ! }
9 squence
10 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

squence1 vrai faux


condition2

squence2

vrai faux
conditionN

squenceN squence

Exercice 12 : Signe dun entier


tant donn un entier lu au clavier, indiquer sil est nul, positif ou ngatif.
Solution :
1 R0 : Afficher le signe dun entier
2
3 tests :
4 2 -> positif
5 0 -> nul
6 -1 -> ngatif
7
8 R1 : Raffinage De Afficher le signe dun entier

Cours Algo, Semaine 1


c INPTPAD 21/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

9 | Saisir un entier n n: out Entier


10 | Afficher le signe de n n: in
11
12 R2 : Raffinage De 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

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

9.2.4 Conditionnelle Selon

1 Selon expression Dans


2 choix1 :
3 squence1
4 choix2 :
5 squence2
6 ...
7 choixN :
8 squenceN
9 Sinon
10 squence
11 FinSelon

Rgles :
expression est ncessairement une expression de type scalaire.

Cours Algo, Semaine 1


c INPTPAD 22/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

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

squence1 squence2 squenceN squence

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

Cours Algo, Semaine 1


c INPTPAD 23/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

22 crireln("?!?!?!?")
23 FinSelon
24 Fin

9.3 Instructions de rptitions


9.3.1 Rptition TantQue

1 TantQue condition Faire


2 squence
3 FinTQ

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

Exercice 14 : Condition aprs un FinTQ


Que sait-on sur ltat du programme lorsque linstruction suivante excuter est celle qui suit le
FinTQ ?
Solution : Puisquon est sortie de la boucle cest que la condition du TantQue est fausse. On
peut utiliser les commentaires {} pour lexprimer (et les formules de De Morgan pour simplifier
lexpression boolenne).
1 TantQue condition Faire
2 squence
3 FinTQ
4 { Non condition }

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.

Cours Algo, Semaine 1


c INPTPAD 24/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

Problme de la terminaison. Nous avons vu quune proprit importante dun algorithme/pro-


gramme est quil doit se terminer. Jusqu prsent la terminaison tait assure car avec seulement
la squence et les conditionnelles, lexcution du programme se fait toujours vers lavant. On doit
donc ncessairement atteindre la fin.
Avec les rptitions, on peut revenir en arrire dans le programme. Il est alors important de
sassurer que lon finira toujours par sortir des rptitions dun programme. Sinon, le programme
risque de sexcuter indfiniment. On parle alors de boucle sans fin.
Pour garantir quune boucle (une rptition) se termine, on peut mettre en vidence un vari-
ant. Cest une expression entire qui doit toujours tre positive et dcrotre strictement chaque
passage dans la boucle. Si on arrive exhiber ce variant et prouver les deux proprits, alors on
est assur que la rptition se termine.
Un programme qui se termine nest pas forcment un programme valide. Pour vrifier la va-
lidit dune boucle, on peut mettre en vidence un invariant. Cest une expression boolenne qui
est vraie avant et aprs chaque passage dans la boucle. Elle aide prouver la validit dune boucle
et dun programme. Linvariant est cependant gnralement difficile trouver et la preuve diffi-
cile faire. Cependant, dans les exercices nous essaierons de mettre en vidence des invariants,
mme sils ne sont quintuitifs et incomplets.
Exercice 15 : Somme des premiers entiers (TantQue)
Calculer la somme des n premiers entiers.
Solution : Une solution algorithmique sous forme de raffinages peut-tre la suivante :
1 R0 : Afficher la somme des n premiers entiers
2
3 R1 : Raffinage De Afficher la somme des n premiers entiers
4 Saisir la valeur de n (pas de contrle) n: out Entier
5 { n >= 0 }
6 Calculer la somme des n premiers entiers n: in; somme: out Entier
7 Afficher la somme somme: in Entier
8
9 R2 : Raffinage De Calculer la somme des n premiers entiers
10 somme <- 0 somme: out
11 i <- 1 i: out Entier
12 TantQue i <= n Faire i, n: in
13 { Variant : n - i + 1 }
Pi1
14 { Invariant : somme = j=0 j }
15 somme <- somme + i somme, i: in; somme: out
16 i <- i + 1 i: in; i: out
17 FinTQ

Intressons nous la condition aprs le TantQue. On a la proprit suivante :


(i > n) -- sortie du TantQue : Non (i <= n)
Et (n - i + 1 >= 0) -- variant >= 0
Pi1
Et (somme = j=1 j ) -- invariant
Les deux premires expressions scrivent
(i > n ) Et (i <= n+1)

Cours Algo, Semaine 1


c INPTPAD 25/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

On en dduit : i = n + 1.
La troisime donne alors : n
X
somme = j
j=1

Cest bien le rsultat demand !


Bien entendu, il faut aussi prouver que le variant est toujours positif et quil dcroit stricte-
ment (on incrmente i de 1 donc on diminue le variant de 1). Il faut galement prouver que
linvariant est toujours vrai.
Commenons par le variant. Montrons par rcurrence sur le nombre de passage dans la boucle
que la variant est toujours positif.
Si le nombre de passage est nul, donc avant le premier passage, on a : V0 = n i1 =
n 1 + 1 = n. Par hypothse sur n (saisie contrle), on a bien V0 0
Supposons la proprit vraie pour le passage p. On a donc : Vp = 0
Montrons que Vp+1 est vraie. On notera avec des primes les variables de Vp+1 au lieu dutiliser
des indices en p.
On a : Vp+1 = n0 i0 + 1
Si on parle de Vp+1 cest quon est pass dans la boucle. Donc la condition du TantQue est
vraie. On a donc i n.
Or on a n0 = n et i0 = i + 1 (passage une fois dans la boucle).
Donc Vp+1 = n (i + 1) + 1 = n i + 1 1 = n i Comme i n, on a bien Vp+1 0.
Par rcurrence, on a montrer que le variant est toujours positif.
Montrons que le variant dcroit strictement. On Vp+1 = n0 i0 + 1 = n i + 1 1 =
(n i + 1) 1 = Vp 1. On a bien Vp+1 < Vp .
On a donc montrer la terminaison de la boucle.
Remarque : Dans la formulation initiale du R1, javais oubli la proprit { n >= 0 }. Elle tait
bien sr implicite. Essayer de montrer que le variant tait toujours positif ma permis de penser
lexpliciter.
Montrons maintenant que linvariant est toujours vrai. On utilise aussi une rcurrence sur
le nombre p de passage dans la boucle.
Avant le premier passage, on a i1
P P0
j=0 j = j = 0 et on a somme = 0. Donc I0 est vrai.
Pj=0
i1
Supposons Ip vrai. On a donc : somme = j=0 j
Montrons que Ip+1 est vrai. Si on parle de Ip+1 , cest quon passe une nouvelle fois dans la
boucle. On a donc : i n.
Les valeurs de n, i et somme deviennent :
s0 = s + i
i0 = i + 1
n0 = Pn P(i+1)1 0 Pi0 1
s0 = i1 0
Pi 0
j=0 j + i par hypothse de rcurrence. s = j=0 j s = j=0 j s = j=0 j
Donc on a bien Ip+1 .
Par rcurrence, on montre donc que linvariant est toujours vrai.
On en dduit alors lalgorithme suivant :

Cours Algo, Semaine 1


c INPTPAD 26/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

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.

Exercice 16 : Saisie contrle dun numro de mois


On souhaite raliser la saisie du numro dun mois (compris entre 1 et 12) avec vrification. Le
principe est que si la saisie est incorrecte, le programme affiche un message expliquant lerreur
de saisie et demande lutilisateur de resaisir la donne.
16.1 Utiliser un TantQue pour raliser la saisie contrle.
16.2 Gnraliser lalgorithme au cas dune saisie quelconque.
Solution : Voici lalgorithme pour le cas dune saisie quelconque.
1 R0 : Raliser une saisie avec vrification
2
3 R1 : Raffinage De Raliser une saisie avec vrification
4 | Saisir les donnes
5 | Traiter les erreurs ventuelles
6
7 R2 : Raffinage De Traiter les erreurs ventuelles
8 | TantQue saisie incorrecte Faire
9 | | Signaler lerreur de saisie
10 | | Saisir les nouvelles donnes
11 | FinTQ
12
13 -- Remarque : je pense que le raffinage R1 napporte pas suffisament

Cours Algo, Semaine 1


c INPTPAD 27/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

14 -- dinformation. Il serait donc prfrable de ne faire quun seul


15 -- niveau de raffinage avec les R1 et R2 ci-dessus

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.

9.3.2 Rptition Rpter ... Jusqu

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

Exercice 17 : Plusieurs sommes des n premiers entiers


crire un programme qui affiche la somme des n premiers entiers naturels, n tant un entier saisi
au clavier. Le programme devra proposer la possibilit lutilisateur de recommencer le calcul
pour un autre entier.
Solution : Le raffinage peut tre dcrit ainsi.
1 R0 : Afficher la somme des n premiers entiers avec possibilit de recommencer
2
3 R1 : Raffinage De R0
4 | Rpter
5 | | Afficher la somme des n premiers entiers
6 | | Demander si lutilisateur veut recommencer reponse: out
7 | Jusqu rponse est non

Le raffinage de Afficher la somme des n premiers entiers a dj t donn dans un exercice


prcdent. On peut donc directement en dduire lalgorithme.
1 Algorithme sommes
2 -- Afficher la somme des n premiers entiers avec possibilit de recommencer

Cours Algo, Semaine 1


c INPTPAD 28/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

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.

Exercice 18 : Saisie contrle dun numro de mois


On souhaite raliser la saisie du numro dun mois (compris entre 1 et 12) avec vrification. Le
principe est que si la saisie est incorrecte, le programme affiche un message expliquant lerreur
de saisie et demande lutilisateur de resaisir la donne.
On utilisera un Rpter pour raliser la saisie contrle.
Gnraliser lalgorithme au cas dune saisie quelconque.
Solution :
1 R1 : Raffinage De Faire une saisie avec vrification
2 | Rpter
3 | | Saisir les donnes
4 | | Si saisie incorrecte Alors
5 | | | Signaler lerreur de saisie
6 | | | Indiquer quune nouvelle saisie doit tre ralise
7 | | FinSi
8 | Jusqu saisie correcte

Cours Algo, Semaine 1


c INPTPAD 29/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

Exercice 19 : TantQue et Rpter


crire la rptition Rpter partir du TantQue et rciproquement.
Solution : crire un Rpter en utilisant le TantQue :
1 Rpter
2 squence
3 Jusqu condition

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

9.3.3 Rptition Pour

1 Pour var <- val_min [ Dcrmenter ] Jusqu var = val_max Faire


2 sequence
3 FinPour
4
5 -- Une variante
6 Pour Chaque var Dans val_min..val_max [ Renvers ] Faire
7 sequence
8 FinPour

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).

Cours Algo, Semaine 1


c INPTPAD 30/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

La squence termine ncessairement (le variant est val_max - var + 1).


Attention : Il est interdit de modifier la valeur de la variable de contrle var dans la boucle.
Remarque : Il ny a pas dquivalent du Pour dans les organigrammes. On peut utiliser la tra-
duction du Pour sous forme de TantQue ou de Rpter.
Exercice 20 : Somme des premiers entiers
Calculer la somme des n premiers entiers.
Solution :
1 Algorithme somme_n
2 -- calculer la somme des n premiers entiers
3 Variables
4 n: Entier -- valeur lue au clavier
5 i: Entier -- parcourir les entiers de 1 n
6 somme: Entier -- somme des entiers de 0 i
7 Dbut
8 -- saisir la valeur de n (pas de contrle)
9 crire("Nombre dentiers : ");
10 Lire(n)
11
12 -- calculer la somme des n premiers entiers
13 somme <- 0
14 Pour i <- 1 Jusqu i = n Faire
15 { Variant : n - i + 1 }
Pi
16 { Invariant : somme = j=1 j }
17 somme <- somme + i
18 FinPour
19
20 -- afficher la somme
21 crire("La somme est : ")
22 crire(somme)
23 Fin.

9.3.4 Quelle rptition choisir ?


La premire question se poser est : Est-ce que je connais a priori le nombre ditrations
effectuer ? . Dans laffirmative, on choisit la boucle Pour.
Dans la ngative, on peut gnralement employer soit un TantQue, soit un Rpter. En
gnral, utiliser un Rpter implique de dupliquer une condition et utiliser un TantQue implique
de dupliquer une instruction.
Dans le cas, o on choisit dutiliser un Rpter, il faut faire attention que les instructions quil
contrle seront excutes au moins une fois. Sil existe des cas o la squence dinstructions ne
doit pas tre excute, alors il faut utiliser un TantQue (ou protger le Rpter par un Si).
Une heuristique pour choisir entre TantQue et Rpter est de se demander combien de fois
on fait litration. Si cest au moins une fois alors on peut utiliser un Rpter sinon on prfrera
un TantQue.
Remarque : Pour aider au choix, il est parfois judicieux de se poser les questions suivantes :

Cours Algo, Semaine 1


c INPTPAD 31/32
A LGORITHMIQUE ET PROGRAMMATION 1 Algorithmique et programmation : les bases (Algo)

Quest ce qui est rpt (quelle est la squence) ?


Quand est-ce quon arrte (ou continue) ?
1 R1 : Comment { Quelle rptition choisir ? }
2 Si nombre ditrations connu Alors
3 Rsultat <- Pour
4 Sinon
5 Si itration excute au moins une fois Alors
6 Rsultat <- Rpter
7 Sinon
8 Rsultat <- TantQue
9 FinSi
10 FinSi

Cours Algo, Semaine 1


c INPTPAD 32/32

Vous aimerez peut-être aussi