Vous êtes sur la page 1sur 136

LALGORITHMIQUE

Comment Faire Faire lordinateur

et Introduction au Langage C
Comment dire de Faire

Cours et Exercices

Cycle BTS / Ingnieur


AHO Y. Benjamin - Ing Dipl en Science Informatique
Prof de Conception Algorithmique
ahoben@programmer.net

Version 2.0
(c) Octobre 2006

AHO Y. Benjamin

Table des matires


1 Introduction la programmation
1.1

Lordinateur et la programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.1

Lordinateur pour quel objectif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10

1.1.2

Programmer - Tche ou Problme . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

1.1.3

Les tapes du faire faire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

1.1.3.1

Comment faire ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

1.1.3.2

Comment faire faire ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

1.1.3.3

Comment dire ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2 Les Constituants dune marche suivre


2.1

19

2.1.1

Les variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

2.1.2

Dclaration des variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

2.1.3

Les diffrents types en algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

20

2.1.4

Syntaxe gnrale de lalgorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21

2.1.5

Vocabulaire de lalgorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

Instructions daffectation et expressions . . . . . . . . . . . . . . . . . . . . . . . . . .


2.1.5.1

2.3

19

Les constituants dune marche suivre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.1.4.1

2.2

21

Linstruction daffectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

Expressions et oprateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22

2.2.1

Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22

2.2.2

Oprateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22

2.2.2.1

Oprateurs numriques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

2.2.2.2

Oprateurs logiques (ou boolens) : . . . . . . . . . . . . . . . . . . . . . . . 23

Remarques pour terminer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3 Lecture - Ecriture
3.1

23
25

Dialogue Homme Machine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

25

3.1.1

25

Afficher - Saisir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3

TABLE DES MATIRES


3.1.2

Linstruction AFFICHER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

25

3.1.3

Linstruction SAISIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

26

3.1.4

Linstruction Constante ou Const . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

26

3.1.5

Reprsentation dun algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

27

3.1.6
3.2

3.1.5.1

Le Diagramme de Nassi-Shneiderman - NSD . . . . . . . . . . . . . . . . . . 27

3.1.5.2

Reprsentation dune squence en NSD . . . . . . . . . . . . . . . . . . . . . 27

Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

29

Les chanes de caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

30

3.2.1

30

Quelques fonctions sur les chanes de caractres . . . . . . . . . . . . . . . . . . . . . .


3.2.1.1

Concatnation de chanes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

3.2.1.2

Longueur dune chane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

3.2.1.3

Sous-chane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

3.2.1.4

Carctre associ au code ASCII . . . . . . . . . . . . . . . . . . . . . . . . . . 30

3.2.1.5

code ASCII dun caractre . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

3.2.1.6

Transformation de chanes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

3.2.1.7

Comparer deux chanes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

3.2.1.8

Mettre en majuscule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

4 Les Structures de base


4.1

La structure de choix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.0.9

33
33

Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

4.1.0.10 Si . . . Alors . . . Sinon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33


4.1.0.11 Si . . . Alors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.1.1

4.1.2

Quest ce quune condition ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


4.1.1.1

Les types boolens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

4.1.1.2

Conditions composes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

Tests imbriqus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.2.1

4.1.3

4.2

39

Le Choix multiple : Selon ... Faire . . . . . . . . . . . . . . . . . . . . . . . . 41

Exemple de chane de caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


4.1.3.1

4.1.4

37

43

Exemple - 1 : Dcodage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

45

Les structures itratives (les Boucles) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

46

4.2.0.1

La boucle POUR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

4.2.0.2

La Boucle TantQue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

4.2.0.3

Exemple - 2 : Occurence dun caractre . . . . . . . . . . . . . . . . . . . . . 55

4.2.0.4

Exemple - 3 : Palindrome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

TABLE DES MATIRES

4.2.0.5

La boucle Rpter . . . Jusqu . . . . . . . . . . . . . . . . . . . . . . . . .

4.2.0.6

le choix de la boucle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

57

4.3

Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

59

4.4

Exercices Rcapitulatifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

59

5 Les Tableaux

63

5.1

Exemple introductif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

63

5.2

Dclaration dun tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

64

5.3

Tableau une dimension ou vecteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

65

5.3.1

Dclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

65

5.3.2

Oprations sur les tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

66

5.4

5.3.2.1

Initialiser un tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

5.3.2.2

Remplissage du tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

5.3.2.3

LAffichage du tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

5.3.2.4

Rechercher un lment du tableau . . . . . . . . . . . . . . . . . . . . . . . . 67

5.3.3

Autre reprsentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

68

5.3.4

Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

72

Tableau deux dimensions ou matrice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

73

5.4.1

Dclaration du tableau deux dimensions . . . . . . . . . . . . . . . . . . . . . . . . .

73

5.4.2

Modification slective . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

73

5.4.3

Traitement des tableaux deux dimensions . . . . . . . . . . . . . . . . . . . . . . . .

73

5.4.4

Autre reprsentations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

75

5.4.4.1
5.4.5
5.5

5.6

Exemple 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

79

Aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

80

5.5.1

Matrice Symtrique

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

80

5.5.2

Carr magique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

81

5.5.3

Rotation dune matrice Carre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

83

5.5.4

Le triangle de pascal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

84

5.5.5

La tour sur un chiquier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

84

Tris dans un tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

86

5.6.1

86

Tri bulle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.6.1.1

Tri par insertion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

5.6.2

Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

87

5.6.3

Recherche dichotomique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

87

TABLE DES MATIRES

6 Les Sous-Programmes
6.1

Procdures et Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

89

6.1.1

Dclaration dun sous-programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

90

6.1.2

Avantages des Sous-Programmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

90

6.1.3

6.1.4

6.1.5

6.1.2.1

Constitution dune bote noire . . . . . . . . . . . . . . . . . . . . . . . . . . 90

6.1.2.2

Variables locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

6.1.2.3

Paramtres ou Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

6.1.2.4

Lisibilit du code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

6.1.2.5

Utilisation dun sous-programme . . . . . . . . . . . . . . . . . . . . . . . . . 91

Dclaration dune fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6.1.6

6.1.7

91

6.1.3.1

Utilisation dune fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

6.1.3.2

Les arguments dune fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

Les Procdures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

94

6.1.4.1

Passage des paramtres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

6.1.4.2

Rgles de transmission des paramtres . . . . . . . . . . . . . . . . . . . . . . 96

6.1.4.3

Passage de paramtre de type donne . . . . . . . . . . . . . . . . . . . . . . 96

6.1.4.4

Passage de paramtre de type rsultat . . . . . . . . . . . . . . . . . . . . . . 96

6.1.4.5

Paramtre de type donne et rsultat . . . . . . . . . . . . . . . . . . . . . . 97

Variables globale ou locale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


6.1.5.1

97

Variable dans la procdure . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

Exemple de Fonctions et Procdures . . . . . . . . . . . . . . . . . . . . . . . . . . . .

97

6.1.6.1

Exemple 1 - Procdure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

6.1.6.2

Exemple 2 - Fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

6.1.6.3

Exemple 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

7 Programmation en langage C
7.1

89

103

Types de Base, Oprateurs et Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103


7.1.1

Les types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103


7.1.1.1

7.1.2

7.1.3

Les types simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

Les oprateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104


7.1.2.1

Loprateur daffectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

7.1.2.2

Laffectation avec des valeurs de variables . . . . . . . . . . . . . . . . . . . . 104

7.1.2.3

Laffectation avec des valeurs dexpressions . . . . . . . . . . . . . . . . . . . 104

Les oprateurs connus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104


7.1.3.1

Oprateurs arithmtiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

TABLE DES MATIRES

7.1.4

7.1.3.2

Oprateurs logiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

7.1.3.3

Oprateurs de comparaison . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

Les oprateurs particuliers de C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105


7.1.4.1

Oprateurs daffectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

7.1.4.2

Oprateurs dincrmentation et de dcrmentation . . . . . . . . . . . . . . . 105

7.2

La dclaration des variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

7.3

Afficher et Saisir les donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

7.4

7.3.1

saisie formate de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

7.3.2

Saisie formate de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

7.3.3

Affichage dun caractre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

7.3.4

Saisie dun caractre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

7.3.5

Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

Les structures de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110


7.4.1

7.5

Les tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110


7.4.1.1

if - else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

7.4.1.2

if sans else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

7.4.1.3

Test imbriqu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

7.4.2

Les oprateurs conditionnels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

7.4.3

Exrecices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

7.4.4

Les boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112


7.4.4.1

while est TantQue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

7.4.4.2

do - while - Rpter . . . jusqu . . . . . . . . . . . . . . . . . . . . . . . . . . 113

7.4.4.3

For - Pour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

7.4.4.4

Choix de la structure rptitive . . . . . . . . . . . . . . . . . . . . . . . . . . 115

7.4.5

Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

7.4.6

Les Tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115


7.4.6.1

Les tableaux une dimension . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

7.4.6.2

Accs aux composantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116

7.4.6.3

Affichage et Saisie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116

7.4.6.4

Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116

7.4.6.5

Les tableaux deux dimensions . . . . . . . . . . . . . . . . . . . . . . . . . 117

7.4.6.6

Exrecices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118

7.4.6.7

Extras - Tableau une dimension . . . . . . . . . . . . . . . . . . . . . . . . 118

7.4.6.8

Extras - Tableau deux dimensions . . . . . . . . . . . . . . . . . . . . . . . 119

Les Chanes de Caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120


7.5.1

Dclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

TABLE DES MATIRES


7.5.2

Les chanes de caractres constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121

7.5.3

Accs aux lments dune chane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121

7.5.4

Prcdence alphabtique et lexicographique . . . . . . . . . . . . . . . . . . . . . . . . 121

7.5.5

7.5.4.1

Prcdence alphabtique des caractres . . . . . . . . . . . . . . . . . . . . . 121

7.5.4.2

Prcdence lexicographique des chanes de caractres . . . . . . . . . . . . . . 121

Travailler avec des chanes de caractres . . . . . . . . . . . . . . . . . . . . . . . . . . 122


7.5.5.1

Affichage de chanes : Les fonctions de <stdio.h> . . . . . . . . . . . . . . . . 122

7.5.5.2

Saisie dune chane de caractres . . . . . . . . . . . . . . . . . . . . . . . . . 123

7.5.6

Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

7.5.7

Les fonctions de <string> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123


7.5.7.1

7.6

Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

Les Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124


7.6.1

Modularisation de programmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124


7.6.1.1

7.6.2

La modularit et ses avantages . . . . . . . . . . . . . . . . . . . . . . . . . . 124

Dclaration et dfinition de fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125


7.6.2.1

Dfinition dune fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

7.6.2.2

Dclaration dune fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

7.6.2.3

Rgles pour la dclaration des fonctions . . . . . . . . . . . . . . . . . . . . . 126

7.6.2.4

Renvoyer un rsultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

7.6.2.5

Les procdures en C (void) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

7.6.2.6

Paramtres ou Arguments dune fonction . . . . . . . . . . . . . . . . . . . . 127

8 Corrig des exercices

129

Chapitre 1

Introduction la programmation
1.1

Lordinateur et la programmation

Lordinateur est un appareil lectrique, dot de composants electroniques qui nest capable que de traitement
formels dinformations.
Voici quelques exemples de tches, que nous connaissons bien, pour y tre parfois confronts et qui mette en
oeuvre un traitement formel dinformations.
Nous allons classer ce traitement formel en 3 grands groupes :
1. Traitement de nombre et manipulation de donnes numriques : Le processus daddition
de deux nombres na que faire du sens qui serait attach aux quantits additionner 13 + 25 cela
fait toujour 38 quelque soit la signification associe ces nombres. Quil sagisse de poids, de somme
dargent ou dge. Lordinateur, manipulateur formel dinformations, va donc exceler lorsquil sagira
de traiter des donnes numriques. Les oprations quon lui fera effectuer seront similaires celles que
nous ralisons propos des nombres. Les additionner, les soustraire, les comparer. ...
Il faut bien noter ceci : je ne dis pas quavant et aprs le traitement formel de nombres nous nattachons
pas un sens aux donnes traites mais la manipulation elle-mme est indpendante de cette signification.
(a) Additionner deux nombres
(b) Calculer une moyenne
(c) Chercher le plus grand dune srie de nombres
2. Le deuxime ensemble de tches correspond lui aussi, mme si les informations traites ne sont plus
numriques, des traitements formel : trier, chercher un numro de tlphone, classer, ... sont des actions
qui ne nous font appel qu la forme des donnes manipules. Essayons de comprendre ce qui suit :
ANTOINE dans un classement alphabtique prcdera toujours BENOIT et cest lapparence externe de
ces prnoms qui permet de dcider et non le fait que BENOIT est notre ami et ANTOINE un inconnu.
Evidemment, si dans cette liste de prnoms nous trouvons un prnoms du genre "AADDFFRR",
nous hsiterons le classer avant ANTOINE, mme si la forme nous y oblige et cela parce que le
prnom "AADDFFRR" nous parat insens ; mais si nous excluons ces considrations de "sens", notre
classement ne sappuiera de fait que sur la forme des prnoms proposs.
(a) Transcrire en toute lettre un nombre crit en chiffre
(b) Chercher le numro de tlphone dun abonn
(c) Compter et annoncer les points dans un match de basket
9

10

CHAPITRE 1. INTRODUCTION LA PROGRAMMATION


3. Ce troisime ensemble de tches nous est nettement moins famillier. Il sagit ici de manipulations
formelles de textes. Et la plupart du temps, lorsque nous nous intressons du texte ce nest pas la
forme qui nous importe mais le sens que nous lui attachons. Ainsi nous ne lisons pas un roman pour le
plaisir de pouvoir dclarer quil comporte autant de mots.
Lorsquil sagira de texte, lordinateur, manipulateur formel, ne pourra se livrer qu des oprations
portant sur les caractres qui le constituent, sans rfrence, la signification vhicule.
Nous parlerons toujours de chanes de caractres et non de mots
(a) Conjuguer un verbe rgulier du premier groupe tous les temps de lindicatif.
(b) Lire un texte et fournir la frquence des divers mots le composant.
(c) Centrer un titre lors de la dactylographie dun document.

On voit que dans les tches numres ci-dessus, jai soigneusement vit des travaux comme "Rsumer un
texte", "Traduire un texte", "Apprcier la posie se dgageant dun text". Ce ne sont plus l ce que jappelle
des traitements "Formels" (ne sattachant qu la forme du texte et pas ce que nous nommons son "sens").
Il ne viendrait lide de personne, pour rsumer un texte, de se contenter de le rcrire en passant un mot
sur deux (ce qui constituerait un traitement purement formel). Pour rsumer un texte mon sens, nous
devons avoir saisi son "sens", avoir identifi les "ides" importantes ...
De mme pour traduire un texte, il ne suffit pas de consulter un lexique o chaque mot franais aurait son
quivalent anglais. Une telle attitude purement "formaliste", qui consiste remplacer (btement) un mot
par son correspondant, conduit des absurdits.
Nous pouvons donc retenir ceci :
Lordinateur nest capable que de traitements formels dinformations
Nous pourrons dlguer lordinateur lexcution de ces tches de traitement formel dinformations, condition quil dispose de la "marche suivre" qui le rende capable deffectuer ces tches. Et cest l le point
le plus important car lordinateur sans programme (marche suivre explicative) pour le gouverner nest
capable de rien ; et ceci est un principe fondamental.
Alors retenez ceci :
TOUT ce que fait un ordinateur, il le fait gouvern par une "marche suivre" qui est un programme

1.1.1

Lordinateur pour quel objectif

1.1. LORDINATEUR ET LA PROGRAMMATION

11

Lutilisateur voit dans lordinateur, quip des programmes convenables qui le feront agir, un outil
de travail : outil de traitement de texte : composer, modifier et prsenter du texte, outil de comptabilit,
outil pour grer les oprations demprunt de livre dans une bibliothque, outil pour dessiner ; etc.
Lobjectif cest dalors dapprendre se servir au mieux de loutil adapt une tche donne. La demande
exprime par lutilisateur potentiel, cest "apprenez-moi le mode demploi de tel outil". Ce qui lintresse,
cest essentiellement : "quelles donnes dois-je fournir ?" et "quels rsultats suis-je alors en droit dattendre
aprs le traitement qui y sera appliqu ?". Pour le reste lordinateur quip du programme (logiciel) qui le
gouverne pendant lutilisation, cest une bote noire.
Il est important de noter que ce que jappelle "outil" cest le tandem ordinateur-programme.
Un ordinateur "nu" sans programme nest capable de rien. Loutil, cest lordinateur gouvern par le programme(logiciel) de traitement de texte ou lordinateur conduit par le
programme (logiciel) de gestion de bibliothque, lordinateur quip du programme de
comptabilit, ect.

Le programmeur (lanalyste-programmeur) sintresse dabord au traitement proprement dit. Pour lui,


lordinateur est dabord un excutant qui il va devoir fournir la marche suivre (programme) "expliquant
de manire lmentaire" le traitement effectuer. Laccent est alors trs nettement plac sur la tche de
traitement quon souhaite faire faire par lordinateur. La programmation, cest essentiellement la cration
et la conception des outils (logiciels) qui seront utiliss par dautres.
Lordinateur du point de vu du programmeur cesse dtre une simple bote noire. Ce qui ne signifie nullement
quon se passionne pour la "quincaillerie" (hardware) lectronique qui le constitue : on y voit, non un ensemble
de circuits intgrs ou de portes logiques, mais travers le langage de programmation qui va le transfigurer,
un excutant capable dun certain nombre de traitements lmentaires et formels dinformations.
En rsumer : on peut soit sintresser ce dont lordinateur parat capable (quand il est quip du logiciel
ad hoc), soit au problme de le rendre capable de ces activits en concevant pour lui les programmes lui
"expliquant clairement" le traitement excuter.
De ces deux approches possibles du monde des ordinateurs, cest la seconde qui sera retenue et dveloppe
dans cet ouvrage.
1. Quest-ce que "PROGRAMMER"
2. Quelles sont les rgles qui gouvernent la conception des "marches suivre" qui nourriront lordinateur
3. Comment "dcortiquer" une tche pour la faire excuter ? ...

1.1.2

Programmer - Tche ou Problme

Aux exemples de traitements (formels) dinformations signals plus haut, on pourrait en ajouter bien dautres
comm :
1. Etre capable de rprer dans une srie de nombres quel est le plus petit et le plus grand
2. Lire un texte et signaler ensuite combien de fois un certain mot sy trouve
3. Lancer un d jusqu ce que le 6 apparaisse pour la troisime fois et annoncer alors combien de fois il
a fallu lancer le d pour cel
4. Ecrire un nombre en chiffre romains
5. Dcomposer un somme dargent en coupures

12

CHAPITRE 1. INTRODUCTION LA PROGRAMMATION


6. ...

La liste pourrait tre trs longue, ce quil faut noter est que toutes les activites voques constituent des
tches, souvent fastidieuses, mais aussi dune simplicit remarquable. Je nai jamais rencontr personne qui,
face au travail consistant trier 20 cartes fournies dans le dsordre, ait demand un long delai de rflexion
ou sen soit dclar incapable. Que dire de lactivit consistant additinner deux nombres par calcul crit
ou compter les dun text (cas tlgramme)
Tous ces exemples dcrivent des tches, souvent lmentaires, parfois risibles, tant elles paraissent dnues
de crativit et de la moindre rflexion. En tout cas personne nest qualifier de problme ces travaux
rudimentaires. Le mot PROBLEME charrie avec lui une aura de difficult, dinvention, de recherche que ne
mritent absolument pas les tches voques ci-dessus.
On ne rsout pas le problme de lancer un d jusquau moment o lon obtiendra trois 6 de suite, on
nanalyse pas longuement le problme consistant rprer si un nom est oui ou nom prsent dans une liste
trie alphabtiquement
Est-ce un problme le fait dindiquer un chemin a un touriste gar ?
Est-ce un problme le dapprendre son petit frre comment faire laddition et la soustraction ?
Il est donc faut de dire quen programmation on "rsout des problmes" ou mme que,
pour programmer, il faut dabord bien "analyser le problme pos". On sintresse le plus
souvent des tches (souvent assez btes et fastidieuses
On ne "resout" pa un tche on lEFFECTUE

Nous compltons en disant que PROGRAMME cest FAIRE FAIRE


Je nignore pas pourtant, que chacune des tches voques ci-dessus va tout de mme donner lieu un rel
problme lorsque la programmation va sen mler.
En effet, il sagira chaque fois pour le programmeur, non dexcuter ces tches lui-mme (ce qui le plus
souvent naurait intrt et serait affreusement fastidieux), mais de les faire excuter. Cest cela, programmer ! Il sagit, non seulement dtre capable de mener bien soi-mme une tche donne, mais dexpliquer
un autre comment il doit sy prendre pour excuter cette tche notre place.
Cest pourquoi je dis que :

PROGRAMMER cest FAIRE FAIRE


Cest cet instant que chacune des tches dcrites pose un vritable problme, ds quil sagit de faire faire
par un autre. Evidemment, la difficult dpend de manire cruciale des possibilits et des caractristiques de
celui qui va excuter la tche.
Voici les trois difficults que lon peut rencontrer
1. Lexcutant a des capacits limites.
2. On fait faire en diffr.
3. Lexcutant est un robot
Exemple de faire faire en diffr :
Lorsquil sagit dindiquer quelquun comment il peut parvenir en voiture jusque chez moi, cela ne pose
aucun problme lorsque je suis assis cte du conducteur pour lui donner "en direct" toutes les instructions

1.1. LORDINATEUR ET LA PROGRAMMATION

13

ncessaires. Mais, sil sagit de lui "expliquer" lavance comment se rendre seul chez moi, ceci ncessite
alors beaucoup plus de soin et de rigueur : fournir la "marche suivre" qui lui permettra darriver coup
sr est bien compliqu, surtout sil est born au point de ne pas savoir lire une carte de ville et moblige ainsi
transcrire par crit toutes les indications indispensables.
Programmer, cest donc rdiger une marche suivre pour faire faire une tche par un
excutant aux capacits limites

Le problme cest donc dtre capable de morceler une tche "complexe" (si on la compare aux possibilits
de lexcutant-ordinateur) en une succession de tches plus lmentaires (dont lexcutant est capable).
Lordre est trs important :
Il faut organiser la succession de ces dernires pour que, les effectuant dans lordre indiqu, lexcutant ait
finalement accompli la tche complexe initialement propose.

1.1.3

Les tapes du faire faire

Lessentiel de ces notes a pour but de nous apprendre comment faire faire une tche (de traitement formek
dinformations) par un "autre". La tche faire raliser est gnralement anodine. Le problme vient de
ce que celui qui nous souhaitons faire excuter ce travail nen est pas directement capable. Il nous faut
dcortique, morceler la besogne en une succesion dactions plus lmentaires correspondant aux capacits de
lexcutant. Ce dcorticage, ces explications sincarnent dans une marche suivre qui guidera son activit
lorsque nous exigerons quil effectue cette tche.
Sur le chemin qui conduira de la tche son excution par lordinateur, plusieurs tapes sont indispensables.
1. Quoi faire ?
2. Comment faire ?
3. Comment faire faire ?
4. Comment dire de faire ?
En effet la tche se prsentera gnralement dabord de manire trs floue. Il sera donc primordial, dans un
premier temps, daffiner sa description.
Exemple : face la tche dcrire un nombre en toutes lettres, une srie de questions viendront prciser ce
qui doit tre fait :
1. De quelle taille seront les nombres crire ? Plus petits que cent ? Infrieurs un million ? etc ...
2. Les nombres comporteront-ils une partie dcimale ? Si oui comment exprimer cette dernire.
3. Faut-il crire en majuscules ou en minuscules
4. ...
On le voit, mme pour un tche trs simple, il est indispensable de prciser ce qui est attendu.
Il est compltement illusoire de croire quon va pouvoir faire faire quelque chose par un
autre si lon ne sait pas prcisement ce quil faut faire (faire)

14

CHAPITRE 1. INTRODUCTION LA PROGRAMMATION

Cette tape du "Quoi faire ? " est celle de la recherche des spcifications. Cest celle qui nous fera passer de
la description floue de la tche sa description prcise.
Comme il sagira chaque fois de tches consistant traiter des informations, nous orienterons les questions
dans trois directions :
1. les donnes ncessaires au traitements envisag (Entres - leur forme, leur nombre ...)
2. les rsultats souhaits (forme, prsentation, ...)
3. le traitement (en quoi les rsultats sont lis aux donnes)
Dans la programmation telle quelle est vcue par les amateurs (ou les apprenants) la tche aborde et la
connaissance des possibilits offertes (par lexcutant) pour la traiter sont "dans la mme tte". Les questions
sont poses par celui qui connat aussi les rponses.
Dans la ralit professionnelle cest le contraire. Linformaticien (analyste) dbarque gnralement dans un
milieu quil ne connat pas et quil doit "informatiser". Il ny a pas grand chose de commun entre une
tche consistant grer le stock dun magasin de chaussures et celle de la gestion des emprunts dans une
bibliothque ou de lorganisation dun cabinet de dentiste. Et celui qui "sait" ce que recouvre prcisement
chacune de ces tches, cest le client (employ) qui ne sait pas quil sait : il est gnralement incapable
dexpliciter comment il sy prend actuellement et encore moins de dcrire exactement ce quil souhaite (il
"fait" mais ne sait pas "comment il fait"). Et en face de lui, il y a linformaticien qui, lui connat bien les
possibilits de lordinateur, mais ne sait pas ce quil doit en faire dans ce cas prcis.
En rsum, il y a dans une tte (celle de lemploy) les rponses, mais il ne sait pas quelles y sont ; et dans
une autre tte (celle de linformaticien) il y a des questions, mais il ne sait pas bien celles quil est pertinent
de poser.
Je peux alors conclure en disant :
Le bon informaticien nest pas celui qui commence par rapporter des rponses mais celui
qui pose dabord les bonnes questions

1.1. LORDINATEUR ET LA PROGRAMMATION


1.1.3.1

15

Comment faire ?

Il sagit ici de mettre au jour les stratgies employes : comment face la tche prcise nous y prenons-nous ?
Il y a malheureusement un monde entre "tre capable de ..." et "pouvoir expliquer comment on sy prend
pour ...".
Il existe une distance entre la capacit deffectuer une tche et la conscience quon a des stratgies mises en
oeuvre pour y parvenir.
Exemple : Si je vous demande dexpliquer comment vous vous y prenez pour trier un (petit) paquet de cartes
dans le dsordre, il est inutile que vous recommenciez nouveau lopration sous prtexte que jai mal vu.
Je sais fort bien que vous pouvez trier ce paquet de cartes et il ne sert rien de le faire et le refaire : ce
que jattends cest que vous expliquiez compltement et dans le dtail comment vous procdez, que vous
mettiez au jour les stratgies employes.
Cest ici quil faut tre capable de "faire le petit pas en arrire" que permet de se "regarder faire". Devenir
un "metteur en scne" mais pas un "acteur".
Mme pour des tches simples il nest pas simple dindiquer les stratgies employes. On remarque que les
tches pour lesquelles nous avons le plus de mal mettre au jour une stratgie sont probablement celles que
nous effectuons le plus automatiquement ou le plus inconsciemment.
Lattitude primordiale ici, cest dtre capable de passer de limplicite lexplicite.

16
1.1.3.2

CHAPITRE 1. INTRODUCTION LA PROGRAMMATION


Comment faire faire ?

Cest dans cette tape que nous allons rdiger la marche suivre destine lexcutant ordinateur.
Cest bien entendu ici que la connaissance des capacits de cet excutant devient indispensable. Cest seulement en sachant ce quil peut "comprendre" et faire que la rdaction dune marche suivre pend un sens.

1.1.3.3

Comment dire ?

A cette tape, nous allons exprimer le comment faire faire dans un langage particulier "comprhensible"
par lordinateur, dans un langage de programmation. Il y en a plusieurs (Basic, Pascal, Cobol, C, C++,
Delphi, Visual Basic, WinDev, Java, etc.).
Inutile de souligner que ces divers langages ne sont pas les ntes ! Aucun nest dailleurs non plus vraiment
celui de lordinateur ! On peut donc parler de langage compromis, puisque ayant choisi un langage de programmation, je ferai leffort dy exprimer mes marches suivre et que, par ailleurs, lordinateur acceptera
que je madresse lui dans ce langage qui nest pas vraiment le sien.
Cest dire que du point de vue de lordinateur, une autre traduction restera indispensable. Mais, heureusement, cest lui qui sen chargera. Ainqi, chacun "y met du sien" : jaccepte dexprimer mes marches suivre
dans un langage qui nest pas le mien et lordinateur, dont ce nest pas non plus le langage "naturel", accepte
de se charger de la traduction, pour dboucher sur une version qui, enfin sera la "sienne" et quil pourra
excuter.

1.1. LORDINATEUR ET LA PROGRAMMATION

17

Ces programmes particuliers capables de faire effectuer par lordinateur ces traductions sappellent des compilateurs ou des interprteurs.

Nous pouvons ainsi rsumer :


En programmation, il ne faut pas se tromper de cible. Programmer, cest de tout autre chose que matriser
les commandes dun ordinateur ou mme qutre spcialiste dun langage de programmation. Et la programmation est bien plus cousine de lorganisation des ides sous-jacente lart de la dissertation qu la
connaissance des rgles daccord du participe.
Il ne faut pas non plus me faire dire ce que je ne dis pas : la connaissance des rgles syntaxiques et orthographiques dun langage de programmation est indispensable ; sinon jamais on ne pourra exprimer les marches
suivre conue dans une version assimilable lordinateur et, faute de la matrise de cette tape du "Comment
dire ?", cest tout le processus qui est hypothqu. Mais ces connaissances "grammaticales", insdispensables
sont notoirement insuffisantes pour programmer correctement.

18

CHAPITRE 1. INTRODUCTION LA PROGRAMMATION

Chapitre 2

Les Constituants dune marche suivre


A lorigine de toute erreur attribue lordinateur, vous trouverez au moins deux erreurs humaines. Dont celle consistant attribuer lerreur lordinateur.

2.1

Les constituants dune marche suivre

Le premier chapitre nous montr que "programmer", cest "faire faire" et que le coeur de la dmache, ltape
centrale, cest la conception et la rdaction dune marche suivre, dans laquelle sexprime ce "faire faire".
Il nous faut donc, prsent dcouvrir quels sont les ingrdients dune marche suivre et commencer apprendre
comment elle se construit et scrit.

2.1.1

Les variables

Les variables peuvent tres considres comme des botes contenant des informations ncessaire au bon droulement
de lalgorithme.
Dans un programme informatique, on va avoir en permanence besoin de conserver provisoirement des valeurs. Ces
valeurs peuvent tre de plusieurs types (on en reparlera) : elles peuvent tre des nombres, du texte, etc. Toujours est-il
que ds que lon a besoin de garder (stocker) une valeur (information) au cours dun algorithme ou programme, on
utilise une variable (bote spcialise).
Pour avoir accs au contenu de la bote (variable), il suffit de la dsigner par son tiquette (son nom). Une tiquette
est un bout de papier ou autre chose coll sur la bote, nous permettant de reprer celle-ci facilement et daccder
son contenu.
Chaque variable possde un nom (identifiant) et un type. Ce dernier correspond au genre dinformation que lon
souhaite utiliser.
Une variable est donc un espace mmoire nomm, de taille fixe prenant au cours du droulement de lalgorithme
un nombre indfini de valeurs diffrentes. Ce changement de valeur se fait par lopration daffectation (note dans
notre langage algorithmique).

2.1.2

Dclaration des variables

Formalisme :

Variable <Liste Identificateur> : Type


La dclaration est une instruction permettant de rserver de lespace mmoire pour y stocker des donnes (dpend du
type de ces donnes : entiers, rels, caractres, etc :)

19

20

CHAPITRE 2. LES CONSTITUANTS DUNE MARCHE SUIVRE

La premire chose faire avant de pouvoir utiliser une variable est de crer lespace mmoire et de lui coller une
tiquette. Cest ce quon appelle la dclaration des variables.
Lorsquon dclare une variable, il ne suffit pas de crer un espace mmoire ; encore doit-on prciser ce que lon voudra
mettre dedans, car de cela dpendent la taille de lespace et le type de codage utilis (cest--dire les oprations que
lon pourra effectuer sur ces variables).
Exemple :
UnNombre : Entier
UnCar : Caractre
Nom, Prenom : Chanes de Caractres ou simplement Chanes
Synthse
La dclaration dune variable indique deux choses :
son identificteur (son nom)
son type (son domaine de dfinition)
1. Un identificateur peut tre compos de lettres et de chiffres mais il ne peut pas commencer par un chiffre et ne
peut comporter despaces.
2. Lidentificateur des variables doit tre suffisamment signifiant pour quon reconnaisse leur fonction aisement.

2.1.3

Les diffrents types en algorithme

Quest ce quun type ?


Un type permet de dfinir les diffrntes oprations ralisables sur les variables. Une variable qui na pas de type ne
peut tre utiliser dans un algorithme. Nous pouvons ainsi affirmer que toute variable doit forcment possder un type.
En algorithmique, on distingue les types suivants :
1. les entiers (les nombres sans virgule, Entier simple et Entier long)
2. les rels (les nombres virgule, Rel simple et Rel double)
3. les boolens (qui nont que deux valeurs possibles : soit VRAI soit FAUX)
4. les caractres (lettres, chiffres, ponctuation, code des oprations, espaces, retour chariot, ... et plus gnralement
toutes les touches que lon peut trouver sur le clavier)
5. les chanes pour manipuler des chanes de caractres permettant de reprsenter des mots ou des phrases.)
Les oprations possibles sur les variables dpendent forcment de leur type.
Entier

-10 3 689

Rel

15,6 0,36

Caractre
Chaine

B a c
"Bonjour" "9600"

Boolen

Vrai Faux

addition
soustraction
multiplication
division entire
modulo
comparaison
addition
soustraction
multiplication
division
comparaison
comparaison
concatnation
longueur
ngation
conjonction
disjonction

+
*
div
mod
<, >, <=, >=, <>
+
*
/
<, >, <=, >=, <>
<, >, <=, >=, <>

NON
ET
OU

2.1. LES CONSTITUANTS DUNE MARCHE SUIVRE

21

Remarque
Les oprateurs Div et Mod ne peuvent tre utiliss quavec des variables de type entier. Div la diffrence de la
division normale ne donne que la valeur avant la virgule du rsultat (quotient), tandisque Mod renvoie le reste de la
division.
Exemple
7/2 donne 3.5 - 7 Div 2 donne 3 et 7 Mod 2 donne 1

2.1.4
2.1.4.1

Syntaxe gnrale de lalgorithme


Vocabulaire de lalgorithme

Afficher, Saisir, Lire , Ecrire , Si , TantQue , Alors , Ftq , Faire , Fsi , Sinon ,SortirSi, Pour ,Rpter , Fpour ,
Jusqu , Algorithme , Type , Dbut , Fin
Un algorithme commence par le mot Algorithme suivi de son identificateur (le nom de lalgorithme), ensuite viennent
les dclarations dans lordre,
1. les constantes
2. les types personnaliss
3. les prototypes des procdures ou fonctions
4. les variables
5. entre Dbut et Fin le corps de lalgorithme
Dclaration dune constante : Pour dclarer une constante on indique son identificateur suivi du signe (=) et dune
valeur. Exp P i = 3.14.
Dclaration dune variable : La dclaration de la variable se fait par contre en indiquant son identificateur suivi
dun double point ( :) et de son type. Exp Rayon : Entier.
Le corps de lalgorithme commence par Debut et se termine par fin. On peut insrer des commentaires, soit aprs les
balises /* */, soit aprs // .

2.1.5

Instructions daffectation et expressions

1. Une instruction est la spcification dune ou de plusieurs actions portant sur une ou des variables. Linstruction
la plus commune est laffectation. Elle consiste doter une variable dune valeur appartenant son domaine,
cest dire lui donner une premire valeur ou changer sa valeur courante.
2. Une expression est une suite finie bien forme doprateurs portant sur des variables ou des valeurs et qui a
une valeur. La valeur de lexpression doit tre conforme au domaine de la variable affecte.

2.1.5.1

Linstruction daffectation

Laffectation consiste tout simplement placer dans une variable situe gauche du signe de laffectation, la valeur
de la variable ou des variables situes droite de ce mme signe (ce qui revient changer le contenu de la viriable
gauche du signe)
Le symbole de laffection est :
La nouvelle valeur est value partir dune expression qui peut tre :
soit une autre variable ou constante,
soit une valeur littrale
soit une combinaison de variables, de valeurs littrales et doprateurs
exemple
Supposons que rayon soit une variable de valeur 5 :

22

CHAPITRE 2. LES CONSTITUANTS DUNE MARCHE SUIVRE

2 * rayon * 3.14 est une expression qui vaut 31.4. Cest--dire 2*5*3.14
En algorithme On vite dutiliser le symbole = pour ne pas le confondre avec lgalit mathmatique.
Les instructions daffectation sont formes de deux parties :
1. A gauche du symbole on trouve toujours le nom dune et une seule variable destine recevoir une valeur et
une seule valeur.
2. A droite on trouve lexpression qui va donner la valeur quon veut affecter la variable en question
Rsum :
Linstruction daffectation agit en deux temps :
1. Tout dabord elle dtermine la valeur de lexpression droite du symbole
2. puis elle range le rsultat dans la variable situe gauche

2.2

Expressions et oprateurs

2.2.1

Expressions

Si on fait le point, on saperoit que dans une instruction daffectation, on trouve :


1. gauche de la flche, un nom de variable, et uniquement cela. En ce monde empli de doutes quest celui de
lalgorithmique, cest une des rares rgles dor qui marche tous les coups : si on voit gauche du signe dune
affectation autre chose quun nom de variable, on peut tre certain 100% quil sagit dune erreur.
2. droite du signe de laffectation, ce quon appelle une expression. Voil encore un mot qui est trompeur (voir plus
haut) ; en effet, ce mot existe dans le langage courant, o il revt bien des significations. Mais en informatique,
le terme dexpression ne dsigne quune seule chose, et qui plus est une chose trs prcise :
Une expression est une suite finie bien forme doprateurs portant sur des
variables ou des valeurs et qui a une valeur. La valeur de lexpression doit tre
conforme au domaine de la variable affecte.
Cette dfinition vous parat peut-tre obscure. Mais rflchissez-y quelques minutes, et vous verrez quelle recouvre
quelque chose dassez simple sur le fond. Par exemple, voyons quelques expressions. Ainsi :
1.
2.
3.
4.

7 est une constante mais plac droite du symbole devient une expression.
5 + 4 est une expression
123 45 + 844 est aussi une expression
N B1 12 + 5 N B2 est aussi une expression avec 2 variables NB1 et NB2

sont toutes des expressions valides, pour peu que NB1 et NB2 soient bien des variables contenant des nombres. Car
dans le cas contraire, la quatrime expression na pas de sens. En loccurrence, les oprateurs que jai employs sont
laddition (+) et la soustraction (-).
Revenons pour le moment sur laffectation. Une condition supplmentaire (en plus des deux prcdentes) de validit
dune instruction daffectation est que :
lexpression situe droite de soit du mme type que la variable situe gauche. Cest trs logique : on ne peut pas
ranger convenablement des outils dans un sac provision, ni des lgumes dans une trousse outils sauf provoquer
un rsultat catastrophique.

2.2.2

Oprateurs
Un oprateur est un signe qui relie deux valeurs, pour produire un rsultat.

Les oprateurs possibles dpendent du type des valeurs qui sont en jeu. Allons-y, faisons le tour, cest un peu fastidieux,
mais comme dit le sage au petit scarabe, quand cest fait, cest plus faire.

2.3. REMARQUES POUR TERMINER


2.2.2.1

23

Oprateurs numriques

Ce sont les quatre oprations arithmtiques tout ce quil y a de classique.


+ : addition
- : soustraction
* : multiplication
/ : division
Div : quotient entier (division de type entier)
Mod : reste entier (division de type entier)
Enfin, on a le droit dutiliser les parenthses, avec les mmes rgles quen mathmatiques. La multiplication et la
division ont "naturellement" priorit sur laddition et la soustraction. Les parenthses ne sont ainsi utiles que pour
modifier cette priorit naturelle.
Priorit des oprateurs
1. () premire priorit
2. * / DIV MOD deuxime priorit
3. + - troisime et dernire priorit
Cela signifie quen informatique, 12 3 + 5et(12 3) + 5 valent strictement la mme chose, savoir 41. Pourquoi ds
lors se fatiguer mettre des parenthses inutiles ?
En revanche, 12 (3 + 5) vaut 12 8 soit 96. Rien de difficile l-dedans, que du normal.

2.2.2.2

Oprateurs logiques (ou boolens) :

Il sagit du ET, du OU, du NON et du mystrieux (mais rarissime XOR).

2.3

Remarques pour terminer

Maintenant que nous sommes familiers des variables et que nous les manipulons, jattire votre attention sur la trompeuse similitude de vocabulaire entre les mathmatiques et linformatique. En mathmatiques, une "variable" est
gnralement une inconnue, qui recouvre un nombre non prcis de valeurs. Lorsque jcris :
y = 3x + 2
les "variables" x et y satisfaisant lquation existent en nombre infini (graphiquement, lensemble des solutions
cette quation dessine une droite).
En informatique, une variable possde un moment donn une valeur et une seule..

24

CHAPITRE 2. LES CONSTITUANTS DUNE MARCHE SUIVRE

Chapitre 3

Lecture - Ecriture
3.1
3.1.1

Dialogue Homme Machine


Afficher - Saisir

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 Saisir cette valeur. Et quand
on demande la machine dafficher une valeur, cest
pour que lutilisateur puisse la lire. Saisir et Afficher 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.

3.1.2

Linstruction AFFICHER

Pour que lutilisateur puisse lire un message lcran, il faut tout dabord que lordinateur crive ce message. Cela
sobtient avec linstruction Afficher. Cest aussi simple que : Demande au processeur dcrire le resultat quil a en
mmoire sur lcran.
Afficher est alors une instruction permettant de visualiser les informations places en mmoire.

Afficher "Donnez la longueur du rectangle"

On distingue trois manires dutiliser Afficher


1. Le processeur redonne exactement le message donn pendant la programmation par le programmeur comme si
le processeur repetait aprs le dveloppeur : Afficher "Message"
2. Le processeur affiche un rsultat : ici prsente lutilisateur le rsultat dune opration ou dun traitement
effectu : Afficher Rsultat. Il faut remarquer que Resultat doit tre une variable contenant une valeur.
3. En associant les deux, on obtient : Afficher "Message", Resultat

25

26

3.1.3

CHAPITRE 3. LECTURE - ECRITURE

Linstruction SAISIR

Pour que lordinateur puisse dialoguer avec lutilisateur, il faudrait que celui saississe son message laide du clavier.
Linstruction permettant lordinateur de dchiffrer ce que lutilisateur dit est linstruction : SAISIR.
SAISIR est une instruction permettant de placer en mmoire les informations fournies par lutilisateur.
Saisir LONG
Ds que le programme rencontre une instruction Saisir, lexcution sarrte et
attend que lutilisateur donne une valeur au clavier.
Ds lors, aussitt que la touche Entre (Enter) a t frappe, lexcution reprend. Il faut dir que le paramtre de cette
instruction est forcment une variable dclare
Avant de Saisir une variable, il est trs fortement conseill dcrire des libells (messages, indication suivre) lcran,
afin de prvenir lutilisateur de ce quil doit faire (sinon, le pauvre utilisateur passe son temps se demander ce que
lordinateur attend de lui et cest trs dsagrable !) :
Afficher "Entrez votre nom : "
Saisir NomFamille

3.1.4

Linstruction Constante ou Const

Cest une instruction permettant de rserver de lespace mmoire pour y stocker des donnes dont la valeur est fixe
pour tout lalgorithme.
Formalisme :
Const Identif icateur Expression
Exemple :
Const M aximum 100

3.1. DIALOGUE HOMME MACHINE

3.1.5
3.1.5.1

27

Reprsentation dun algorithme


Le Diagramme de Nassi-Shneiderman - NSD

Cest un ensemble de diagrammes qui nous permet


de reprsenter toutes les structures de base dun algorithme afin de suivre parfaitement la logique de
nos ides.
Le but principal dun diagramme de NassiShneiderman est de crer une structure logique (un
plan) pour le programme.
Ces diagrammes permettent de reprsenter des algorithmes et des fonctions de programme comme un
organigramme
Nous les verrons progressivement dans notre formation.

Raliser un algorithme, cest exprimer dans un langage prcis (langage algorithmique), les rgles de traitements dun
problme pour le soumettre un ordinateur en le traduisant dans un langage de programmation.
Les donnes dun algorithme sont mmorises dans des variables qui sont des cases mmoire. Une variable est un
contenant qui contient une et une seule valeur un moment donn.
Les instructions de bases pour reprsenter une squence sont :
laffectation () qui permet de changer la valeur dune variable
la saisie (Saisir) perment dassigner une variable, une valeur entre au clavier
laffichage (Afficher) permet dcrire le contenu dune variable ou dune expression lcran

3.1.5.2

Reprsentation dune squence en NSD

28

CHAPITRE 3. LECTURE - ECRITURE

voici un algorithme qui dtermine lge dune personne en fonction de lanne de naissance

Algorithme 3.1 : Calcul de lge


Const :
Annee = 2000
Var :
AnNaissance, Age : Entier
Debut
AnN aissance 0 Age 0 Afficher "Entrez votre anne de naissance"
Saisir AnNaissance
Age AnN aissance Annee Afficher "Vous avez ou aurez dans lanne", Age, "ans"
Fin
Analyse dun problme
Calcul de lintrt et de la valeur acquise par une somme place pendant un an intrt simple.
Formalisation de lalgorithme en franais.
Lexemple dcrit ci-dessus deviendrait :
1. prendre connaissance de la somme initiale et du taux dintrt
2. multiplier la somme par le taux ; diviser ce produit par 100 ; le quotient obtenu est lintrt de la somme
3. additionner ce montant et la somme initiale ; cette somme est la valeur acquise
4. afficher les valeurs de lintrt et de la valeur acquise.

Algorithme 3.2 : Intrt et valeur acquise


Var :
SommeInit : Entier
Taux : Entier
Interet : Rel
ValeurAcquise : Rel
Debut
Afficher "Donnez la somme initiale"
Saisir SommeInit
Afficher "Donnez le taux dintrt (ex : 5
pour 5%)
Saisir Taux
Interet SommeInit T aux/100
V aleurAcquise SommeInit + Interet
Afficher "La somme aprs un an sera
de",ValeurAcquise
Fin

Un autre Exemple
A partir dune quantit de produit achete un prix hors taxe on veut tablir la facture dun client dont on connat
le nom. La facture fera apparatre le nom, le montant hors taxe, et toute taxe sachant quon applique un taux de taxe
de 18%.

3.1. DIALOGUE HOMME MACHINE

29

Algorithme 3.3 : Facture client


Const :
T xT AXE = 0.18
Var :
QUANT : Entier
PRIHT : Rel
NOM : Chane
MONTHT : Rel
APAYER : Rel
TAXE : Rel
Debut
Afficher "Donnez la Quantit de produit"
Saisir QUANT
Afficher "Donnez le prix hors taxe du
produit
Saisir PRIHT
Afficher "Donnez le nom du client
Saisir NOM
M ON T HT QU AN T P RIHT
T AXE M ON T HT T xT AXE
AP AY ER M ON T HT + T AXE
Afficher NOM, MONTHT, APAYER
Fin

3.1.6

Exercices

1. Exprimer un nombre de secondes sous forme dheures, minutes, secondes. La seule donne est le nombre total
de secondes, les rsultats consistent en 3 nombres heures, minutes, secondes.
2. Lire 2 nombres a et b. Calculer et afficher leur moyenne.
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.
4. Lire le rayon R dune sphre. Calculer et afficher son AIRE = 4P IR2 et son V OLU M E = 43 P IR3
5. Lire au clavier le rayon R dun cercle et un angle A (en degr(s)). Calculer et afficher laire du secteur
2
A
CIRCU LAIRE = P IR
360
6. Lire la somme initiale S place sur un compte, lintrt I offert par la banque et le nombre n dannes de
placement de la somme S.
Calculez la valeur acquise par la somme S place pendant N annes avec un intrt simple : S(1 + N I) et
compos : S(1 + i)N
7. Lire 2 nombres A et B. Mettre le contenu de A dans B et celui de B dans A.

30

3.2

CHAPITRE 3. LECTURE - ECRITURE

Les chanes de caractres

Une chane de caractres est une suite de caractres Un caractre est une lettre de lalphabet (majuscules ou minuscules).
Le type chane permet de dcrire des objets forms par la juxtaposition de plusieurs caractres. Dans la plupart des
langages de programmation, il existe des "outils" pour les manipuler. Au niveau des algorithmes, nous introduisons
quelques fonctions prdfinies qui correspondent aux "outils" classiquement fournis par les langages. Cette liste partielle
peut bien sr tre complte en fonction de vos besoins.
Exemple de chane de caractres
"Abidjan"
"Bonjour"
"Entrez un nombre"
"Entrez votre nom"
"Il est 12 heures"
Relation dordre
A < a : selon le code ASCII A = 65 et a = 97 et 65 < 97
2001 < 2006
A < Z
2001 < 3 : le 1er "2" est infrieur au caractre "3"

3.2.1
3.2.1.1

Quelques fonctions sur les chanes de caractres


Concatnation de chanes

fonction concat(ch1 :chane, ch2 :chane) :chane


retourne une chane forme par la concatnation de ch1 et de ch2. La chane rsultat est forme de ch1 suivi de ch2.
Exemple : concat("EST"," LOKO") donnera "EST LOKO"

3.2.1.2

Longueur dune chane

fonction Longueur(ch :chane) :entier


retourne la longueur de la chane ch cest--dire le nombre de caractres dont elle est constitue.
Exemple longueur("EST LOKO") donner 6 . Il faut noter que le vide entre EST et LOKO est aussi compter comme
un caractre

3.2.1.3

Sous-chane

fonction SousChane(ch :chane, pos : entier, long : entier) :chane


retourne une sous-chane de longueur long extraite de la chane ch, la position pos.
exemple : sousChane("informatique"", 6, 2) retourne la chane "ma".

3.2.1.4

Carctre associ au code ASCII

fonction Caract(Code : Entier) : caractre

3.2. LES CHANES DE CARACTRES

31

Renvoie le caractre correspondant au code ASCII spcifi. Le code ASCII utilis correspond la norme ANSI utilise
par Windows.
Exemple : Caract(87) donne comme rsultat la lettre majuscule "W"

3.2.1.5

code ASCII dun caractre

fonction Asc(Ch : Caractre) : Entier


Renvoie le code ASCII du caractre spcifi. Le code ASCII utilis correspond la norme ANSI de Windows.
Exemple : Asc("A") donne comme rsultat le chiffre 65

3.2.1.6

Transformation de chanes

fonction NumVersChane(Nombre : variant) : chane


Transforme un numrique (entier, rel) en une chane de caractres.
NumVersChane(123) donnera la chane "123"
NumVersChane(1.23) donnera la chane "1.23"

3.2.1.7

Comparer deux chanes

fonction ChaneCompare(ch1 : chane, ch2 : chane) : Entier


Compare caractre par caractre deux chanes :
selon lordre des caractres ASCII.
selon lordre lexicographique.
Aprs la comparaison on obtient le rsultat suivant :
1. 0 si les chanes de caractres sont gales.
2. -1 si les caractres de ch1 sont infrieurs aux caractres de ch2 dans lordre des caractres ASCII ou dans lordre
lexicographique.
3. 1 si les caractres de ch1 sont suprieurs aux caractres de ch2 dans lordre des caractres ASCII ou dans lordre
lexicographique.

3.2.1.8

Mettre en majuscule

fonction Majuscule(Ch : Chane) : Chane


Convertit une chane de caractres en majuscules.
Majuscule("abcd") donne comme rsultat "ABCD"

32

CHAPITRE 3. LECTURE - ECRITURE

Chapitre 4

Les Structures de base


4.1

La structure de choix

4.1.0.9

Introduction

Les algorithmes dcrits dans les chapitres prcdents taient trs simples et une simple calculatrice aurait suffi pourleur
excution. A ce stade de notre connaissance, notre question est la suivante : Comment oprer un choix entre deux
instructions, comment choisir une action par rapport une autre selon une condition. Pour rpondre notre question,
il nous faut introduire dautres structures.
Il a t dmontrer que pour reprsenter nimporte quel algorithme, il faut disposer des trois possibilit suivantes :
1. la structure de squence qui indique que les oprations doivent tre excutes les unes aprs les autres.
2. la structure de choix qui indique quel ensemble dinstructions doit tre excut suivant les circonstances
3. la structure de rption ou boucle qui indique quun ensemble dinstructions doit tre excut plusieurs fois

4.1.0.10

Si . . . Alors . . . Sinon

"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
Dans le droulement dun algorithme, on doit pouvoir choisir une action entre deux suivant une condition concernant
la valeur de certaines donnes. La structure utilise est dite structure alternative

Si Expression Alors
Traitement 1
Sinon
Traitement 2
FSi

33

34

CHAPITRE 4. LES STRUCTURES DE BASE

La question a se poser est la suivante : Est ce que


N est suprieur 0 ? notre rponse est videmment
Oui car N est gal 10. La lecture du schma devient
alors :
Si N est suprieur 0 Alors a marche sinon (dans
le cas ou N nest pas suprieur 0) impossible.

Exemple : Ecrivons un algorithme affichant un message qui prcise si le nombre donn par un utilisateur
est positif, ngatif ou nul.

Ici lalgorithme en langage algorithmique

Algorithme 4.1 : Test Si alors sinon


Var :
Nombre : Entier
Debut
Afficher "Entrez un nombre quelconque :"
Saisir Nombre
Si Nombre > 0 Alors
Afficher "Valeur positive"
Sinon
Afficher "Valeur ngative ou nulle"
FinSi
Fin

4.1. LA STRUCTURE DE CHOIX

35

Rappelons que les traitements apparaissant aprs le mots Alors et Sinon peuvent tre constitus dune instruction
simple, comme dans notre premier exemple, mais aussi dun ensemble dinstructions appel bloc dinstructions
Exemple :
Nous voulons crire un algorithme qui mmorise et affiche la somme ou le produit de 2 nombres, suivant le choix de
lutilisateur. Lalgorithme doit saisir les 2 nombres ainsi que une lettre reprsentant lopration effectuer. Si la lettre
est S (comme Somme), il calcule et affiche la somme et si la lettre est P (ou tout autre lettre), il calcule et affiche le
produit

Algorithme 4.2 : Test


Var :
NB1, NB2, Res : Entier
OP : Car
Debut
N B1 0
N B2 0
Res 0
Op
Afficher "Entrez un premier nombre quelconque :"
Saisir NB1
Afficher "Entrez un deuxime nombre quelconque :"
Saisir NB2
Afficher "Entrez la lettre de lopration :"
Saisir Op
Si Op = S Alors
Res N B1 + N B2
Afficher "La somme est",Res
Sinon
Res N B1 N B2
Afficher "Le produit est ",Res
FinSi
Fin

36
4.1.0.11

CHAPITRE 4. LES STRUCTURES DE BASE


Si . . . Alors

Cette structure est utilise dans le cas ou il ny a pas dinstructions


la gauche de la structure. Dans le cas du Sinon il ny a aucune
action raliser.

Si Expression Alors
Instructions 1
FSi

Exemple : Dans un algorithme de calcul


dune facture, on veut effectuer une remise de
10% si le montant des achats est suprieur
100 000FCFa. Si le montant est infrieur 100
000FCfa, il ny a aucune remise faire.

4.1. LA STRUCTURE DE CHOIX

37

Algorithme 4.3 : Test


Var :
Montant, Remise : Entier
Debut
M ontant 0
Remise 0
Afficher "Entrez le montant :"
Saisir Montant
Si Montant > 0 Alors
Remise M ontant (10/100)
Afficher "La remise est",Remise
FinSi
Fin

4.1.1

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

4.1.1.1

Les types boolens

Se sont des types dont le rsultat de la variable de peut tre Vrai ou Faux. Pas de rsultat numrique ou chanes.
Afin danalyser et de trouver la bonne rponse une variable de type boolen, nous utilisons la table de vrit ou
porte logique :

C1 et C2
C1 Vrai
C1 Faux

C2 Vrai
Vrai
Faux

C1 XOR C2
C1 Vrai
C1 Faux

C2 Faux
Faux
Faux

C2 Vrai
Faux
Vrai

C2 Faux
Vrai
Faux

C1 Ou C2
C1 Vrai
C1 Faux
NON C1
C1 Vrai
C1 Faux

C2 Vrai
Vrai
Vrai

Faux
Vrai

C2 Faux
Vrai
Faux

38

CHAPITRE 4. LES STRUCTURES DE BASE

Exemple : Vrifier si un nombre donn est compris dans lintervalle 5-10 ou 15-20

Algorithme 4.4 : Intervalle


Var :
Appartient : Boolen
Nombre : Entier
Debut
N ombre 0
Appartient F aux
Afficher "Entrez un nombre quelconque :"
Saisir Nombre
Appartient (N ombre > 5ET N ombre < 10)OU (N ombre > 15ET N ombre < 20)
Si Appartient Alors
Afficher "Le nombre appartient lintervalle"
Sinon
Afficher "Le nombre nappartient pas lintervalle"
FinSi
Fin
Analyse : Nombre = 6. Ce nombre appartient lintervalle car il est selon la condition pose suprieur 5 et infrieur
10. De ce fait N ombre > 5 ET N ombre < 10 est Vrai.
Ce nombre nest pas suprieur 15 mais il est infrieur 20. De ce fait N ombre > 15 ET N ombre < 20 est Faux.
Dcomposition :
1. N ombre > 5 = Vrai ET N ombre < 10 = Vrai. Selon la table de vrit Vrai ET Vrai = Vrai.
2. N ombre > 15 = Faux ET N ombre < 20 = Vrai. Selon la table de vrit Faux ET Vrai = Faux.
3. En conclusion toujours selon la table de vrit : Vrai OU Faux donne Vrai.
4. Rponse : Le nombre 6 appartient lintervalle.

4.1.1.2

Conditions composes

Certains problmes exigent parfois de formuler des conditions qui ne peuvent pas tre exprimes sous la forme simple
expose ci-dessus. Reprenons le cas "Toto est inclus entre 5 et 8". En fait cette phrase cache non une, mais deux
conditions. Car elle revient dire que "Toto est suprieur 5 et Toto est infrieur 8". Il y a donc bien l deux
conditions, relies par ce quon appelle un oprateur logique, le mot ET.
Linformatique met notre disposition quatre oprateurs logiques : ET, OU, NON, et XOR.
1. Le ET a le mme sens en informatique que dans le langage courant. Pour que "Condition1 ET Condition2" soit
VRAI, il faut imprativement que Condition1 soit VRAI et que Condition2 soit VRAI. Dans tous les autres cas,
"Condition 1 et condition2" sera faux.
2. Il faut se mfier un peu plus du OU. Pour que "Condition1 OU Condition2" soit VRAI, il suffit que Condition1
soit VRAIE ou que Condition2 soit VRAIE. Le point important est que si Condition1 est VRAIE et que
Condition2 est VRAIE aussi, Condition1 OU Condition2 reste VRAIE. Le OU informatique ne veut donc pas
dire "ou bien"
3. Le XOR (ou OU exclusif) fonctionne de la manire suivante. Pour que "Condition1 XOR Condition2" soit VRAI,
il faut que soit Condition1 soit VRAI, soit que Condition2 soit VRAI. Si toutes les deux sont fausses, ou que
toutes les deux sont VRAI, alors le rsultat global est considr comme FAUX. Le XOR est donc lquivalent
du "ou bien" du langage courant. Jinsiste toutefois sur le fait que le XOR est une raret, dont il nest pas
strictement indispensable de sencombrer en programmation.
4. Enfin, le NON inverse une condition : NON(Condition1)est VRAI si Condition1 est FAUX, et il sera FAUX si
Condition1 est VRAI. Cest lquivalent pour les boolens du signe "moins" que lon place devant les nombres.
Alors, vous vous demandez peut-tre quoi sert ce NON. Aprs tout, plutt qucrire NON(Prix > 20), il serait

4.1. LA STRUCTURE DE CHOIX

39

plus simple dcrire tout bonnement Prix<=20. Dans ce cas prcis, cest vident quon se complique inutilement
la vie avec le NON. Mais si le NON nest jamais indispensable, il y a tout de mme des situations dans lesquelles
il savre bien utile.
On reprsente frquemment tout ceci dans des tables de vrit (C1 et C2 reprsentent deux conditions, et on envisage
chaque fois les quatre cas possibles)

4.1.2

Tests imbriqus

Graphiquement, on peut trs facilement reprsenter un SI comme un (aiguillages) changeur routier. Un SI ouvre donc
deux voies, correspondant deux traitements diffrents. Mais il y a des tas de situations o deux voies ne suffisent
pas. Par exemple, un programme devant donner ltat de leau selon sa temprature doit pouvoir choisir entre trois
rponses possibles (solide, liquide ou gazeuse).
Une premire solution serait la suivante :

Algorithme 4.5 : Etat de leau


Var :
Temp : Entier
Debut
Afficher "Entrez la temprature de leau :"
Saisir Temp
Si Temp <= 0 Alors
Afficher "cest de la glace"
FinSi
Si Temp > 0 ET Temp < 100 Alors
Afficher "cest du liquide"
FinSi
Si Temp > 100 Alors
Afficher "cest de la vapeur"
FinSi
Fin

40

CHAPITRE 4. LES STRUCTURES DE BASE

Vous constaterez que cest un peu laborieux. Les conditions se ressemblent plus ou moins, et surtout on oblige la
machine (processeur) examiner trois tests successifs alors que tous portent sur une mme chose, la temprature de
leau (la valeur de la variable Temp). Il serait ainsi bien plus rationnel dimbriquer les tests de cette manire :

Algorithme 4.6 : Etat de leau Test imbriqu


Var :
Temp : Entier
Debut
Afficher "Entrez la temprature de leau :"
Saisir Temp
Si Temp <= 0 Alors
Afficher "cest de la glace"
Si Temp < 100 Alors
Afficher "cest du liquide"
Sinon
Afficher "cest de la vapeur"
FinSi
FinSi
Fin

Nous avons fait des conomies : au lieu de devoir taper trois conditions, dont une compose, nous navons plus que
deux conditions simples. Mais aussi, et surtout, nous avons fait des conomies sur le temps dexcution de lordinateur.
Si la temprature est infrieure zro, celui-ci crit dornavant "Cest de la glace" et passe directement la fin, sans
tre ralenti par lexamen dautres possibilits (qui sont forcment fausses).
Cette deuxime version nest donc pas seulement plus simple crire et plus lisible, elle est galement plus performante
lexcution.
Les structures de tests imbriqus sont donc un outil indispensable la simplification et loptimisation des algorithmes.

Algorithme 4.7 : Etat de leau Test optimis


Var :
Temp : Entier
Debut
Afficher "Entrez la temprature de leau :"
Saisir Temp
Si Temp <= 0 Alors
Afficher "cest de la glace"
Sinon Si Temp < 100 Alors
Afficher "cest du liquide"
Sinon
Afficher "cest de la vapeur"
FinSi
FinSi
Fin

4.1. LA STRUCTURE DE CHOIX


4.1.2.1

41

Le Choix multiple : Selon ... Faire

La structure Selon ... Faire permet de choisir le traitement effectuer en fonction de la valeur de lexpression. Cette
structure remplace avantageusement une succession de la structure Si ... Alors.
Selon Expression faire
cas Valeur 1 de lexpression : Traitement 1
cas Valeur 2 de lexpression : Traitement 2
cas Valeur 3 de lexpression : Traitement 3
Exemple :
Voici une partie dun algorithme qui affiche le mois en lettre en fonction du numro de mois donn.
Selon Mois faire
cas 1 : Afficher "Janvier"
cas 2 : Afficher "Fvrier"
cas 3 : Afficher "Mars"
cas 4 : Afficher "Avril"
cas 5 : Afficher "Mai"
cas 6 : Afficher "Juin"
cas 7 : Afficher "Juillet"
cas 8 : Afficher "Aot"
cas 9 : Afficher "Septembre"
cas 10 : Afficher "Octobre"
cas 11 : Afficher "Novembre"
cas 12 : Afficher "Dcembre"
Autre
Afficher "Un numero de mois doit tre compris entre 1 et 12"
Sil y a plus de deux choix possibles, linstruction selonpermet une facilit dcriture.
Autre exemple : Comparez vous-mme
Reprsentation 1 :

Si Abrviation = "M" Alors


Afficher "Monsieur"
Sinon Si Abrviation = "Mme" Alors
Afficher "Madame"
Sinon Si Abrviation = "Mlle" Alors
Afficher "Mademoiselle"
Sinon
Afficher "Madame, Monsieur"

42

CHAPITRE 4. LES STRUCTURES DE BASE

Reprsentation 2 :
Si Abrviation = "M" Alors
Afficher "Monsieur"
Sinon Si Abrviation = "Mme" Alors
Afficher "Madame"
Sinon Si Abrviation = "Mlle" Alors
Afficher "Mademoiselle"
Sinon
Afficher "Madame, Monsieur"

Reprsentation 3 :
Selon Abrviation faire
cas "M" : Afficher "Monsieur"
cas "Mme" : Afficher "Madame"
cas "Mlle" : Afficher "Mademoiselle"
Autre
Afficher "Madame, Monsieur"

Autre exemple : A partir dune moyenne annuelle entire, on veut dterminer lavis formuler sur les rsultats obtenus
par un tudiant. Lalgorithme est le suivant :
Si la moyenne est 0,1,2,3,4,5 lavis est nul
6, 7 trs insuffisant - 8, 9 insuffisant - 10, 11 moyen - 12, 13 assez bien - 14, 15, 16 bien - 17, 18 trs bien

Algorithme 4.8 : Avis


Var :
Moyenne : Entier
Avis : Chane
Debut
M oyenne 0 Afficher "Entrez la moyenne :"
Saisir Moyenne
Selon Moyenne faire
cas 0..5 : Avis N ul
cas 6,7 : Avis "Trs Insuffisant"
cas 8, 9 : Avis Insuffisant"
cas 10, 11 : Avis "Moyen"
cas 12, 13 : Avis "Assez Bien"
cas 14..16 : Avis "Bien"
cas 17..20 : Avis "Trs Bien"
Autre Afficher "Moyenne doit tre nombre entier"
FSelon
Fin

4.1. LA STRUCTURE DE CHOIX

4.1.3

43

Exemple de chane de caractres

4.1.3.1

Exemple - 1 : Dcodage

Dans une entreprise chaque employ possde un code personnel alphanumrique compos de sept caractres.
1. Les deux premiers code reprsentent lanne dembauche.
2. Les trois codes suivants le numro dembauche.
3. Le sixime code le titre de la personne
(a) 0 pour Madame
(b) 1 pour Mademoiselle
(c) 2 pour Monsieur
4. Le septime code reprsente le service de travail
(a) 0 pour la direction
(b) 1 pour le secrtariat
(c) 2 pour la comptabilit
(d) 3 pour linformatique
(e) 4 pour lentretien
(f) 5 pour la production
9

3 On veut obtenir la phrase suivante :

Mademoiselle AMENA Annie travaille au service informatique.


Rappel : Une application nest dfinitivement valide quaprs avoir subi une phase de tests par lintermdiaire dun
choix judicieux de jeux dessai (chantillon de donnes correspondants la ralit du problme traiter).

44

CHAPITRE 4. LES STRUCTURES DE BASE

Algorithme 4.9 : DecodeCode


Var :
CODE : Chane //code de lemploy dcoder
Nom : Chane //Nom de lemploy
Prenoms : Chane //Prnoms de lemploy
Titre : Chane //Titre de lemploy
Service : Chane //Service de lemploy
Debut
Afficher "Ce programme dcode le code de lemploy"
Afficher "Donnez le nom de lemploy
Saisir Nom
Afficher "Donnez le prnoms de lemploy
Saisir Prenoms
Afficher "Donnez le code de lemploy
Saisir CODE
//Dcodage
//Recherche du titre de lemploy
Si SousChane(CODE, 6, 1) =0 00 Alors
T itre M adame
Sinon
Si SousChane(CODE, 6, 1) =0 10 Alors
T itre M ademoiselle
Sinon
T itre M onsieur
FinSi
FinSi
//Recherche du service
Si SousChane(CODE, 7, 1) =0 00 Alors
Service direction
Sinon
Si SousChane(CODE, 7, 1) =0 10 Alors
Service secrtariat
Sinon
Si SousChane(CODE, 7, 1) =0 20 Alors
Service comptabilit
Sinon
Si SousChane(CODE, 7, 1) =0 30 Alors
Service inf ormatique
Sinon
Si SousChane(CODE, 7, 1) =0 40 Alors
Service entretien
Sinon
Service production
FinSi
FinSi
FinSi
FinSi
FinSi
Afficher Titre,Nom,Prenoms," travail au service ",Service)
Fin

4.1. LA STRUCTURE DE CHOIX

4.1.4

45

Exercices

1. Composez un algorithme qui calcule et afficche le montant de la facture dlectricit dun abonn
sachant quil paye des frais fixes dabonnement slevant 2 500 FCfa (mme sil na rien consomm)
et que la grille de tarification est la suivante :
(a) 500 F Cfa par KWh pour les 100 premiers KW
(b) 350 F Cfa par KWh pour les 150 KW suivants
(c) 200 F CFa par KWh pour la fraction de la consommation qui excde les 250 KW
2. Ecrire un algorithme qui lit un nombre quelconque et laffiche si et seulement si ce nombre est positif
3. Ecrire un algorithme pour rsoudre lquation suivante : AX + B = 0
4. Ecrire un algorithme pour rsoudre lquation suivante : AX 2 + BX + C = 0

46

CHAPITRE 4. LES STRUCTURES DE BASE

4.2

Les structures itratives (les Boucles)

Il arrive souvent dans un algorithme ou programme quune mme action soit rpte plusieurs fois, avec
ventuellement quelques variations dans les paramtres qui prcisent le droulement de laction. Il est alors
fastidieux dcrire un algorithme qui contient de nombreuses fois la mme instruction. De plus, ce nombre
peut dpendre du droulement de lalgorithme. Il est alors impossible de savoir lavance combien de fois
la mme instruction doit tre dcrite. Pour grer ces cas, on fait appel des instructions en boucle qui ont
pour effet de rpter plusieurs fois une mme instruction.
Deux formes existent :
1. Si le nombre de rptitions est connu avant lexcution de linstruction de rptition boucle POUR.
2. Si le nombre de rptition nest pas connu. On utilise la boucle TANTQUE ou la boucle REPETE
Les boucles, cest gnralement le point douloureux de lapprenti programmeur. Cest l que a coince,
car autant il est assez facile de comprendre comment fonctionnent les boucles, autant il est souvent long
dacqurir les rflexes qui permettent de les laborer judicieusement pour traiter un problme donn.
Il existe trois grands types principaux de structures rptitives :
1. la structure TantQue . . . Faire, qui permet deffectuer une instruction tant quune condition est
satisfaite
2. la structure Pour qui permet de rpter une instruction un certain nombre de fois
3. la structure Rpter . . . Jusqu, qui comme son nom lindique, permet de rpter une instruction
jusqu ce quune condition soit satisfaite.

Soit lexemple suivant :


Calculez la somme de 4 nombres entrs au clavier en vous servant de 2 variables : une pour reprsenter successivement chacune des valeurs lues et une pour reprsenter la somme des
quatre valeurs.
On constate quun bloc de 2 instructions est rpt 4 fois (Saisir
Nombre et Somme Somme + N ombre). Un tel programme
peut tre simplifi par une structure rptitive.

Une structure rptitive ou itrative permet de faire excuter un bloc dinstructions un certain nombre
de fois. Ce nombre de rptitions est fix par une condition darrt.

4.2. LES STRUCTURES ITRATIVES (LES BOUCLES)


4.2.0.1

47

La boucle POUR

Il est frquent que le nombre de rptitions soit connu lavance, et que lon ait besoin dutiliser le numro
de litration afin deffectuer des calculs ou des tests. Le mcanisme permettant cela est la boucle Pour.
Elle a le formalisme suivant :

Le fonctionnement est le suivant :


La variable nomme <VAR> dans notre formalisme va prendre successivement toutes les valeurs entires
entre la lexpresion ou constante ValInit considre comme valeur de dpart et ValFin qui la valeur finale.
Pour chaque valeur prise par cet intervalle, la liste des instructions est excute. La valeur utilise pour
numrer les itrations est appele valeur ditration, indice ditration ou compteur. Lincrmentation
par 1 de la variable est implicite.
Exemple 1 :
Algorithme 4.10 : Multiplication par 9
Debut
Afficher
Afficher
Afficher
Afficher
Afficher
Afficher
Afficher
Afficher
Afficher
Afficher
Fin

19
29
39
49
59
69
79
89
99
10 9

Il est plus simple dutiliser une boucle avec


un compteur prenant dabord la valeur 1, puis
augmentant peu peu jusqu atteindre 10.
Algorithme 4.11 : Multiplication pa 9
Var :
I : Entier
Debut
Pour I 1 A 10 Faire
Afficher I 9
FPour
Fin

48

CHAPITRE 4. LES STRUCTURES DE BASE

Exemple 2 :
On veut imprimer, pour N donn, la somme des carrs des N premiers entiers
S=

N
X

X2

i=1

Algorithme 4.12 : Somme


Var :
N,I, Somme : Entier
Debut
N 0
Afficher "Donnez le nombre N"
Saisir N
Pour I 1 A N Faire
Somme Somme + 1
FPour
Afficher "La somme est : ", Somme
Fin
Exemple 3 :
Ecrire lalgorithme qui permet dimprimer le maximum de N entiers positifs donns au fur et mesure.
Comment initialiser la suite maximum ? Il faut que maximum1 prenne la valeur nombre1 . Il suffit alors
de choisir une valeur de maximum0 plus petite que tout entier positif, par exemple maximum0 = 1, de
manire assurer que maximum1 aura bien nombre1 pour valeur. Il sagit dune initialisation un terme
artificiel.
Algorithme 4.13 : calcul par rcurrence
Var :
N, Maximum, Nombre, I : Entier
Debut
N 0
N ombre 0
M aximum 1
Afficher "Combien de nombre voulez
vous saisir"
Saisir N
Pour I 1 A N Faire
Afficher "Donnez un nombre"
Saisir Nombre
Si N ombre > M aximum Alors
M aximum N ombre
FinSi
FPour
Afficher Maximum
Fin

4.2. LES STRUCTURES ITRATIVES (LES BOUCLES)

49

Exemple 4 :
Le calcul de lpargne obtenue pour les 5 prochaines annes scrit alors ainsi :
Algorithme 4.14 : Epargne des 5 prochaines annes avec la boucle pour
Var :
Montant : Rel //Montant de lpargne
NombreAnnees : Entier //Nombre danne
Debut
M ontant 100000
Pour N ombreAnnees 1 A 5 Faire
M ontant M ontant 1, 0825
Afficher "Montant : ", Montant, "dans ", NombreAnnees, " an(s)"
FPour
Afficher "Fin"
Fin
Calculer la N me puissance entire dun nombre x par multiplications successives du nombre par lui-mme.
Ici, le nombre de rptition (N) de linstruction de multiplication est connu.
Algorithme 4.15 : X N
Var :
N, I : Entier
X, Puissance : Rel
Debut
P uissance 1
Pour I 1 N 5 Faire
P uissance P uissance X
FPour
Afficher "La puissance",N,"me
de",X,"est",puissance
Afficher "Fin"
Fin

Smantique de la boucle pour :


Implicitement, linstruction pour :
1. initialise une variable de boucle (le compteur)
2. incrmente cette variable chaque pas de 1
3. vrifie que cette variable ne dpasse pas la borne
suprieure

50
4.2.0.2

CHAPITRE 4. LES STRUCTURES DE BASE


La Boucle TantQue

Lutilisation dune boucle Pour ncessite de connatre lavance le nombre ditrations dsir, cest--dire la
valeur finale du compteur. Dans beaucoup de cas, on souhaite rpter une instruction tant quune certaine
condition est remplie, alors quil est priori impossible de savoir lavance au bout de combien ditrations
cette condition cessera dtre satisfaite. Le mcanisme permettant cela est la boucle TantQue our la boucle
Rpter jusqu. Nous allons nous focaliser sur la boucle TantQue.
Syntaxe :
TantQue Condition Faire
Traitement
Ftq
Cette structure a une condition de poursuite dont la valeur est de type boolen et une liste dinstructions
qui est rpte si la valeur de la condition de poursuite est vraie : la liste dinstructions est rpte autant
de fois que la condition de poursuite a la valeur vraie.
Etant donn que la condition est value avant lexcution des instructions rpter, il est possible que
celles-ci ne soient jamais excutes. Il faut que la liste des instructions ait une incidence sur la condition
afin quelle puisse tre value faux et que la boucle se termine. Il faut toujours sassurer que la condition
devient fausse au bout dun temps fini. Nous parlerons alors de la variation de la condition ou changement
dtat de la condition.
Le fonctionnement de la boucle est le suivant :

La condition, qui est une expression boolenne, est value. Si elle est fausse, on sort de la boucle et on
passe linstruction suivant la fin de cette boucle, sinon les instructions dan la boucle sont excutes et la
condition est de nouveau value.

4.2. LES STRUCTURES ITRATIVES (LES BOUCLES)

51

Application
On veut laisser un utilisateur construire des rectangles de taille quelconque, condition que les largeurs quil
saisit soient suprieures 10 cm. On peut utiliser une rptition conditionnelle qui permet de redemander
lutilisateur de saisir une nouvelle valeur tant que celle-ci nest pas valide.
Algorithme 4.16 : Rectangle
Var :
Largeur, Longueur : Entier
Debut
Largeur 0
Longueur 0
Afficher "Donnez la largeur du rectangle"
Saisir Largeur
TantQue Largeur < 10 Faire
Afficher "erreur : indiquez une valeur
strictement suprieure 10"
Afficher "Donnez la largeur du
rectangle"
Saisir Largeur
Ftq
Afficher "Fin"
Fin
Exemple 2 :
Un poissonnier sert un client qui a demand 1Kg de poisson. Il pse successivement diffrents poissons et
sarrte ds que le poids total gale ou dpasse 1Kg. Donner le nombre de poissons servis.
Remarque sur la terminaison :
Ce problme est typique des cas o le dernier terme (celui qui fait basculer le test) doit tre retenu
Algorithme 4.17 : Nb Poisson
Var :
PoidsTotal, NbPoissons, PoidPoisson : Entier
Debut
P oidsT otal 0
N bP oissons 0
P oidP oisson 0
Afficher "Combien pse le poisson"
Saisir PoidPoisson
N bP oissons 1
TantQue P oidsT otal < 1000 Faire
Afficher "Combien pse le poisson
suivant"
Saisir PoidPoisson
P oidsT otal
P oidsT otal + P oidP oisson
N bP oissons N bP oissons + 1
Ftq
Afficher NbPoissons
Fin

52

CHAPITRE 4. LES STRUCTURES DE BASE

La condition darrt est la variable PoidTotal qui doit aprs traitement tre gal ou suprieur 1Kg = 1000g
selon le problme pos
Utilisons cette construction pour rsoudre le problme du calcul du nombre dannes ncessaire pour doubler
son pargne. On affiche aussi au fur et mesure des calculs, lpargne constitue anne aprs anne.
Algorithme Epargne
Calcule le nombre dannes ncessaire pour doubler son pargne
Voici la portion dalgorithme

M ontant 1000
N ombreAnnees 0
TantQue M ontant < 2000 Faire
Afficher "Montant : ", Montant, "dans",
NombreAnnees, "an(s)"
M ontant M ontant 1, 0825
N ombreAnnees N ombreAnnees + 1
Afficher "Montant final : ", Montant, "dans ",
NombreAnnees, " an(s)"

Vrification de lexpression boolenne


1. Est ce que le montant actuel est infrieur 2000
2. Si la rponse est Vrai
3. Excuter les actions suivantes :
(a) Nouveau montant : M ontant M ontant 1, 0825
(b) Nombre dannes : N ombreAnnees N ombreAnnees + 1
(c) Repartir au point 1
4. Si la rponse est Fausse
(a) Poursuivre avec les actions aprs Fin tant que (Ftq)
On obtient le rsultat suivant
Montant
: 1000.00
Montant
: 1082.50
Montant
: 1171.81
Montant
: 1268.48
Montant
: 1373.13
Montant
: 1486.41
Montant
: 1609.04
Montant
: 1741.79
Montant
: 1885.49
Montant final : 2041.04

:
dans
dans
dans
dans
dans
dans
dans
dans
dans
dans

0
1
2
3
4
5
6
7
8
9

an(s)
an(s)
an(s)
an(s)
an(s)
an(s)
an(s)
an(s)
an(s)
an(s)

4.2. LES STRUCTURES ITRATIVES (LES BOUCLES)

53

On constate que les 3 instructions contenues dans la construction tant que sont excutes 9 fois. Leur dernire
excution commence avec Montant=1885.49 et se termine avec Montant= 2041.04. La condition Montant <
2000 est alors fausse ; Linstruction suivant la construction tant que est donc excute, provoquant laffichage
de : Montant final : 2041.04 dans 9 an(s).
Remarques
Lexpression boolenne dune construction tant que doit pouvoir tre vrifie ds le dbut de la construction :
les variables qui apparaissent dans lexpression doivent donc toutes avoir une valeur avant.
Les instructions contenues dans la construction TantQue peuvent ne jamais tre excutes, si ds la premire
fois, lexpression boolenne a la valeur Faux.
Les instructions contenues dans la construction TantQue doivent contribuer modifier le calcul de lexpression boolenne, pour que ce calcul finisse par donner la valeur faux. Lexpression boolenne dune construction
tant que est aussi appele "condition de continuation".
Caractristique de la boucle TANT QUE
La boucle TANT QUE doit obligatoirement avoir les trois (3) parties suivantes :
1. Une initialisation qui servira de point dentre pour la premire vrification de lexpression boolenne.
2. La condition boolenne qui est lexpression boolenne. Si cette premire vrification donne un rsultat faux, ce qui signifie que les instructions dans la boucle ne pourront pas tre excutes. Le resultat
doit tre Vrai pour que la boucle puisse excuter les instructions.
3. La variation de la condition : permet de changer ltat de la condition.
un autre exemple
Supposons que lon veuille que lalgorithme calcule le cube des nombres quon lui fournit et que pour arrter,
lutilisateur entre entrer 0.
Si le nombre saisi est 0, on ne veut pas afficher le cube et le traitement est termin. Si le nombre saisi est
diffrent de 0, on affiche son cube et on recommence (on demande dentrer un nombre)
On veut donc excuter les instructions dans lordre suivant :
1. saisir un nombre
2. vrifier la condition dexcution (x . 0)
3. si x vaut 0, on sort de la boucle sinon on affiche le cube et on attend que lutilisateur entre un autre
nombre
4. On vrifie la condition dexcution (x . 0)
5. si x vaut 0, on sort de la boucle sinon on affiche le cube et on attend que lutilisateur entre un autre
nombre
On voit donc quaprs la saisie du premier nombre, on rpte les trois dernires instructions. On va donc
pouvoir les inscrire dans une boucle. La condition de continuation (x . 0) est inscrite aprs le tant que. Cette
condition est vrifie chaque fois quon a termin les traitements de la boucle.

54

CHAPITRE 4. LES STRUCTURES DE BASE

Algorithme 4.18 : Cube avec Tant Que


Var :
X : Entier
Debut
Afficher "Entrez un nombre - Ou 0
pour arrter"
Saisir X
TantQue X <> 0 Faire
Afficher "le cube de ", X, "est ",
X*X*X
Afficher "Entrez un autre nombre
ou 0"
Saisir X
Ftq
Afficher "Fin"
Fin

Le nombre de rptition du traitement nest pas indiqu explicitement ; il dpendra des donnes fournies
lalgorithme, en loccurrence les nombres entrs.
Fonctionnement de ce programme
1. Il affiche tout dabord le libell de saisie et attend que lutilisateur entre un nombre, qui est alors
conserv dans la variable X.
2. Le nombre conserv est ensuite vrifi par X<>0. On se pose la question suivante : est-ce que le nombre
donn est diffrent de 0 ? la valeur de X tant le nombre donn par lutilisateur. Si rponse est
(a) Vrai : cest--dire que la valeur de X est vraiment diffrente de 0, le cube de cette valeur est
calcul.
(b) Faux cest--dire que la valeur de X est nest pas diffrente de 0 mais vaut 0, le cube de cette
valeur ne sera pas calcul et la boucle va sarrter et et le processeur continuera la premire
instruction suivant le Ftq (Afficher "Fin").
Lutilisateur peut calculer autant de cubes quil dsire et quand il veut arrter, il lui suffit de taper 0. On
dit que 0 est une valeur drapeau (flag), cest--dire une valeur qui indique la fin dun traitement.

4.2. LES STRUCTURES ITRATIVES (LES BOUCLES)


4.2.0.3

55

Exemple - 2 : Occurence dun caractre

Dterminer le nombre de fois quun caractre apparat dans une phrase.


Lalgorithme peut tre excut avec une phrase de longueur quelconque. Celle-ci tant une donne.
Lindice dune lettre dans la phrase est initialis 1 et varie jusqu Lg qui est la longueur de la phrase.
Chaque caractre est ainsi compar au caractre recherch qui a pour identificateur CarRechercher
Un caractre est considr comme une chane de longueur 1.
Algorithme associ
Algorithme 4.19 : Occurence
Var :
Phrase : Chane //phrase saisie par lutilisateur
Lg : Entier //longueur de la chane
CarRechercher : Car //caractre recherch
Nombre : Entier //nombre de fois du caractre
I : Entier //parcourir la chane
Debut
Afficher "Nombre doccurences dun caractre dans une phrase"
Lg 0
N ombre 0
P hrase
I1
Afficher "Tapez une phrase
Saisir Phrase
Afficher "Tapez le caractre rechercher
Saisir CarRechercher
Lg Longueur(P hrase)
TantQue I <= Lg Faire
Si CarRechercher = P hrase[I] Alors
N ombre N ombre + 1
FinSi
I I +1
Ftq
Afficher "Le caractre", CarRechercher, "apparat ", Nombre, "fois dans la phrase"
Fin

56
4.2.0.4

CHAPITRE 4. LES STRUCTURES DE BASE


Exemple - 3 : Palindrome

Vrifier quun mot est un palindrome : un palindrome est un mot qui peut tre lu indiffremment de gauche
droite ou de droite gauche.
Exemple : LAVAL
Algorithme associ :
Algorithme 4.20 : Palindrome
Var :
Mot : Chane //Mot saisie par lutilisateur
Lg : Entier //longueur de la chane
I : Entier //parcourir la chane
Debut
Afficher "Nombre doccurences dun caractre dans une phrase"
Lg 0
M ot
I1
Afficher "Tapez un mot
Saisir Mot
Lg Longueur(M ot)
TantQue I <= LgM od2 Faire
Si M ot[I] = M ot[Lg I + 1] Alors
I I +1
Sinon
I Lg + 1
FinSi
Ftq
Si I = Lg Alors
Afficher "Le mot nest pas un palindrome"
Sinon
Afficher "Le mot est un palindrome"
FinSi
Fin

4.2. LES STRUCTURES ITRATIVES (LES BOUCLES)


4.2.0.5

57

La boucle Rpter . . . Jusqu

Comme la boucle "tantQue", ce type de rptitive excute les instructions lorsque le boolen est Faux et
sarrte lorsque le boolen est Vrai
Cette boucle sert rpter une instruction jusqu ce quune condition (expression boolenne) soit vraie. Son
formalisme est le suivant :
La syntaxe est la suivante :
Rpter
Squences dinstructions
Jusqu condition darrt (expression logique)
Lexpression logique qui est la condition est value aprs lexcution du corps de la boucle : si sa valeur est
faux, le corps de la boucle est excut nouveau puis lexpression logique est rvalue (il faut donc quelle
puisse changer de valeur pour sortir de la boucle) et si elle a la valeur vrai, on excute linstruction qui suit
jusqu.
La boucle Rpter nest pas indispensable. Elle peut toujours tre remplace par une boucle Tantque. Cest
pourquoi certains langages nont pas dquivalent pour la boucle Rpter (le langage C par exemple utilise
la mme logique pour raliser les deux boucles

58

CHAPITRE 4. LES STRUCTURES DE BASE

Algorithme 4.21 : Aire dun cercle


Var :
Rayon : Rel
Reponse : Chane
Debut
Afficher "Calcul de laire dun cercle"
Rpter
Afficher "Entrez le rayon dun cercle en
cm"
Saisir Rayon
Afficher "Laire de ce cercle est ",
rayon*rayon *3.14
Afficher "Voulez-vous laire dun autre
cercle ? (oui/non)"
Jusqu Reponse <> oui //
Afficher "Fin"
Fin

4.2.0.6

le choix de la boucle

4.3. EXERCICES

4.3

59

Exercices

1. Etant donns deux nombres entiers M et N positifs ou nuls, on demande den calculer le PGCD.
Lalgorithme dEuclide permet de rsoudre ce problme en prenant dabord le reste de la division de
M par N, puis le reste de la division de N par ce premier reste, etc jusqu ce quon trouve un reste
nul. Le dernier diviseur utilis est le PGCD de M et N. Pour m=1386 et n=140, on a successivement :
1386 = 140 * 9 + 126 140 = 126 * 1 + 14 126 = 14 * 9 + 0 et le PGCD de 1386 et 126 est bien 14.
Remarquons que par dfinition, si un des nombres est nul, lautre nombre est le PGCD .
Si nous avions pris m=140 et n=1386, nous aurions obtenu la suite de calculs suivants :
140 = 1386 * 0 + 140 1386 = 140 * 9 + 126
140 = 126 * 1 + 14 126 = 14 * 9 + 0
et le PGCD est le mme. Lordre de m et n na donc pas dimportance.
2. Calculer la N me puissance entire dun nombre X par multiplications successives du nombre par
lui-mme. Ici, le nombre de rptition (N) de linstruction de multiplication est connu.
3. Ecrire un algorithme qui partir dune classe dont on ne connat pas le nombre dtudiants (on donnera
le nom et le prnom), qui vont obtenir un certain nombre de notes coefficientes. On arrtera la saisie
en rpondant par Non.
on veut calculer
(a) La moyenne de chaque tudiant.
(b) La moyenne gnrale de la classe ainsi que la moyenne la plus leve, et la moyenne la plus faible
obtenues par les tudiants.
4. Calculer le produit de deux nombres entiers positifs ou nuls par addition successives du multiplicande
autant de fois que ncessaire
A B = |A + A + A +
A + + A}
{z
Bf ois

5. Aprs avoir corrig les copies dun examen, un professeur veut dterminer le nombre de notes suprieures
10 et le nombre de notes suprieurs 18. Le nombre total des notes traiter est connu.
6. Une association de cosommateurs fait une tude comparative de prix entre deux supermarchs. Cette
tude comparative deux buts :
(a) dterminer le supermarch offrant le meilleur prix pur le panier donn.
(b) calculer le prix dun panier idal en prenant pour chacun des produits le prix le plus bas.
7. Dterminer parmi les 100 premiers nombres entiers ceux qui sont parfaits. Un nombre est dit parfait
sil est gal la somme de ses diviseurs, premiers ou non. On convient de considrer 1 comme diviseur
mais pas le nombre lui-mme.
Par exemple 6 est parfait car 6 = 1 + 2 +3
8. En reprenant lexercice prcdant, calculer les nombres parfaits compris entre deux nombres a et b.
Ne pas oublier de prvoir le cas o il ny aurait aucun nombre parfait entre ces deux nombres

4.4

Exercices Rcapitulatifs

1. Un manutentionnaire est pay 3500 F/h et travaille 8 heures par jour. Il doit soulever 1200 colis par
jour, et reoit 2000 F/100 colis supplmentaires (pas de pnalits sil soulve dans la journe moins de
1200 colis). crire un algorithme qui permet a un manutentionnaire de calculer rapidement son salaire
journalier.

60

CHAPITRE 4. LES STRUCTURES DE BASE


2. crire un algorithme affichant les solutions relles dune quation de la forme ax2 + bx + c = 0.
3. crire un algorithme qui donne le minimum de n entiers positifs entrs la vole. On arrte la lecture
lorsque lentier saisi est ngatif.
4. crire un algorithme qui affiche une table de conversion des degrs Farenheit en degrs Celsius en
partant de 0 Farenheit jusqu 200o par pas de 20. La conversion Farenheit (F) - Celsius (C) est
assure par la formule suivante : C = (5/9) (F 32).
5. Lire la somme initiale S place sur un compte, lintrt i offert par la banque et le nombre n dannes
de placement de la somme S. Calculez la valeur acquise par la somme S place pendant n annes avec
un intrt simple : S(1 + n i) et compos : S(1 + i)n
6. Un dmarcheur domicile est rmunr avec un salaire fixe de 150 000 Fcfa par mois. Il peroit aussi
une commission qui reprsente 5% du montant des ventes quil ralise. Le salaire ainsi obtenu est
augment de 10% pour prendre en compte ses frais de dplacement.
Ecrire un algorithme qui calcule son salaire tant donn le montant des ventes ralis
7. Un concessionnaire automobile dsire quon crive lintention de ses clients un algorithme qui calcule
les frais mensuels dutilisation des voitures quil vend. Etant donn le nombre de kilomtres que parcourt
le client en une anne, le type de carburant utilis (G pour Gasoil et E pour essence), et la cylindre
de la voiture, crire lalgorithme sachant que :
Si la voiture est essence et la cylindr est suprieure 2000 cm3 , le cot du carburant est calcul
en tenant compte que la voiture consomme 10 litres aux 100 km
Si la voiture est essence et la cylindre est infrieure 2000 cm3, le cot du carburant est calcul
en tenant compte que la voiture consomme 8 litres aux 100 km
Si la voiture est diesel, le cot du carburant est calcul en tenant compte que la voiture consomme
8 litres aux 100 km
Un surcot de 70% pour les frais dentretient est appliqu aux vhicules diesel et 60% pour les
vhicules essence
8. Un professeur de mathmatique vous demande de concevoir un algorithme qui permette ses lves de
vrifier leurs connaissances des tables de multiplication de nombres entiers compris entre 1 et 10. Ses
souhaits sont les suivants :
lalgorithme prsentera 20 exercices tirs au hasard ;
si llve donne une fausse rponse, lerreur lui sera signale par le message "erreur " et une seconde
chance lui sera donne. Si llve se trompe encore, le message " erreur " rapparatra et le rsultat
correcte lui sera affich
Lexercice est not selon la manire suivante :
- toute rponse correcte du premier coup rapporte 1 point
- toute rponse correcte au deuxime coup ne rapporte rien
- toute rponse dfinitivement fausse enlve 1 point
La note de llve sera affiche si elle est positive, sinon un message dencouragement comportant le
nombre de bonnes rponses justes donnes du premier coup sera affich. On pourra utiliser linstruction
V ara Aleatoire(N ) qui place dans la variable vara une valeur alatoire comprise entre 1 et N
9. On veut afficher la rponse une demande dassurance vie.
Les rgles sont :
(a) Un demandeur de moins de 30 ans, en excellente sant, et nayant jamais eu daccident, obtient
un contrat de type A.
(b) Si le demandeur est en mauvaise sant, ou a dj eu un accident alors une expertise mdicale est
demand, on diffre alors la rponse.

4.4. EXERCICES RCAPITULATIFS

61

(c) Si le demandeur est en mauvaise sant, et a dj eu un accident alors le contrat est refus.
(d) Si le demandeur plus de 30 ans, on applique les mmes conditions, mais cette fois le contrat sera
de type B.

62

CHAPITRE 4. LES STRUCTURES DE BASE

Chapitre 5

Les Tableaux
5.1

Exemple introductif

Un tableau est un aggrgat de composants, objets lmentaires ou non, de mme type et dont laccs ses
composants se fait par un indice calcul.
Saisir la liste des 12 notes sur 30 et afficher ces mme notes sur 20.
Voici les notes sur 30
16 23 8 19 28 20 14 10 9 15 24
et voici aprs calcul la liste de ces notes sur 20
10.67 15.33 5.33 12.67 18.67 13.33 12 9.33 6.67 6 10 16
Dans ltat actuel de nos connaissances, pour crire lalgorithme qui donne la sortie dcran ci-dessu, nous
sommes oblig de dclarer 12 variables. On ne peut pas utiliser une seule variable car il faut se rappeler que
la variable ne peut contenir en un instant T du traitement une et une seule valeur
Nous pouvons admettre de dclarer les 12 variables, mais que faire pour 30, 50, 100 variables. En outre, le
mme traitement est effectu 12 fois sur des variables diffrentes. Comme les variables ont des noms diffrents,
on ne peut pas utiliser de boucle, ce qui allonge considrablement le code et le rend trs rptitif.
Lorsque les donnes sont nombreuses et de mme nature, pour viter de multiplier le nombres des variables,
il est plus pratique de ranger ces donnes dans un tableau.
Les tableaux sont certainement les variables structures les plus populaires. Ils sont disponibles dans tous
les langages de programmation et servent rsoudre une multitude de problmes. Le tableau nous servira
conserver des donnes afin de les utiliser dans dautres oprations

63

64

CHAPITRE 5. LES TABLEAUX

Analysons lexemple suivant :


Nous voudrions stocker les notes de lexamen semestriel pour le calcul de la moyenne de lexamen et pour
un futur calcul du total semestriel.
Sil fallait calculer uniquement la moyenne, on pourrait utiliser lalgorithme suivant :
Algorithme 5.1 :
Var :
Note,Total,Max,MaxNote : Entier
Moyenne : Rel
Debut
T otal 0
M ax 0
Pour I 1 A 16 Faire
Saisir Note, MaxNote
Si Non (N ote < 10) Alors
T otal T otal + N ote
M ax M ax + M axN ote
FinSi
FPour
M oyenne (T otal/M ax 100 + 0.5)
Afficher "La moyenne est de",
Moyenne,"%"
Afficher "Fin"
Fin

5.2

Pour indiquer une absence ou une dispense pour


une certaine branche, nous avons attribu une
note ngative dont il ne faut videmment pas
tenir compte dans le calcul du total des points
obtenus et du total des points attribus.
Mais comme il faut retenir les notes pour un calcul ultrieur, cet algorithme doit tre modifi.
Lutilisation dune variable indice (ou tableau
ou table) nous fournit une solution.

Dclaration dun tableau

Il faut tout dabord retenir que dune manire gnrale, les composants dun tableau sont en nombre fini et
sont accessible individuellement sans tenir compte de lordre grce un indice calcul.
Le tableau permet de stocker des donnes de mme type. Chacune des valeurs stockes est repre par un
indice qui indique sa position dans le tableau.
Sous forme dimage chaque position est reprsente par une case et lindice reprsente le numro de cette
case.
Un tableau doit possder :
un nom qui permet de lidentifier dans lalgorithme.
une taille dun nombre fixe qui indique le nombre de cases du tableau
un indice de type entier qui permet dindentifier la position dune case dans le tableau
Jinsiste quil ne faut surtout pas oublier que tous les lments dun tableau doivent absolument tre de
mme type

5.3. TABLEAU UNE DIMENSION OU VECTEUR

5.3
5.3.1

65

Tableau une dimension ou vecteur


Dclaration

Syntaxe :
Nom Tableau : Tableau [ valeurIndiceMinimum .. valeurIndiceMaximum ] de Type des lments
Le tableau lui-mme constitue une variable. Cest une variable complexe (par opposition aux variables
simples) car il est constitu dautres variables qui sont (les lments du tableau)
Remarque :
Le type des indices des tableaux est toujours un intervalle dentiers dont la borne infrieure est zro(0) et
la borne suprieure le nombre dlments moins 1. Si la borne infrieure est 1 alors la borne suprieure
correspond au nombre dlements.
Un exemple
Note : Tableau [ 1 .. 6 ] de Rels /* Ranger les 6 Notes des tudiants
Lorsquon dclare un tableau, on dclare aussi de manire implicite toutes les variables indices qui le constituent.

Autres dclarations :
NomClient : Tableau [ 1 .. 20 ] de chanes /* Ranger les 20 noms des clients
Salaire : Tableau [ 1 .. 20 ] de Rels /* Ranger le salaire de 20 salaris Remarque
Elment dun tableau
Les tableaux se manipulent travers leurs lments, le nom du tableau est alors suivi dun indice entre
crochets. Lindice dsigne de faon unique llment recherch du tableau.
On accdera un composant du tableau Note dindice I par la notation Note[I] (prononc Note de I).
En crivant Note[I], nous devons nous rassurer que lindice I doit tre dans lintervalle de 1 6. Donner un
indice hors du domaine de dfinition sera une erreur de programmation.
Modification slective
La notation Note[I], dsigne un lment particulier du tableau Note. On peut considrer que Note[I] est un
nom de variable et nous utiliserons cette notation pour obtenir et surtout pour modifier de manire selective,
cest--dire modifier un lment indpendamment des autres la valeur de lobjet quelle dsigne. On peut
alors crire :
N ote[1] 12

N ote[5] 8

N ote[7] 15 : faux car le tableau contient 6 notes pas 7

66

5.3.2
5.3.2.1

CHAPITRE 5. LES TABLEAUX

Oprations sur les tableaux


Initialiser un tableau

Mettre zro tous les lments du tableau


Algorithme 5.2 : Initialisation
Var :
Note : Tableau[1..6] de rels
I : Entier
Debut
Afficher "Initialisation du tableau"
Pour I 1 A 6 Faire
N ote[I] 0
FPour
Fin

5.3.2.2

Remplissage du tableau

Algorithme 5.3 : Remplissage


Var :
Note : Tableau[1..6] de rels
I : Entier
Debut
Afficher "Initialisation du tableau"
Pour I 1 A 6 Faire
N ote[I] 0
FPour
Afficher "Entrez la Note Nr",I
Pour I 1 A 6 Faire
Saisir Note[I]
FPour
Fin

5.3.2.3

LAffichage du tableau

Algorithme 5.4 : Affichage


Var :
Note : Tableau[1..6] de rels
I : Entier
Debut
Afficher "Afficher les notes du tableau"
Pour I 1 A 6 Faire
Afficher Note[I]
FPour
Fin

5.3. TABLEAU UNE DIMENSION OU VECTEUR


Exemple complet de Saisie et dAffichage du tableau Note
Algorithme 5.5 : Liste des notes sur 30
Var :
Note : Tableau[1..6] de rels
I : Entier
Debut
Afficher "Saisir la liste des 12 notes sur 20"
Pour I 1 A 12 Faire
Saisir Note[I]
FPour
Afficher "Voici la liste de ces notes sur 30"
Pour I 1 A 12 Faire
Afficher Note[I]*2/3
FPour
Fin

5.3.2.4

Rechercher un lment du tableau

Ici on sort de la boucle Si lorsquon retrouve llment recherch


Algorithme 5.6 : Affichage
Var :
Note : Tableau[1..6] de rels
I : Entier
ValRecherche : Rel
Debut
I1
//I [1, I], V alRecherche 6= N ote[I]
Afficher "Donnezla valeur recherche"
Saisir ValRecherche
Pour I 1 A 6 Faire
Si Note[I] = ValRecherche Alors
Afficher Note retrouve
SortirSi
FinSi
FPour
Fin

67

68

5.3.3

CHAPITRE 5. LES TABLEAUX

Autre reprsentation

Exemple 1 Nombre dternim de ville


Nous dsirons saisir dans un tableau 20 villes de la Cte dIvoire. Le schma est le suivant :

TableVille
Indice
1 Abidjan
2 Bassam
3 Daloa
4 Bouak

20 Yakro
NbreVille = 20
Le nombre de ville saisir est connu davance par le dveloppeur

Algorithme 5.7 : Liste de 20 villes


Var :
TableVille : Tableau[1..20] de Chanes
I : Entier
Debut
Afficher "Saisir la liste de 20 villes de la Cte dIvoire"
Pour I 1 A 12 Faire
Afficher "Donnez le nom de la ville Nr ", I
Saisir TableVille[I]
FPour
Afficher "Voici la liste des 20 villes que vous avez saisie"
Pour I 1 A 20 Faire
Afficher "Ville Nr " I, "est ", TableVille[I]
FPour
Fin
Exemple 2 - Nombre dtermin de villes
Nous dsirons saisir dans un tableau au plus 100 villes de la Cte dIvoire. Lutilisateur choisi le nombre de
villes sasir chaque sance de saisie mais ne peut exder les 100 cases prvues cet effet.
Voici le schma :

5.3. TABLEAU UNE DIMENSION OU VECTEUR


TableVille
Indice
1 Abidjan
2 Bassam
3 Daloa
4 Bouak

100
MaxVille = 100
Lutilisateur donne le nombre de ville saisir chaque sance,
mais ne doit pas dpasser la limite qui est de 100.
Algorithme 5.8 : Liste de villes
Const :
M axV ille = 100
Var :
TaleVille : Tableau[1..MaxVille] de Chanes
I : Entier
NbreVille : Entier
Debut
Afficher "Donnez le nombre de ville que vous dsirez enregistrer, ne pas exder",MaxVille
Saisir NbreVille
TantQue NbreVille < 1 OU NbreVille > MaxVille) Faire
Afficher "Donnez le nombre de ville que vous dsirez enregistrer, ne pas exder",MaxVille
Saisir NbreVille
Ftq
Pour I 1 A NbreVille Faire
Afficher "Donnez le nom de la ville Nr ", I
Saisir TableVille[I]
FPour
Afficher "Voici la liste des ",NbreVille," villes que vous avez saisie"
Pour I 1 A NbreVille Faire
Afficher "Ville Nr " I, "est ", TableVille[I]
FPour
Fin

69

70

CHAPITRE 5. LES TABLEAUX

Exemple 3 - Un certain nombre de ville


Ici lutilisateur ne donne plus le nombre de ville saisir, mais rpond par Oui sil veut saisir une ville ou par
Non sil ne veut plus saisir de ville.

TableVille
Indice
1 Abidjan
2 Bassam
3 Daloa
4 Bouak

100
MaxVille = 100

Algorithme 5.9 : Saisir un certain nombre de ville


Const :
M axV ille = 100
Var :
TableVille : Tableau[1..MaxVille] de Chanes
NbreVille,I : Entier
Rep : Car
Debut
N breV ille 0
Rep 00
Rpter
Afficher voulez vous commencer la saisie des VILLES (O/N)
Saisir Rep
Jusqu Rep = N Ou Rep = n
TantQue (Rep = N Ou Rep = n) ET NbreVille < MaxVille Faire
NbreVille := NbreVille + 1
Afficher "Entrer la ville ",NbreVille,
Saisir TableVille[NbreVille]
Rpter
Afficher voulez vous saisir dautres VILLES (O/N)
Saisir Rep
Jusqu Rep = O OU Rep = o OU Rep = N OU Rep = n
Ftq
Afficher "Liste des villes"
Pour I 1 A NbreVille Faire
Afficher "Ville Nr " I, "est ", TableVille[I]
FPour
Fin

Exemple 4 - Ville et position dans le tableau


dtermine la prsence dune ville donne en affichant sa position dans le tableau

5.3. TABLEAU UNE DIMENSION OU VECTEUR


Algorithme 5.10 : Ville et position
Const :
M axV ille = 100
Var :
TableVille : Tableau[1..MaxVille] de Chanes
NbreVille,I : Entier
NomVilleRech : Chanes
NomVilleTrouve : Boolen
Debut
Afficher "Entrer le nom de la ville recherch"
Saisir NomVilleRech
N omV illeT rouve F aux
I1
TantQue NON NomVilleTrouve ET (I <= MaxVille) Faire
Si NomVilleRech = TableVille[I] Alors
N omV illeT rouve V rai
Afficher "La ville est prsente en position ",I
Sinon
I I +1
FinSi
Ftq
Si NON NomVilleTrouve Alors
Afficher "La ville nest pas dans le tableau"
FinSi
Fin
Exemple 5 - position dans le tableau
Affiche une ville partir dune position du tableau donn
Algorithme 5.11 : ville partir dune position
Const :
M axV ille = 100
Var :
TableVille : Tableau[1..MaxVille] de Chanes
NbreVille,Position : Entier
Debut
Rpter
Afficher "Entrer la position de la ville recherche"
Saisir Position
Jusqu Position > 0 ET Position <= MaxVille
Afficher "La ville est ",TableVille[Position]
Fin

71

72

CHAPITRE 5. LES TABLEAUX

5.3.4

Exercices

1. Ecrire un algorithme qui demande de remplir un tableau de 30 lments et effectue les oprations
suivantes :
Affiche les lments saisies
Compte le nombre dlments et le nombre dlments impaires
Calcule la somme des lments paires et des lments impaires
Multiplie chaque lment impaires par lui mme et replace la valeur trouve la mme position
2. Soit un tableau de N lments entiers quelconques. Compter le nombre dlments nuls.
3. Soit un tableau T ayant N lments. Transfrer les lments positifs du tableau T dans un tableau
TPOS et les lments ngatifs dans un tableau TNEG
4. Ecrire un algorithme qui permet de ne transfrer que les lments positifs et les lments ngatifs
dun tableau dans deux autres tableaux en comptabilisant les lments nuls rencontrs dans le premier
tableau
5. Soit un tableau T possdant N lments. Ranger dans le mme tableau les lments dans lordre inverse
1 8 5 7 10 devient : 10 7 5 8 1
6. Soit un tableau T de N lments quelconques, possdant au moins deux lments conscutifs gaux
0. Lexistence dlments nuls dtermine des squences de nombres entiers comme dans lexemple
ci-dessous o il y a quatre squences :
11, 5, 8 - 15, - 8, 2 - 12, 15, 3
11 5 8 0 15 0 8 2 0 0 12 15 3
Calculer et diter la somme des lments de chaque squences. On convient darrter le traitement
la premire rencontre de deux lments nuls conscutifs

5.4. TABLEAU DEUX DIMENSIONS OU MATRICE

5.4

73

Tableau deux dimensions ou matrice

Lorsque les donnes sont nombreuses et de mme nature, mais dpendent de deux critres, elles sont ranges
dans un tableau deux entres ou tableau deux dimensions ou matrice.
1

10

Algo
Maths

14

Anglais
Langage
Ce tableau a 4 lignes qui correspondent aux matires et 10 colonnes qui vont correspondre aux notes obtenues
dans chaque matire. Pour connatre la note dune matire donne il faut reprer le numro de la ligne et le
numro de la colonne. Ces deux numros reprsentent les deux indices du tableau.
Exemple : la note 14 en math se trouve lintersection de la 2me ligne et de la 3me colonne, ce qui
correspond la 3me note en math.
Nous pouvons pour linstant retenir quun tableau deux dimensions possde obligatoirement deux indices
qui permettront de retrouver un lment du tableau.

5.4.1

Dclaration du tableau deux dimensions


Nom Tableau : Tableau [ Nombre de lignes, Nombre de colonnes ] de
Type des lments

Nombre de lignes et Nombre de colonnes correspondent la dclaration dun tableau une dimension
ou vecteur.

5.4.2

Modification slective

Les remarques faites sur la modification slective dun lment dun tableau une dimension (voir section
5.3.1, page 65) sapplique de faon identique un lment du tableau deux dimensions. La seule diffrence
est quil faut avoir deux indices pour le tableau deux dimensions.

5.4.3

Traitement des tableaux deux dimensions

Le principe utilis pour le traitement des tableaux une dimension ( voir section 5.3.2, page 66) est largement
valable pour le tableau deux dimensions. La seule diffrence ici est quil faut utiliser deux indices pour
accder un lment du tableau car llment recherch se trouve lintersection de la ligne et de la colonne
de ce tableau.
Pour le parcours du tableau, on utilisera deux boucles imbriques
Exemple

74

CHAPITRE 5. LES TABLEAUX

Pour I 1 A 3 Faire
Pour J 1 A 7 Faire
Instructions
Exemple
Soit un tableau ayant 6 lignes et 6 colonnes. Calculez la somme de tous ces lments
1
5
2
9
3
2

6
5
8
8
4
9

8
2
9
2
7
8

5
4
6
4
6
5

4
3
4
5
2
4

9
5
8
6
1
8

Algorithme 5.12 : Somme des lments dune matrice


Var :
Matrice : Tableau[1 .. 6, 1 .. 6] de rels
I, J : Entier
Somme : Rel
Debut
Afficher "Initialisation du tableau"
Pour I 1 A 6 Faire
Pour J 1 A 6 Faire
Matrice[I,J] 0
FPour
FPour
Afficher "Saisir les lments du tableau"
Pour I 1 A 6 Faire
Pour J 1 A 6 Faire
Saisir Matrice[I,J]
FPour
FPour
Afficher "Calcul de la somme des lments"
Somme 0
Pour I 1 A 6 Faire
Pour J 1 A 6 Faire
Somme Somme + M atrice[I, J]
FPour
FPour
Afficher "Voici le rsultat"
Pour I 1 A 6 Faire
Pour J 1 A 6 Faire
Afficher Matrice[I,J]
FPour
FPour
Fin

5.4. TABLEAU DEUX DIMENSIONS OU MATRICE

5.4.4

75

Autre reprsentations
Indice
1 Riz Sauce

2 Foutou Banane 
3
NbPlat

Indice
- 1

1200

- 2

2000

Couscous

- 3

1500

Foufou

NbPlat
-

2500

MaxPlat = 20

MaxPlat = 20

Dclaration
dfinition de la structure de donnes en tableaux associs permettant de reprsenter le menu.
Const :
M axP lat = 20
Type :
TypTablPN = tab [1 .. MAXPLAT] de chane (type tableau nom de plat)
TypTablPP = tab [1 .. MAXPLAT] de rel (type tableau prix de plat)
Var :
TablePlat : TypTablPN (tableau nom de plat)
TablePrix : TypTablPP (tableau prix de plat)
NBPLAT : Entier) (nombre de plat au menu)
Pour saisir un certain nombre de plats associs leur prix, il faut que lutilisateur souhaite le faire et quil
dispose de la place ncessaire dans le tableau.

76

CHAPITRE 5. LES TABLEAUX

Algorithme 5.13 : Plats et Prix associs.


Const :
M axP lat = 20
Type :
T ypT ablP N = tab[1..M AXP LAT ] de chane (type tableau nom de plat)
T ypT ablP P = tab[1..M AXP LAT ] de rel (type tableau prix de plat)
Var :
TablePlat : TypTablPN (tableau nom de plat)
TablePrix : TypTablPP (tableau prix de plat)
NBPLAT, I : Entier) (nombre de plat au menu)
Rep : Car
Debut
Afficher "Confection du Menu"
N bP lat 0
Afficher "Voulez vous commencer la saisie"
Saisir Rep
TantQue (Rep = O OU Rep = o) ET NbPlat <= MaxPlat Faire
N bP lat N P lat + 1
Afficher "Enregistremen Nr ", NbPlat
Afficher "Donnez le nom du plat : "
Saisir TablePlat[NbPlat]
Afficher "Donnez le prix correspondant : "
Saisir TablePrix[NbPlat]
Afficher "Voulez vous continuer ? : "
Saisir Rep
Ftq
Afficher "Vrification de la saisie"
Pour I 1 A NbPlat Faire
Afficher "Plat : ",TablePlat[I], "Prix : ", TablePrix[I]
FPour
Fin

5.4. TABLEAU DEUX DIMENSIONS OU MATRICE


5.4.4.1

77

Exemple 2

Afficher le prix dun plat dont on fournira le nom (on suppose que chaque nom de plat est unique dans le
menu).
A prs avoir saisit le nom de plat que lon recherche, il faut parcourir le tableau des noms de plat jusqu le
trouver, on affiche alors le prix correspondant qui se situe au mme indice (ou jusqu la fin du tableau si le
plat nexiste pas)
Algorithme 5.14 : Prix dun plat connaissant son nom
Const :
M axP lat = 20
Type :
T ypT ablP N = tab[1..M AXP LAT ] de chane (type tableau nom de plat)
T ypT ablP P = tab[1..M AXP LAT ] de rel (type tableau prix de plat)
Var :
TablePlat : TypTablPN (tableau nom de plat)
TablePrix : TypTablPP (tableau prix de plat)
NBPLAT, I : Entier) (nombre de plat au menu)
PlatTrouve : Boolen
PlatRecherche : Chanes
Debut
Afficher "Entrez le nom du plat rechercher"
Saisir PlatRecherche
P latT rouve F aux
I1
Afficher "Rsultat de la recherche : "
TantQue NON PlatTrouve ET I <= NbPlat Faire
Si PlatRecherche = TablePlat[I] Alors
P latT rouve V rai
Afficher TablePrix[I]
Sinon
I I +1
FinSi
Ftq
Si NON PlatTrouve Alors
Afficher PlatRecherche, "nest pas au menu"
FinSi
Fin

78

CHAPITRE 5. LES TABLEAUX

Exemple : 3
Afficher tous les noms de plat correspondant un prix donn.
Aprs avoir saisi le prix recherch, on doit parcourir lensemble des lments du tableau (il peut y avoir plusieurs plats ayant le mme prix) chaque fois que le prix est trouv, on affiche le nom du plat correspondant.
Algorithme 5.15 : tous les plats qui correspondent un prix donn
Const :
M axP lat = 20
Type :
T ypT ablP N = tab[1..M AXP LAT ] de chane (type tableau nom de plat)
T ypT ablP P = tab[1..M AXP LAT ] de rel (type tableau prix de plat)
Var :
TablePlat : TypTablPN (tableau nom de plat)
TablePrix : TypTablPP (tableau prix de plat)
NBPLAT, I : Entier) (nombre de plat au menu)
PrixTrouve : Boolen
PrixRecherche : Chanes
Debut
Afficher "Entrez le prix rechercher"
Saisir PrixRecherche
P rixT rouve F aux
Afficher "Rsultat de la recherche : "
Pour I 1 A NbPlat Faire
Si PrixRecherche = TablePrix[I] Alors
P rixT rouve V rai
Afficher TablePrix[I]
FinSi
FPour
Si NON PrixTrouve Alors
Afficher PrixRecherche, "ne correspond pas un plat du menu"
FinSi
Fin

5.4. TABLEAU DEUX DIMENSIONS OU MATRICE

5.4.5

79

Exercices

1. Soit un tableau ayant N lignes et N colonnes (tableau carr). Mettre zro la diagonale principale.
La diagonale principale dune matrice carre est lensemble des lments du tableau dont les indices de
ligne et de colonne sont gaux.
2. Soit un tableau ayant N lignes et N colonnes (tableau carr). Mettre zro les deux diagonales du
tableau.
3. Addition de deux matrices A et B en respectant les rgles de laddition de deux matrices.
4. En se basant sur les exemples prcdents :
(a) crire un algorithme qui permet dafficher tous les noms de plat correspondant une fourchette
de prix donne (compris entre un prix minimum, et un prix maximum).
(b) crire un algorithme qui permet dafficher le nom et prix dun plat dont on donnera le rang dans
le menu (indice dans le tableau).
(c) crire un algorithme qui permet daugmenter lensemble des prix du menu de 10
5. En multipliant une matrice A de dimension N et M avec une matrice B de dimension M et P on obtient
une matrice C de dimension N et P
A(N,M) * B(M,P) = C(N,P)
on utilise la formule suivante :
m
Ci,j =

(Aik Bkj )

k=1

. Ecrire lalgorithme de la multiplication de deux matrices.

80

5.5
5.5.1

CHAPITRE 5. LES TABLEAUX

Aller plus loin


Matrice Symtrique

Une matrice carre est dite symtrique si i, j [1, n], Mi,j = Mj,i
Nous utiliserons deux boucles imbriques pour parcourir la demi-matrice infrieur ou (suprieur) et vrifier
que M [i, j] = M [j, i]. Les lments de la diagonale ne sont pas tester.
Algorithme 5.16 : Matrice Symtrique
Var :
Matrice : Tableau[1 .. 6, 1 .. 6] de Entier
I, J : Entier
PasSymetrique : Boolen
Debut
Afficher "Initialisation du tableau"
Pour I 1 A 6 Faire
Pour J 1 A 6 Faire
Matrice[I,J] 0
FPour
FPour
Afficher "Saisir les lments du tableau"
Pour I 1 A 6 Faire
Pour J 1 A 6 Faire
Saisir Matrice[I,J]
FPour
FPour
Afficher "Vrification de la matrice"
I1
P asSymetrique F aux
Rpter
I I +1
J 1
Rpter
Si M atrice[I, J] <> M atrice[J, I] Alors
P asSymetrique V rai
Sinon
J J +1
FinSi
Jusqu J = I ou PasSymetrique
Jusqu I = 6 ou PasSymetrique
Fin

5.5. ALLER PLUS LOIN

5.5.2

81

Carr magique

Carrs magiques dordre impair. Un carr magique dordre N est un tableau carr N lignes et N colonnes,
donc de N2 cases, dans lesquelles on crit une et une seule fois les nombres entiers de 1 N2 , de telle sorte
que la somme des N nombres de chaque ligne, de chaque colonne et de chaque diagonale soit toujours la
mme. On dispose pour les carrs magiques dordre impair de lalgorithme suivant :
En dsignant par (I,J) la case de la ligne I et de la colonne J :
1. on place 1 en ( N , (N + 1)/2 )
2. ayant plac le nombre K dans la case (I,J) on place le nombre K+1 dans la case (I+1,J+1), toutefois
si cette case est occupe on place le nombre K+1 dans la case (I-1,J).
Lorsque les indices calculs sont suprieurs N, on prend 1 comme indice. Ces oprations se font pour
1 <= K <= N 2 1.
17
23
4
10
11

24
5
6
12
18

1
7
13
19
25

8
14
20
21
2

15
16
22
3
9

82
Algorithme 5.17 : Carr Magique
Var :
Matrice : Tableau[1 .. 5, 1 .. 5] de Entier
I, J, K, X : Entier
Debut
Afficher "Initialisation du tableau"
Pour I 1 A 5 Faire
Pour J 1 A 5 Faire
M atrice[I, J] 0
FPour
FPour
Afficher "Contruction du tableau magique"
I1
X1
K1
J (5 + 1)/2
TantQue X <= N 2 Faire
M atrice[I, J] X
X X +1
Si K = 6 Alors
K1
I I +1
Sinon
K K +1
I I 1
J J +1
Si I = 0 Alors
I5
FinSi
Si J > 5 Alors
J 1
FinSi
FinSi
Ftq
Afficher "Affichage du carr magique"
Pour I 1 A 5 Faire
Pour J 1 A 5 Faire
Afficher Matrice[I,J]
FPour
FPour
Fin

CHAPITRE 5. LES TABLEAUX

5.5. ALLER PLUS LOIN

5.5.3

Rotation dune matrice Carre

Algorithme 5.18 : Rotation dune matrice Carre


Var :
Matrice : Tableau[1 .. 6, 1 .. 6] de Entier
I, J, C, L, Echange : Entier
Debut
Afficher "Initialisation du tableau"
Pour I 1 A 5 Faire
Pour J 1 A 5 Faire
M atrice[I, J] 0
FPour
FPour
Afficher "Remplissage de la matrice"
Pour I 1A6 Faire
Pour J 1A6 Faire
Afficher "Entrez la valeur la position", I,J
Saisir Matrice[I,J]
FPour
FPour
Afficher "Rotation de la matrice"
C1
TantQue C <= 6/2 Faire
LC
TantQue L <= 6 C Faire
Echange M atrice[L, C]
M atrice[L, C] M atrice[C, 6 + 1 L]
M atrice[C, 6 + 1 L] M atrice[6 + 1 L, 6 + 1 C]
M atrice[6 + 1 L, 6 + 1 C] M atrice[6 + 1 C, L]
M atrice[6 + 1 C, L] Echange
LL+1
Ftq
C C +1
Ftq
Afficher "Affichage de la matrice transforme"
Pour I 1A6 Faire
Pour J 1A6 Faire
Afficher Matrice[I,J]
FPour
FPour
Fin

83

84

CHAPITRE 5. LES TABLEAUX

5.5.4

Le triangle de pascal

1
1
1
Exemple
1
1
1

0
1
2
3
4
5

0
0
1
3
6
10

0
0
0
1
4
10

0
0
0
0
1
5

0
0
0
0
0
1

Exemple de calcul : Le 3e lment de la 5e ligne est obtenu en faisant la somme des 2e et 3e lments de la
ligne prcdente.
La premire colonne doit tre initialise 1 et le reste du tableau zro (0) afin de pouvoir calculer nimporte
quel lment en fonction de ceux de la ligne prcdente.
Algorithme 5.19 : Triangle de pascal
Var :
Matrice : Tableau[1 .. 6, 1 .. 6] de Entier
I, J, L, C : Entier
Debut
Afficher "Initialisation du tableau"
Pour I 1 A 5 Faire
Pour J 1 A 5 Faire
M atrice[I, J] 0
FPour
FPour
Afficher "Construction du triangle"
M atrice[1, 1] 1
L2
TantQue L <= 6 Faire
C2
M atrice[L, 1] 1
TantQue C <= L Faire
M atrice[L, C] M atrice[L 1, C 1] + M atrice[L 1, C]
C C +1
Ftq
LL+1
Ftq
Afficher "Affichage du triangle"
Pour I 1A6 Faire
Pour J 1A6 Faire
Afficher Matrice[I,J]
FPour
FPour
Fin

5.5.5

La tour sur un chiquier

Lchiquier est le damier pour le jeux dchecs qui contient 8 lignes et 8 colonnes. A partir dune case
quelconque, on marque toutes les cases que lon peut atteindre en un coup par une tour.
Au terme du traitement, les cases atteintes ainsi que la case de dpart contiendront la valeur 1, les autres la
valeur 0.

5.5. ALLER PLUS LOIN


0
0
1
0
0
0
0
0

0
0
1
0
0
0
0
0

0
0
1
0
0
0
0
0

1
1
1
1
1
1
1
1

0
0
1
0
0
0
0
0

0
0
1
0
0
0
0
0

0
0
1
0
0
0
0
0

85
0
0
1
0
0
0
0
0

Rsultat pour une tour se trouvant lintersection de la ligne 3 et de la colonne 3


Algorithme 5.20 : Tour sur un chiquier
Var :
Matrice : Tableau[1 .. 8, 1 .. 8] de Entier
Ligne, Colonne, L : Entier
Debut
Afficher "Donnez la ligne sur laquelle se trouve la Tour"
Saisir Ligne
TantQue Ligne < 1 OU Ligne > 8 Faire
Afficher "Le Nr de ligne doit tre entre 1 et 8 - Veuillez redonner"
Saisir Ligne
Ftq
Afficher "Donnez la colonne sur laquelle se trouve la Tour"
Saisir Colonne
TantQue Colonne < 1 OU Colonne > 8 Faire
Afficher "Le Nr de colonne doit tre entre 1 et 8 - Veuillez redonner"
Saisir Colonne
Ftq
Afficher "Traitement"
L1
TantQue L <= 8 Faire
C1
TantQue C <= 8 Faire
Si L = Ligne OU Colonne = C Alors
M atrice[L, C] 1
Sinon
M atrice[L, C] 0
FinSi
C C +1
Ftq
LL+1
Ftq
Afficher "Affichage du rsultat"
Pour I 1A8 Faire
Pour J 1A8 Faire
Afficher Matrice[I,J]
FPour
FPour
Fin

86

5.6

CHAPITRE 5. LES TABLEAUX

Tris dans un tableau

Un tri est une opration de classement dlments dune liste selon un ordre total dfini. Sur le plan pratique,
on considre gnralement deux domaines dapplication des tris : les tris internes et les tris externes.
Que se passe-t-il dans un tri ? On suppose quon se donne une suite de nombres entiers (ex : 5, 8, -3 ,6
,42, 2,101, -8, 42, 6) et lon souhaite les classer par ordre croissant (relation dordre au sens large). La
suite prcdente devient alors aprs le tri (classement) : (-8, -3, 2, 5, 6, 6, 8, 42, 42, 101). Il sagit en fait
dune nouvelle suite obtenue par une permutation des lments de la premire liste de telle faon que les
lments rsultants soient classs par ordre croissant au sens large selon la relation dordre totale :
(8 3 2 5 6 6 8 42 42 101).
Cette opration se retrouve trs souvent en informatique dans beaucoup de structures de donnes. Par
exemple, il faut tablir le classement de certains lves, mettre en ordre un dictionnaire, trier lindex dun
livre, etc...

5.6.1

Tri bulle

Cest le moins performant de la catgorie des tris par change ou slection, mais comme cest un algorithme
simple, il est intressant utiliser pdagogiquement.
Son principe est de parcourir la liste (a1, a2, ... , an) en intervertissant toute paire dlments conscutifs
(ai-1, ai) non ordonns. Ainsi aprs le premier parcours, llment maximum se retrouve en an. On suppose
que lordre scrit de gauche droite ( gauche le plus petit lment, droite le plus grand lment).
On recommence lopration avec la nouvelle sous-suite (a1, a2, ... , an-1) , et ainsi de suite jusqu puisement
de toutes les sous-suites (la dernire est un couple).
Le nom de tri bulle vient donc de ce qu la fin de chaque itration interne, les plus grands nombres de
chaque sous-suite se dplacent vers la droite successivement comme des bulles de la gauche vers la droite
Algorithme 5.21 : Tri bulle
Var :
Tab : Tableau[1 .. 15] de entier
I, J, Temp : Entier
Debut
Afficher "Tri bulles"
Pour I 15 A 1 Faire
Pour J 2 A I Faire
Si T ab[J 1] > T ab[J] Alors
T emp T ab[J 1]
T ab[j 1] T ab[j]
T ab[j] temp
FinSi
FPour
FPour
Fin
Pour un tableau N lmenents, le nombre dittrations est de (N 1) N/2

5.6. TRIS DANS UN TABLEAU


5.6.1.1

87

Tri par insertion

Son principe est de parcourir la liste non trie (a1, a2, ... , an) en la dcomposant en deux parties une partie
tdj trie et une partie non trie. La mthode est identique celle que lon utilise pour ranger des cartes
que lon tient dans sa main : on insre dans le paquet de cartes dj ranges une nouvelle carte au bon
endroit. Lopration de base consiste prendre llment frontire dans la partie non trie, puis linsrer
sa place dans la partie trie (place que lon recherchera squentiellement), puis dplacer la frontire dune
position vers la droite. Ces insertions seffectuent tant quil reste un lment ranger dans la partie non
trie.. Linsertion de llment frontire est effectue par dcalages successifs dune cellule.
Algorithme 5.22 : Tri par insertion
Var :
Tab : Tableau[1 .. 15] de entier
I, J, Temp : Entier
Debut
Afficher "Tri par insertion"
Pour I 2 A 15 Faire
T emp T ab[I]
J I
TantQue T ab[J 1] > T emp Faire
T ab[J] T ab[J 1]
J J 1
Ftq
T ab[J] T emp
FPour
Fin
Pour un tableau N lments, le nombre de comparaisons T ab[J] > T emp est au maximum de (N 1)N/21

5.6.2

Exercices

1. Saisir un tableau dordre N et le classer par ordre croissant.


2. Etant donn un vecteur de nombres tris par ordre croissant, chercher si un nombre donn x figure
parmi les composantes. Si oui, indiquer la valeur de lindice correspondant.
3. Soit un tableau T1 possdant N lments tris par ordre croissant et un tableau T2 aussi tri par ordre
croissant. Ecrire un algorithme qui fusionne les deux tableaux dans un troisime tableau aussi dans
lordre croissant

5.6.3

Recherche dichotomique

Methode :
1. Le tableau est tri par ordre croissant
2. On considre llment se trouvant au milieu du tableau
3. Si llment cherch est gal llment du milieu du tableau, la recherche se termine car llment est
trouv.
4. Si llment cherch est infrieur, on en conclut que llment cherch ne peut se trouver que dans la
premire moiti du tableau.

88

CHAPITRE 5. LES TABLEAUX


5. Si llment cherch est suprieur, on en conclut que llment cherch ne peut se trouver que dans la
deuxime moiti du tableau.
6. On recommence lopration sur la moiti concerne, puis sur la moiti de cette moiti, ainsi de suite
. . . jusqu ce que lune des conditions suivantes soit satisfaite :
(a) On a trouv llment recherch
(b) On est sr quil ne figure pas dans le tableau

Algorithme associ :
Algorithme 5.23 : Recherche Dichotomique
Var :
Tab : Tableau[1 .. 15] de entier
Nombre, I, Fin, Milieu : Entier
PasTrouve : Boolen
Debut
Afficher "Recherche dichotomique dans un tableau"
//on considre que le tableau existe tri par ordre croissant
N ombre 0
P asT rouve V rai
I1
F in 15
M ilieu 0
Afficher "Donnez le nombre rechercher"
Saisir Nombre
TantQue PasTrouve ET (I <= F in) Faire
M ilieu (I + F in)/2
Si N ombre < T ab[M ilieu] Alors
F in M ilieu 1
Sinon
Si N ombre > T ab[M ilieu] Alors
I M ilieu + 1
Sinon
P asT rouve F aux
FinSi
FinSi
Ftq
Si PasTrouve Alors
Afficher "Le nombre recherch nexiste pas dans le tableau"
Sinon
Afficher "Le nombre recherch existe pas dans le tableau"
FinSi
Fin

Chapitre 6

Les Sous-Programmes
Linformatique semble encore chercher la recette miracle qui permettra aux gens dcrire des
programmes corrects sans avoir rflchir. Au lieu de cela, nous devons apprendre aux gens
comment rflchir - Anonyme

6.1

Procdures et Fonctions

Une application, surtout si elle est longue, a toutes les chances de devoir procder aux mmes traitements,
ou des traitements similaires, plusieurs endroits de son droulement. Une procdure ou une fonction
permet dassocier un nom une suite dactions et dutiliser ce nom comme abrviation chaque fois que la
suite dactions apparat dans le programme ou algorithme.
Par exemple, la saisie dune rponse par oui ou par non (et le contrle quelle implique), peuvent tre rpts
dix fois des moments diffrents de la mme application.
La manire la plus vidente, mais aussi la moins habile, de programmer ce genre de choses, cest bien entendu
de rpter le code correspondant autant de fois que ncessaire. Apparemment, on ne se casse pas la tte :
quand il faut que la machine interroge lutilisateur, on recopie presque mot mot les lignes de codes voulues.
Mais en procdant de cette manire, la pire qui soit, on se prpare des lendemains qui dchantent...
Dabord, parce que si la structure dun programme crit de cette manire peut paratre simple, elle est
en ralit inutilement lourde. Elle contient des rptitions, et pour peu que le programme soit joufflu, il
peut devenir parfaitement illisible. Or, cest un critre essentiel pour un programme informatique, quil soit
facilement modifiable donc lisible, y compris - et surtout - par ceux qui ne lont pas crit ! Ds que lon
programme non pour soi-mme, mais dans le cadre dune organisation (entreprise ou autre), cette ncessit
se fait sentir de manire aigu.
En plus, un autre niveau, une telle structure pose des problmes considrables de maintenance : car en cas
de modification du code, il va falloir traquer toutes les apparitions de ce code pour faire convenablement la
modification ! Et si lon en oublie une, alors, on a laiss un bug.
Il faut donc opter pour une autre stratgie, qui consiste sparer ce traitement du corps du programme et
appeler ces instructions (qui ne figurent donc plus quen un seul exemplaire) chaque fois quon en a besoin.
Ainsi, la lisibilit est assure ; le programme devient modulaire, et il suffit de faire une seule modification au
bon endroit, pour que cette modification prenne effet dans la totalit de lapplication.
Le corps du programme sappelle alors la procdure principale, et ces groupes dinstructions auxquels on
a recours sappellent des sous-programmes. On utilisera le terme sous-programme indiffremment pour une
89

90

CHAPITRE 6. LES SOUS-PROGRAMMES

procdure ou une fontion.

6.1.1

Dclaration dun sous-programme

Le sens de la dclaration est dattribuer un nom unique une suite dactions


La dclaration dun sous-programme est toujours forme dun en-tte et dun corps.
Len-tte
Il est compos de :
1. le nom du sous-programme
2. les paramtres formels et leur type
3. le type de rsultat renvoy dans le cas dune fonction
Le corps
Le corps contient la suite dactions excuter. Nous le dlimiterons par Fin.

6.1.2

Avantages des Sous-Programmes

Les sous-programmes ont un rle trs important dans la structuration et la localisation, le paramtrage et la
lisibilit des programmes.
6.1.2.1

Constitution dune bote noire

Un sous-programme est un vritable outil de structuration comparable une bote noire. Les actions se
groupent en composants ferms et cohrents. Une suite dactions pourra tre dclares comme un sousprogramme mme si celle-ci nest excute quune seule fois.
6.1.2.2

Variables locales

Il arrive trs souvent que, pour des besoins de calculs intermdiaires, une suite dactions ait besoin des
variables qui sont sans signification relle en dehors cette suite, comme par exemple la valeur de qui
permettra de trouver les racines dans une quation du second degr. Les procdures et les fonctions permettent
ainsi de dfinir des variables locales dont le domaine de validit est dlimit. Cest--dire que leur usage se
fait uniquement dans la procdure ou fonction o elle se trouve.
6.1.2.3

Paramtres ou Arguments

Certaines suite dactions ont une forte ressemblance, mais ne diffrent que la valeur de certains identificateurs
ou expressions. On aimerait par exemple que la suite dactions qui calcule les racines dune quation du second
degr pour des coefficients particuliers de (A=2, B=5, C=3) puisse tre utilise pour pour calculer le racines
dont les coefficients sont par exemple (A=8, B=3, C=2) et dautres coefficients.
Le mecanisme de paramtrage dune fonction ou dune procdure nous permettra de considrer la suite daction comme un schma de traitement abstrait dont les paramtres vont reprsenter des valeurs particulires
chaque excution de la suite dactions.

6.1. PROCDURES ET FONCTIONS


6.1.2.4

91

Lisibilit du code

Un effet majeur de leffet de structuration des programmes laide des sous-programmes est laugmentation
de la lisibilit du code. Cela permet ainsi damliorer la documentation du programme

6.1.2.5

Utilisation dun sous-programme

Lutilisation dun sous-programme est une action lmentaire qui permet lexcution de la suite dactions
associe son nom. Il consiste indiquer le nom de la procdure ou fonction avec ses paramtres effectifs.

6.1.3

Dclaration dune fonction

Syntaxe de len-tte
Fonction NomFonction(Listes paramtres formels ou arguments) : Type
Syntaxe du corps
{Corps de la fonction}
. . . suite dactions
Fin
Fonction NomFonction(paramtre : Type) : Type
Debut
. . . Suite dactions
Fin
Si la plupart des langues de programmation possdent la notion de procdure et de fonctions, cela signifie
que cest un outil fondamental de "lart de la programmation dont la matrise influe de faon dcisive sur le
style et la qualit du travail du programmeur [?]".
Analysons un exemple de question laquelle lutilisateur doit rpondre par oui ou par non.
Mauvaise Structure :
Afficher "Etes-vous mari ?"
Rep1 ""
TantQue Rep1 <> "Oui" et Rep1 <> "Non" Faire
Afficher "Tapez Oui ou Non"
Saisir Rep1
Afficher "Avez-vous des enfants ?"
Rep2 ""
TantQue Rep2 <> "Oui" et Rep2 <> "Non" Faire
Afficher "Tapez Oui ou Non"
Saisir Rep2
On le voit bien, il y a l une rptition quasi identique du traitement accomplir. A chaque fois, on demande
une rponse par Oui ou par Non, avec contrle de saisie. La seule chose qui change, cest le nom de la
variable dans laquelle on affecte la rponse. Alors, il doit bien y avoir un truc.

92

CHAPITRE 6. LES SOUS-PROGRAMMES

La solution consiste isoler les instructions demandant une rponse par Oui ou Non, et appeler ces
instructions chaque fois que ncessaire. Ainsi, on vite les rptitions inutiles.
nous appellerons RepOuiNon :
Fonction RepOuiNon : Chane
Var :
Reponse : Chane
Debut
Reponse
TantQue Reponse <> "O" et Reponse <> "N" Faire
Afficher "Tapez O pour Oui ou N pour Non"
Saisir Reponse
Ftq
Renvoyer Reponse
Fin
Une fonction scrit toujours en-dehors de la procdure principale. Selon les langages, cela peut prendre
diffrentes formes. Mais ce quil faut comprendre, cest que ces quelques lignes de codes sont en quelque sorte
des satellites, qui existent en dehors du traitement lui-mme.
6.1.3.1

Utilisation dune fonction

Une fonction est utilise dans une expression ou une instruction.


Si lon reprend notre exemple, une fois notre fonction RepOuiNon crite, nous pouvons lutiliser en crivant
les lignes suivantes :
Afficher "Etes-vous mari ?"
Rep1 RepOuiNon()
Afficher "Avez-vous des enfants ?"
Rep2 RepOuiNon()
Il faut retenir que Rep1 et Rep2 doivent tre des variables qui ont le mme type que la fonction : ici type
chane.
On a ainsi vit les rptitions inutiles, et si daventure, il y avait un bug dans notre contrle de saisie, il
suffirait de faire une seule correction dans la fonction RepOuiNon pour que ce bug soit limin de toute
lapplication.
Toutefois, les plus sagaces dentre vous auront remarqu, tant dans le titre de la fonction , que dans chacun des
appels, la prsence de parenthses. Celles-ci, ds quon cre ou quon appelle une fonction, sont obligatoires.
Et si vous avez bien compris tout ce qui prcde, vous devez avoir une petite ide de ce quon va pouvoir
mettre dedans...
6.1.3.2

Les arguments dune fonction

Reprenons lexemple qui prcde et analysons-le. Nous crivons un message lcran, puis appelons la fonction
RepOuiNon pour poser une question ; puis, un peu plus loin, on crit un autre message lcran, et on
appelle de nouveau la fonction pour poser la mme question, etc. Cest une dmarche acceptable, mais qui
peut encore tre amliore : puisque avant chaque question, on doit crire un message, autant que cette

6.1. PROCDURES ET FONCTIONS

93

criture du message figure directement dans la fonction appele. Cela implique deux choses :
1. lorsquon appelle la fonction, on doit lui prciser quel message elle doit afficher avant de lire la rponse
2. la fonction doit tre "prvenue" quelle recevra un message, et tre capable de le rcuprer pour lafficher.
En langage algorithmique, on dira que le message devient un argument de la fonction. Cela nest certes pas
une dcouverte pour vous : Eh bien, quitte construire nos propres fonctions, nous pouvons donc construire
nos propres arguments. Voil comment laffaire se prsente...
Fonction RepOuiNon(Msg : Chane) : Chane
Var :
Reponse : Chane
Debut
Reponse
TantQue Reponse <> "O" et Reponse <> "N" Faire
Afficher "Tapez O pour Oui ou N pour Non"
Saisir Reponse
Ftq
Renvoyer Reponse
Fin
Il y a donc maintenant entre les parenthses une variable, Msg, dont on prcise le type, et qui signale la
fonction quun argument doit lui tre envoy chaque utilisation. On aura donc :
Rep1 RepOuiNon("Etes-vous mari ?")
Rep2 RepOuiNon("Avez-vous des enfants ?")
Une remarque importante : l, on na pass quun seul argument en entre. Mais bien entendu, on peut en
passer autant quon veut, et crer des fonctions avec deux, trois, quatre, etc. arguments ; Simplement, il faut
viter dtre gourmands, et il suffit de passer ce dont on en a besoin, ni plus, ni moins !
Dans le cas que lon vient de voir, le passage dun argument la fonction tait lgant, mais pas indispensable.
La preuve, cela marchait dj trs bien lors de la premire version. Nous allons voir maintenant une situation
o il faut absolument passer deux arguments une fonction si lon veut quelle puisse remplir sa tche.
Imaginons qu plusieurs reprises au cours du programme, on ait calculer la moyenne des lments de
diffrents tableaux. Plutt que rpter le code chaque fois, on va donc crer une fonction Moy, charge
spcialement de calculer cette moyenne. Voyons un peu de quoi cette fonction a besoin :
du tableau, bien sr. Comment calculer la moyenne de ses lments sans cela ?
mais il faut galement le nombre dlments du tableau, ou, au choix, lindice maximal du tableau. Enfin,
quelque chose qui permette la fonction de savoir combien de tours de boucle elle devra faire.
Voil donc une situation o la fonction a absolument besoin de deux arguments. Ici le nom du tableau et le
nombre dlments constituant le tableau.
Le plus important, cest dacqurir le rflexe de constituer systmatiquement les fonctions adquates quand
on doit traiter un problme donn.
Cette partie de la rflexion sappelle dailleurs lanalyse fonctionnelle dun problme, et cest toujours par l
quil faut commencer : en gros, dans un premier temps, on dcoupe le traitement en modules, et dans un
deuxime temps, on crit chaque module. Cependant, avant den venir l, il nous faut dcouvrir un dernier
outil, qui prend le relais l o les fonctions deviennent incapables de nous aider.

94

CHAPITRE 6. LES SOUS-PROGRAMMES

6.1.4

Les Procdures

Les fonctions, cest bien, mais dans certains cas, a ne nous rend gure service.
Il peut en effet arriver que dans un programme, on ait raliser des tches rptitives, mais que ces tches
naient pas pour rle de gnrer une valeur particulire, ou quelles aient pour rle den gnrer plus dune
la fois. Vous ne voyez pas de quoi je veux parler ? Prenons deux exemples.
1. Premier exemple. Imaginons quau cours de mon application, jaie plusieurs fois besoin deffacer lcran
et de rafficher un petit dessin en haut gauche. On pourrait se dire quil faut crer une fonction
pour faire cela. Mais quelle serait la valeur renvoye par la fonction ? Aucune ! Effacer lcran, ce nest
pas produire un rsultat stockable dans une variable, et afficher un dessin non plus. Voil donc une
situation ou jai besoin de rpter du code, mais o ce code na pas comme rle de produire une valeur.
2. Deuxime exemple. Au cours de mon application, je dois plusieurs fois faire saisir un tableau dentiers
(mais chaque fois, un tableau diffrent). L encore, on serait tent deffectuer toutes ces saisies de
tableaux dans une seule fonction. Mais problme, une fonction ne peut renvoyer quune seule valeur
la fois. Elle ne peut donc renvoyer un tableau, qui est une srie de valeurs distinctes.
Alors, dans ces deux cas, faute de pouvoir traiter laffaire par une fonction, devra-t-on en rester au code
rptitif dont nous venons de dnoncer si vigoureusement les faiblesses ? Non ? Vous vous doutez bien que
non. Heureusement, tout est prvu, il y a une solution. Et celle-ci consiste utiliser des procdures.
En fait, les fonctions - que nous avons vues - ne sont quun cas particulier des procdures - que nous allons
voir : celui o doit tre renvoy vers la procdure appelante une valeur et une seule. Dans tous
les autres cas, il faut donc avoir recours non la forme particulire et simplifie (la fonction), mais la forme
gnrale (la procdure).
Parlons donc de ce qui est commun aux procdures et aux fonctions, mais aussi de ce qui les diffrencie.
Voici comment se prsente une procdure :
Procdure NomProc( . . .)
Var
Dbut
...
Fin
Etablissons un premier tat des lieux.
1. Alors quune fonction se caractrisait par les mots-cls Fonction . . . Fin, une procdure est identifie
par les mots-cls Procdure . . . Fin. Oui, je sais, cest un peu trivial comme remarque, mais, bon, on
ne sait jamais.
2. Lorsquune fonction tait appele, sa valeur (retourne) tait toujours affecte une variable. Lappel une procdure, lui, est au contraire toujours une instruction autonome. "Excute la procdure
NomProc" est un ordre qui se suffit lui-mme.
3. Toute fonction devait, pour cette raison, comporter linstruction "Renvoyer". Pour la mme raison,
linstruction "Renvoyer" nest jamais utilise dans une procdure. La fonction est une valeur calcule,
qui renvoie son rsultat vers la procdure principale. La procdure, elle, est un traitement qui ne renvoit
pas de valeur ; elle ne "vaut" rien.
Mme une fois quon a bien compris les trois premiers points, on nest pas au bout de nos peines.

6.1. PROCDURES ET FONCTIONS

95

En effet, il nous reste examiner ce qui peut bien se trouver dans les parenthses, la place des points
de suspension, aussi bien dans la dclaration de la procdure que dans son utilisation. Vous vous en doutez
bien : cest l que vont se trouver les outils qui vont permettre lchange dinformations entre la procdure
principale et la procdure (en fait, cette dernire phrase est trop restrictive : mieux vaudrait dire : entre la
procdure appelante et la procdure appele. Car une procdure peut trs bien en appeler elle-mme une
autre afin de pouvoir accomplir sa tche)
Dans une fonction, les valeurs qui circulaient depuis la procdure (ou la fonction) appelante jusqu la fonction
portaient le nom darguments. L, les valeurs qui circulent depuis la procdure (ou la fonction) appelante
vers la procdure appele se nomment des paramtres en entre de la procdure. Mais seul le nom change :
"paramtres en entre" pour les procdures ou "arguments" pour les fonctions, on parle en fait exactement
de la mme chose.
Inversement, dans une fonction, la valeur retourne par la fonction portait le nom de la fonction elle-mme, et
elle faisait lobjet dune instruction spciale ("renvoyer"). Avec une procdure, les valeurs retournes, quand
il y en a, sappellent des paramtres en sortie de la procdure, qui doivent tre dclars explicitement
comme tels.
Ceci nous permet de reformuler en termes un peu diffrents la vrit fondamentale apprise un peu plus haut :
toute procdure possdant un et un seul paramtre en sortie peut galement tre crite sous forme dune
fonction (et entre nous, cest prfrable car un peu plus facile).
Il ne vous reste plus quune seule chose savoir avant de pouvoir passer la pratique. Cest que dans la
plupart des langages, on ne parlera pas de paramtres "en entre" ou "en sortie", mais de "paramtres
transmis :
par valeur ou donnes (correspondant un paramtre en entre)
par rfrence ou rsultat (correspondant un paramtre en sortie)
On peut galement imaginer le cas dun paramtre qui serait pass une procdure la fois en entre et en
sortie : on envoie une variable une procdure, afin quelle la traite et la renvoie modifie. Dans ce cas, le
paramtre aura galement le statut dune transmission par rfrence (qui peut le plus peut le moins).
Tout cela peut sembler un tantinet compliqu. Mais sur le principe, cest en ralit assez simple, et ds que
vous aurez pratiqu un peu, vous ferez cela les yeux ferms. Reprenons le cas dun programme au cours
duquel on a plusieurs tableaux dentiers faire saisir par lutilisateur. Puisquun tableau comporte plusieurs
valeurs, nous savons quil ne peut, par dfinition, tre renvoy par une fonction. Mais une procdure, elle,
comporte autant de paramtres en sortie quon veut. Elle peut donc sans problme renvoyer un tableau vers
la procdure qui lappelle. Ecrivons donc notre procdure :
Procdure SaisieTab(rsultat UnTableau : Tableau[1..30] : Rel )
Var :
I : Entier
Debut
Pour I 1 30 Faire
Afficher "Saisie de la valeur no ", I
Saisir UnTableau[I]
FPour
Fin
Conclusion : une procdure est un morceau de code qui comporte ventuellement des paramtres en entre
(transmis par valeur) et des paramtres en sortie (transmis par rfrence). La procdure manipule donc des
variables qui lui sont propres, et la procdure appelante agit de mme. La prsence des paramtres dans

96

CHAPITRE 6. LES SOUS-PROGRAMMES

lappel la procdure et dans le titre de celle-ci assure le fait que la valeur des uns sera recopie dans les
autres (transmission par valeur) et quen retour, celle des autres sera recopie dans les uns (transmission par
rfrence).
6.1.4.1

Passage des paramtres

Avec les procdures, on distingue deux genres de paramtres :


1. les paramtres formels : ce sont les paramtres placs dans la parenthse lors de la dclaration de
la procdure. Il servent dcrire le traitement raliser indpendamment des valeurs traites
2. les paramtres effectifs ou rels : ce sont les paramtres placs dans la parenthse dune procdure
lors de lappel de cette procdue. Lorsquils sont de type donne, ils contiennent effectivement les valeurs
sur lequelles sera effectu le traitement de la procdure. Lors de lappel, leur valeur est recopie dans
les paramtres formels correspondants. Un paramtre effectif en donne peut tre soit une variable, soit
une valeur littrale, soit le rsultat dune expression.
Il existe deux types de paramtres formels :
1. les donnes
2. les rsultats
6.1.4.2

Rgles de transmission des paramtres

Le remplacement des paramtres formels par les paramtres effectifs ou rels au moment de lutilisation de
la procdure ou de la fonction se fait selon des rgles strictes de transmission des paramtres :
1. le nombre de paramtres formels doit correspondre exactement au nombre de paramtres effectifs ou
rels
2. lordre ou position des paramtres formels doit correspondre lordre ou position des paramtres
effectifs ou rels
La seule chose remarquer, cest que les variables manipules par la procdure (notamment le tableau T)
ne sont pas celles qui sont manipules dans la procdure appelante (les tableaux Note et Temperature).
6.1.4.3

Passage de paramtre de type donne

Lors de lappel de la procdure, la valeur du paramtre effectif ou rel est copie dans sa correspondance en
position du paramtre formel. La procdure effectue alors le traitement avec la valeur reue du paramtre
effectif. Le paramtre effectif ou rel sert donc fournir une valeur initiale au paramtre formel.
Il faut notez que toute modification du paramtre formel reste locale la procdure. Ceci veut dire quun
paramtre effectif de type donne ne peut tre modifi.
6.1.4.4

Passage de paramtre de type rsultat

La valeur du paramtre de type rsultat est communique au programme appelant au moment du retour
dappel, cest--dire la fin du traitement de la procdure. Cette valeur est copie dans sa correspondance
en position du paramtre effectif ou rel.
Les paramtres effectifs ou rels transmis par rsultat sont ncessairement des identificateurs (variable).
La valeur initiale dun paramtre effectif ou rel de type rsultat na aucune importance car la procdure se
charge de lui affecter une valeur.

6.1. PROCDURES ET FONCTIONS


6.1.4.5

97

Paramtre de type donne et rsultat

Les paramtres de type donne et rsultat correspondent des paramtres de type rsultat. A lappel, la
valeur du paramtre effectif est copie dans le paramtre formel de la procdure. La procdure se sert de
cette valeur pour le traitement. A la fin du traitement, la nouvelle valeur du paramtre formel est recopie
dans le paramtre effectif ou rel de lappelant.

6.1.5

Variables globale ou locale

Lexistence de procdures, de paramtres, pose le problme de la dure de vie des variables, ce quon
appelle leur porte. Pour adopter une classification simple (mais qui devient parfois plus complexe dans
certains langages), une variable peut tre dclare :
1. Comme locale (cest neuf fois sur dix loption par dfaut). Cela signifie que la variable disparat (et sa
valeur avec) ds que prend fin la procdure o elle a t cre.
2. Comme globale. Ce qui signifie quune telle variable est conserve intacte pour toute lapplication,
au-del des ouvertures et fermetures de procdures. La variable conserve sa valeur et peut tre traite
par diffrentes procdures du programme.
6.1.5.1

Variable dans la procdure

Les variables dclares dans une procdure ne sont pas utilisables dans le programme appelant et inversement,
les variables dclares dans le programme appelant ne sont pas utilisables dans les procdures. Chaque
programme et sous-programme a son propre espace de variables, inaccessible par les autres. On dit alors que
les variable sont locales.
Comment choisir de dclarer une variable en Global ou Local ? Cest trs simple : les variables globales
consomment normment de ressources en mmoire. En consquence, le principe qui doit prsider
au choix entre variables Globales et Locales doit tre celui de lconomie de moyens : on ne dclare
comme Globales que les variables qui doivent absolument ltre. Et chaque fois que possible, lorsquon cre
une procdure, on utilise le passage de paramtres plutt que des variables Globales.

6.1.6
6.1.6.1

Exemple de Fonctions et Procdures


Exemple 1 - Procdure

Procdure LigneEtoile(donne Nombres : Entier )


Var :
Compteur : Entier
Debut
Pour Compteur 1 Nombres Faire
Afficher "*"
FPour
Fin
//Sous-programme
//Programme appelant

98

CHAPITRE 6. LES SOUS-PROGRAMMES

Algorithme 6.6 : RectangleEtoile


Var :
NbLignes, NbEtoiles, I : Entier
Debut
Afficher "Ce programme dessine un rectangle dtoiles"
Afficher "Combien voulez-vous dtoiles par ligne
Saisir NbEtoiles
Afficher "Combien voulez-vous de lignes
Saisir NbLignes
Pour I 1 A NbLignes Faire
LigneEtoile(NbEtoiles) //utilisation de la procdure
FPour
Fin

6.1. PROCDURES ET FONCTIONS


6.1.6.2

Exemple 2 - Fonction

Fonction Factorielle(N : Entier ) : Entier


//Cette fonction retourne la factorielle du nombre N pass en paramtre
Var :
I, Fac : Entier
Debut
F ac 1
Si N <> 0 Alors
Pour I 1 A N Faire
F ac F act I
FPour
FinSi
Renvoyer Fac
Fin
Fonction NombrePositif : Entier
//Cette fonction permet de saisir un nombre positif qui est ensuite pass la
fonction factorielle
Var :
NombreSaisie : Entier
Debut
N ombreSaisie 0
Afficher "Veuillez entrer un nombre positif : "
Saisir NombreSaisie
TantQue N ombreSaisie < 0 Faire
Afficher "Erreur. Saisissez un nombre suprieur 0 SVP : "
Saisir NombreSaisie
Ftq
Renvoyer NombreSaisie
Fin
//Programme appelant
Algorithme 6.9 : AfficheFactorielle
Var :
Nombre : Entier
Reponse : Car
Debut
N ombre 0
Reponse 00
Rpter
N ombre N ombreP ositif () //Utilisation de la fonction
//Utilisation de la fonction factorielle dans Afficher
Afficher "La factorielle de ", "Nombre", "est ",Factorielle(Nombre)
Afficher "Voulez-vous recommencer ? O pour Ouin N pour Non"
Jusqu Reponse = n ou Reponse = N
Fin

99

100

CHAPITRE 6. LES SOUS-PROGRAMMES

6.1.6.3

Exemple 3

Procdure SaisieTable(rsultat UneTable : Tabelau[1..30] : Rels)


//Cette procdure permet de remplir le tableau
//Cette fonction retourne la factorielle du nombre N pass en paramtre
Var :
I : Entier
Debut
Pour I 1 A 30 Faire
Saisir UneTable[I]
FPour
//A la fin de la boucle, le tableau est rempli
Fin
Procdure MinMax(donne LaTable : Tableau[1..30] : Rel, rsultat Min, Max : Rel )
//Cette fonction permet de saisir un nombre positif qui est ensuite pass la
fonction factorielle
Var :
I : Entier
Debut
M in LaT able[1]
M ax LaT able[1]
Pour I 2 A 30 Faire
Si LaT able[I] < M in Alors
M in LaT able[I]
FinSi
Si LaT able[I] > M ax Alors
M ax LaT able[I]
FinSi
FPour
//A la sortie de la boucle, Min et Max contiennent respectivement la valeur du
Minimum et la valeur du Maximum
Fin
//Programme appelant

6.1. PROCDURES ET FONCTIONS

101

Algorithme 6.12 : AfficheNote


Var :
TableNote : Tableau[1..30] : Entier
NoteMin, NoteMax, I : Entier
Debut
//Initialisation du tableau de notes 0
Pour I 1 A 30 Faire
T ableN ote[I] 0
FPour
Afficher "Veuillez saisir les 30 notes"
//Appel de la procdure pour saisir les notes
SaisieTable(TableNote)
//Recherche de Min et Max avec la procdure MinMax
MinMax(NoteMin, NoteMax) //Attention lordre des paramtres
Afficher "La note la plus haute est ", NoteMax
Afficher "La note la plus basse est ", NoteMin
Fin

6.1.7

Exercices

1. Nombre de jours de congs


Dans une entreprise, le calcul des jours de congs pays seffectue de la manire suivante :
(a) si une personne est entre dans lentreprise depuis moins dun an, elle a droit deux jours de
congs par mois de prsence, sinon 28 jours au moins.
(b) si une personne est un cadre et sil est g dau moins 35 ans et si son anciennet est suprieure
3 ans, il lui est accord 2 jours supplmentaires. Si elle est ge dau moins 45 ans et si son
anciennet est suprieure 5 ans, il lui est accord 4 jours supplmentaires, en plus des 2 accords
pour plus de 35 ans.
Ecrire une fonction, joursDeCongs, qui calcule le nombre de jours de congs partir de lge, lanciennet et lappartenance au collge cadre dun employ.
2. Tri de trois entiers
Ecrire une procdure, trierTroisEntiers, qui prend en entre trois entiers et qui les retourne tris par
ordre croissant.
3. Le temps plus une seconde
Ecrire une procdure, ajouterUneSeconde, qui pour un temps donn (reprsent sous la forme heure,
minute, seconde) retourne le temps (sous la mme reprsentation) aprs avoir ajout une seconde.
4. La multiplication
Ecrire une fonction, multiplication, qui effectue la multiplication de deux entiers positifs (nots x et y)
donns en utilisant uniquement laddition entire.
5. Nombres premiers Ecrire la fonction estPremier, qui partir dun entier strictement positif donn,
retourne le rsultat boolen VRAI ou FAUX selon que le nombre est premier ou non. Pour mmoire,
voici la liste des nombres premiers infrieurs 100 : 1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43,
47, 53, 59, 61, 67, 71, 73, 79, 83, 89 et 97.
6. Nombres parfaits

102

CHAPITRE 6. LES SOUS-PROGRAMMES


Ecrire une procdure, afficherNombresParfait, qui affiche la suite de tous les nombres parfaits infrieurs
ou gaux un nombre, entier positif donn not n. Un nombre est dit parfait sil est gal la somme
de ses diviseurs stricts.
Exemple : 28 = 1 + 2 + 4 + 7 + 14
Voici la liste des nombres parfaits infrieurs 10000 : 6, 28, 496, 8128.

7. Ecriture dun menu


Ecrire une procdure, afficherMenu, permettant de grer sous la forme dun menu un certain nombre
de procdures.
Le choix dans ce menu orientera lutilisateur vers un des exercices de cette section. Le choix se fera par
lintermdiaire dun numro (on ne retiendra que 7 exercices).
8. Recherche dun lment dans un tableau
Dans un magasin, chaque produit est associ une rfrence et un prix. Tous les produits sont mmoriss
dans un tableau, produits, donn.
Ecrire une procdure, rechercherProduit, qui pour une rfrence dun produit, rfrence, en entre,
retourne le prix du produit ainsi que sa position dans le tableau, si le produit est effectivement dans le
tableau sinon retourne une information boolenne sur labsence du produit. Bien entendu, on arrte
la recherche ds que le produit est rencontr.

Chapitre 7

Programmation en langage C
7.1

Types de Base, Oprateurs et Expressions

Nous savons que les variables et les constantes sont les donnes principales qui peuvent tre manipules par
un programme. Les dclarations introduisent les variables qui sont utilises, fixent leur type et parfois aussi
leur valeur de dpart. Les oprateurs contrlent les actions que subissent les valeurs des donnes. Pour
produire de nouvelles valeurs, les variables et les constantes peuvent tre combines laide des oprateurs
dans des expressions. Le type dune donne dtermine lensemble des valeurs admissibles, le nombre doctets
rserver en mmoire et lensemble des oprateurs qui peuvent y tre appliqus.

7.1.1
7.1.1.1

Les types
Les types simples

Les entiers signs


Type
char
short
int
long

Description
caractre
entier court
entier standard
entier long

domaine min
-128
-32768
-32768
-2 147 483 648

domaine max
127
32767
32767
2 147 483 647

nombre doctets
1
2
2

Les entiers non signs


Type
unsigned char
unsigned short
unsigned int
unsigned long

description
caractre
entier court
entier standard
entier long

domaine min
0
0
0
0

domaine max
255
65 535
65 535
4294967295

nombre doctets
1
2
2
4

Les types rationnels


Type
float
double
long double

description
rel simple
rel double
suppl.

domaine min
3.4 * 10-38
1.7 * 10-308
3.4 * 10-4932

domaine max
3.4 * 1038
1.7 * 10308
1.1 * 104932
103

nombre doctets
4
8
10

104

7.1.2
7.1.2.1

CHAPITRE 7. PROGRAMMATION EN LANGAGE C

Les oprateurs
Loprateur daffectation

Laffectation avec des valeurs constantes


Longueur = 1 4 1 ;
PI = 3 . 1 4 1 5 9 2 6 ;
Nation = L ;

7.1.2.2

Laffectation avec des valeurs de variables

Valeur = X1A ;
L e t t r e = COURRIER;
7.1.2.3

Laffectation avec des valeurs dexpressions

AIRE = PI pow (R, 2 ) ;


Moyenne = (A+B) / 2 ;
UN=pow ( s i n (X) ,2)+ pow ( c o s (X) , 2 ) ;
RES = 45+5X;
PLUSGRAND = (X>Y ) ;
CORRECT = ( a == a ) ;

7.1.3
7.1.3.1

Les oprateurs connus


Oprateurs arithmtiques

+ addition
- soustraction
* multiplication
/ division (entire et rationnelle !)
% modulo (reste dune div. entire)
7.1.3.2

Oprateurs logiques

&& et logique
|| ou logique
! ngation logique
7.1.3.3

Oprateurs de comparaison

== gal
!= diffrent de
<, <=, >, >= plus petit que, ...

7.1. TYPES DE BASE, OPRATEURS ET EXPRESSIONS

7.1.4

105

Les oprateurs particuliers de C

7.1.4.1

Oprateurs daffectation

En pratique, nous retrouvons souvent des affectations comme : i = i + 2


En C, nous utiliserons plutt la formulation plus compacte : i += 2
Loprateur += est un oprateur daffectation.
Pour la plupart des expressions de la forme : expr1 = (expr1) op (expr2)
il existe une formulation quivalente qui utilise un oprateur daffectation :
expr1 op= expr2
+= ajouter
-= diminuer de
*= multiplier par
/= diviser par
%= modulo

7.1.4.2

Oprateurs dincrmentation et de dcrmentation

Les affectations les plus frquentes sont du type :


I = I + 1 et I = I - 1
En C, nous disposons de deux oprateurs inhabituels pour ces affectations :
I++ ou ++I pour lincrmentation (augmentation dune unit)
I ou I pour la dcrmentation (diminution dune unit)
Les oprateurs ++ et sont employs dans les cas suivants :
incrmenter/dcrmenter une variable (p.ex : dans une boucle). Dans ce cas il ny a pas de diffrence entre
la notation prfixe (++I I) et la notation postfixe (I++ I).
incrmenter/dcrmenter une variable et en mme temps affecter sa valeur une autre variable. Dans ce cas,
nous devons choisir entre la notation prfixe et postfixe :
X = I++ passe dabord la valeur de I X et incrmente aprs
X = I passe dabord la valeur de I X et dcrmente aprs
X = ++I incrmente dabord et passe la valeur incrmente X
X = I dcrmente dabord et passe la valeur dcrmente X
Exemple
Supposons que la valeur de N est gal 5 :
Incrm. postfixe : X = N++ ; Rsultat : N=6 et X=5
Incrm. prfixe : X = ++N ; Rsultat : N=6 et X=6

106

7.2

CHAPITRE 7. PROGRAMMATION EN LANGAGE C

La dclaration des variables

Maintenant que nous connaissons les principaux types de variables, il nous faut encore la syntaxe pour leur
dclaration :
<Type> <NomVar1>,<NomVar2>,...,<NomVarN> ;
Exemple
int Compteur,X,Y ;
float Hauteur,Largeur ;
double MasseAtomique ;
char Touche ;
int Tpressee ;

7.3

Afficher et Saisir les donnes

La bibliothque standard <stdio> contient un ensemble de fonctions qui assurent la communication de la


machine avec le monde extrieur. Dans ce chapitre, nous allons en discuter les plus importantes :
printf() : affichage format de donnes
scanf() : saisie formate de donnes
putchar() : affichage dun caractre
getchar() : saisie dun caractre

7.3.1

saisie formate de donnes

printf()
La fonction printf est utilise pour transfrer du texte, des valeurs de variables ou des rsultats dexpressions
vers le fichier de sortie standard qui est lcran.
Affichage format en C
printf("<format>",<Expr1>,<Expr2>, ... )
La partie "<format>" est en fait une chane de caractres qui peut contenir :
du texte
des squences dchappement
des spcificateurs de format
Les spcificateurs de format indiquent la manire dont les valeurs des expressions <Expr1..N> sont imprimes.
La partie "<format>" contient exactement un spcificateur de format pour chaque expression <Expr1..N>.
Les spcificateurs de format commencent toujours par le symbole % et se terminent par un ou deux
caractres qui indiquent le format dimpression.
Exemple
La suite dinstructions :
int A = 1234;

7.3. AFFICHER ET SAISIR LES DONNES

107

int B = 567;
p r i n t f ("% i f o i s %i e s t %l i \n " , A, B, ( l o n g )AB ) ;
va afficher sur lcran : 1234 fois 567 est 699678
Exemple
La suite dinstructions :
c h a r B = A ;
p r i n t f ( " Le c a r a c t r e %c a l e code %i ! \ n " , B, B ) ;
va afficher sur lcran : Le caractre A a le code 65 !
Spcificateurs de format pour printf
%d ou %i pour int
%u int pour entier naturel (unsigned)
%o pour int entier exprim en octal
%x pour int entier exprim en hexadcimal
%c pour int caractre
%f pour float ou double rationnel en notation dcimale
%e pour double rationnel en notation scientifique
%s pour char* chane de caractres
Largeur minimale et prcision pour les rationnels
Pour les rationnels, nous pouvons indiquer la largeur minimale de la valeur afficher et la prcision du
nombre afficher. La prcision par dfaut est fixe six dcimales. Les positions dcimales sont arrondies
la valeur la plus proche.
Exemples
p r i n t f ("% f " , 1 0 0 . 1 2 3 ) ; donne 1 0 0 . 1 2 3 0 0 0
p r i n t f ("%12 f " , 1 0 0 . 1 2 3 ) ; donne __100 . 1 2 3 0 0 0
p r i n t f ("%.2 f " , 1 0 0 . 1 2 3 ) ; donne 1 0 0 . 1 2
p r i n t f ("%5.0 f " , 1 0 0 . 1 2 3 ) ; donne __100
p r i n t f ("%10.3 f " , 1 0 0 . 1 2 3 ) ; donne ___100. 1 2 3
p r i n t f ("%.4 f " , 1 . 2 3 4 5 6 ) ; donne 1 . 2 3 4 6

7.3.2

Saisie formate de donnes

scanf()
La fonction scanf est la fonction symtrique printf ; elle nous offre pratiquement les mmes conversions que
printf, mais en sens inverse.
Saisie formate en C
scanf("<format>",<AdrVar1>,<AdrVar2>, ...)
"<format>" : format de lecture des donnes
<AdrVar1>,... : adresses des variables auxquelles les donnes seront attribues

108

CHAPITRE 7. PROGRAMMATION EN LANGAGE C

Exemple
La suite dinstructions :
i n t JOUR, MOIS, ANNEE;
s c a n f ("% i %i %i " , &JOUR, &MOIS, &ANNEE) ;
saisit trois entiers relatifs, spars par des espaces, tabulations ou interlignes. Les valeurs sont attribues
respectivement aux trois variables JOUR, MOIS et ANNEE.
Spcificateurs de format pour scanf
%d ou %i : entier relatif
%u : entier naturel (unsigned)
%o : entier exprim en octal
%b : entier exprim en hexadcimal
%c : caractre
%s : chane de caractres
%f %e : rationnel en notation dcimale ou exponentielle (scientifique)
Le type long
Si nous voulons saisir une donne du type long, nous devons utiliser les spcificateurs %ld, %li, %lu, %lo,
%lx. (Sinon, le nombre est simplement coup la taille de int).
Le type double
Si nous voulons lire une donne du type double, nous devons utiliser les spcificateurs %le ou %lf.
Le type long double
Si nous voulons lire une donne du type long double, nous devons utiliser les spcificateurs %Le ou %Lf.
4. Indication de la largeur maximale
Pour tous les spcificateurs, nous pouvons indiquer la largeur maximale du champ valuer pour une donne.
Les chiffres qui passent au-del du champ dfini sont attribus la prochaine variable qui sera lue !
Exemple
Soient les instructions :
i n t A, B ;
s c a n f ("%4d %2d " , &A, &B ) ;
Si nous entrons le nombre 1234567, nous obtiendrons les affectations suivantes : A=1234 - B=56 le chiffre 7
sera gard pour la prochaine instruction de saisir.
Les signes despacement
Lors de lentre des donnes, une suite de signes despacement (espaces, tabulateurs, interlignes) est value
comme un seul espace. Dans la chane de format, les symboles
t,
n,
r ont le mme effet quun simple espace.
Exemple
Pour la suite dinstructions

7.3. AFFICHER ET SAISIR LES DONNES

109

i n t JOUR, MOIS, ANNEE;


s c a n f ("% i %i %i " , &JOUR, &MOIS, &ANNEE) ;
les entres suivantes sont correctes et quivalentes : 12 4 1980 ou 12 004 1980 ou 12
4
1980
Formats spciaux
Si la chane de format contient aussi dautres caractres que des signes despacement, alors ces symboles
doivent tre introduits exactement dans lordre indiqu.
Exemple
La suite dinstructions
i n t JOUR, MOIS, ANNEE;
s c a n f ("% i /% i /% i " , &JOUR, &MOIS, &ANNEE) ;
accepte les entres : 12/4/1980 - 12/04/01980
rejette les entres : 12 4 1980 - 12 /4 /1980

7.3.3

Affichage dun caractre

La commande, putchar()
putchar(a) ;
Cette commande transfre le caractre a vers le fichier standard de sortie stdout. Les arguments de la
fonction putchar sont ou bien des caractres (c.--d. des nombres entiers entre 0 et 255) ou bien le symbole
EOF (End Of File).
Exemples
char A = 225;
char B = \ a ;
i n t C = \ a ;
putchar ( x ) ;
putchar ( ? ) ;
putchar ( \ n ) ;
putchar ( 6 5 ) ;
p u t c h a r (A ) ;
p u t c h a r (B ) ;
p u t c h a r (C ) ;
p u t c h a r (EOF ) ;

7.3.4

/
/
/
/
/
/
/
/
/
/

afficher la lettre x
a f f i c h e r l e symbole ?
retour la ligne
a f f i c h e r l e symbole avec
l e code 65 ( ASCII : A )
a f f i c h e r l a l e t t r e avec
l e code 225 ( ASCII : )
beep s o n o r e
beep s o n o r e
marquer l a f i n du f i c h i e r

/
/
/
/
/
/
/
/
/
/

Saisie dun caractre

Une fonction plus souvent utilise que putchar est la fonction getchar, qui lit le prochain caractre du fichier
dentre standard stdin.

110

CHAPITRE 7. PROGRAMMATION EN LANGAGE C

i n t C;
C = getchar ( ) ;
getchar lit les donnes de la zone tampon de stdin et fournit les donnes seulement aprs confirmation par
Enter. La bibliothque <conio> contient une fonction du nom getch qui fournit immdiatement le prochain
caractre entr au clavier.
La fonction getch nest pas compatible avec ANSI-C et elle peut seulement tre utilise sous MS-DOS.

7.3.5

Exercices

1. Ecrire un programme qui permute et affiche les valeurs de trois variables A, B, C de type entier qui
sont entres au clavier : A B , B C , C A
2. Ecrire un programme qui affiche le quotient et le reste de la division entire de deux nombres entiers
entrs au clavier ainsi que le quotient rationnel de ces nombres.

7.4
7.4.1

Les structures de base


Les tests

7.4.1.1

if - else

La structure alternative en C
i f ( boolen )
<b l o c d i n s t r u c t i o n s 1>
else
<b l o c d i n s t r u c t i o n s 2>
Exemples
i f (a > b)
max = a ;
else
max = b ;
Exemple
i f (EGAL)
p r i n t f ( "A e s t g a l B\n " ) ;
else
p r i n t f ( "A e s t d i f f r e n t de B\n " ) ;
Exemple
i f (AB)
p r i n t f ( "A e s t d i f f r e n t de B\n " ) ;
else
p r i n t f ( "A e s t g a l B\n " ) ;
Exemple

7.4. LES STRUCTURES DE BASE


i f (A > B)
{
AIDE = A;
A = C;
C = AIDE ;
}
else
{
AIDE = B ;
B = C;
C = AIDE ;
}

7.4.1.2

if sans else

i f ( boolen )
<b l o c d i n s t r u c t i o n s >
7.4.1.3

Test imbriqu

i f ( boolen )
<b l o c 1 >
e l s e i f ( boolen )
<b l o c 2 >
e l s e i f ( boolen )
<b l o c 3 >
e l s e i f ( boolen )
<blocN>
e l s e <blocN+1>
Exemple
#i n c l u d e <s t d i o . h>
main ( )
{
i n t A, B ;
p r i n t f ( " En trez deux nombres e n t i e r s : " ) ;
s c a n f ("% i %i " , &A, &B ) ;
i f (A > B)
p r i n t f ("% i e s t p l u s grand que %i \n " , A, B ) ;
e l s e i f (A < B)
p r i n t f ("% i e s t p l u s p e t i t que %i \n " , A, B ) ;
else
p r i n t f ("% i e s t g a l %i \n " , A, B ) ;
return 0;
}

111

112

7.4.2

CHAPITRE 7. PROGRAMMATION EN LANGAGE C

Les oprateurs conditionnels

Le langage C possde une paire doprateurs un peu exotiques qui peut tre utilise comme alternative if
- else et qui a lavantage de pouvoir tre intgre dans une expression :
<expr1> ? <expr2> : <expr3>
Si <expr1> fournit une valeur diffrente de zro, alors la valeur de <expr2> est fournie comme rsultat
Si <expr1> fournit la valeur zro, alors la valeur de <expr3> est fournie comme rsultat
Exemple
La suite dinstructions
i f (A>B)
MAX=A;
else
MAX=B ;
peut tre remplace par :
MAX = (A > B) ? A : B ;

7.4.3

Exrecices

1. Ecrivez un programme qui lit trois valeurs entires (A, B et C) au clavier et qui affiche la plus grande
des trois valeurs, en utilisant :
(a) if - else et une variable daide MAX
(b) if - else if - ... - else sans variable daide
(c) les oprateurs conditionnels et une variable daide MAX
(d) les oprateurs conditionnels sans variable daide
2. Ecrivez un programme qui lit deux valeurs entires (A et B) au clavier et qui affiche le signe du produit
de A et B sans faire la multiplication.
3. Ecrivez un programme qui calcule les solutions relles dune quation du second degr ax2 + bx + c = 0
en discutant la formule :

b b2 4ac
X1 2 =
2a
Utilisez une variable daide D pour la valeur du discriminant b2 4ac et dcidez laide de D, si
lquation a une, deux ou aucune solution relle. Utilisez des variables du type int pour A, B et C.
Considrez aussi les cas o lutilisateur entre des valeurs nulles pour A ; pour A et B ; pour A, B et C.
Affichez les rsultats et les messages ncessaires sur lcran.

7.4.4

Les boucles

En C, nous disposons de trois structures qui nous permettent la dfinition de boucles conditionnelles :
1. la structure : while
2. la structure : do - while
3. la structure : for
Thoriquement, ces structures sont interchangeables, c.--d. il serait possible de programmer toutes sortes
de boucles conditionnelles en nutilisant quune seule des trois structures.

7.4. LES STRUCTURES DE BASE


7.4.4.1

113

while est TantQue

while ( boolen )
<i n s t r u c t i o n >
while ( boolen )
{
<i n s t r u c t i o n 1>
<i n s t r u c t i o n 2>
}
Exemple 1
/ A f f i c h e r l e s nombres de 0 9 /
int I = 0;
w h i l e ( I <10)
{
p r i n t f ("% i \n " , I ) ;
I ++;
}
Exemple 2
int I ;
/ A f f i c h e r l e s nombres de 0 9 /
I = 0;
w h i l e ( I <10)
p r i n t f ("% i \n " , I ++);
/ A f f i c h e r l e s nombres de 1 10 /
I = 0;
w h i l e ( I <10)
p r i n t f ("% i \n " , ++I ) ;
Exemple 3
/ A f f i c h e r l e s nombres de 10 1 /
i n t I =10;
while ( I )
p r i n t f ("% i \n " , I );
7.4.4.2

do - while - Rpter . . . jusqu

La structure do - while est semblable la structure while, avec la diffrence suivante :


while value la condition avant dexcuter le bloc dinstructions,
do - while value la condition aprs avoir excut le bloc dinstructions. Ainsi le bloc dinstructions est
excut au moins une fois.
do
{
<b l o c d i n s t r u c t i o n s >
}
while ( boolen ) ;

114

CHAPITRE 7. PROGRAMMATION EN LANGAGE C

Exemple 1
f l o a t N;
do
{
p r i n t f ( " I n t r o d u i s e z un nombre e n t r e 1 e t 10 : " ) ;
s c a n f ("% f " , &N ) ;
}
w h i l e (N<1 | | N>10);
Exemple 2
i n t n , div ;
p r i n t f ( " En trez l e nombre d i v i s e r : " ) ;
s c a n f ("% i " , &n ) ;
do
{
p r i n t f ( " En trez l e d i v i s e u r ( 0 ) : " ) ;
s c a n f ("% i " , &d i v ) ;
}
while ( ! div ) ;
p r i n t f ("% i / %i = %f \n " , n , div , ( f l o a t ) n/ d i v ) ;
Exemple 3
#i n c l u d e <s t d i o . h>
#i n c l u d e <math . h>
main ( )
{
f l o a t N;
do
{
p r i n t f ( " E n t r e r un nombre (>= 0 ) : " ) ;
s c a n f ("% f " , &N)
}
w h i l e (N < 0 ) ;
p r i n t f ( " La r a c i n e c a r r e de %.2 f e s t %.2 f \n " , N, s q r t (N ) ) ;
return 0;
}

7.4.4.3

For - Pour

f o r ( <expr1> ; <expr2> ; <expr3> )


<i n s t r u c t i o n >
f o r ( <expr1> ; <expr2> ; <expr3> )
{
<i n s t r u c t i o n 1>
<i n s t r u c t i o n 2>
}

7.4. LES STRUCTURES DE BASE

115

Exemple
int I ;
f o r ( I=0 ; I <=20 ; I++)
p r i n t f ( " Le c a r r de %d e s t %d \n " , I , I I ) ;
7.4.4.4

Choix de la structure rptitive

Dans ce chapitre, nous avons vu trois faons diffrentes de programmer des boucles (while, do - while, for).
Utilisez la structure qui reflte le mieux lide du programme que vous voulez raliser, en respectant toutefois
les directives suivantes :
Si le bloc dinstructions ne doit pas tre excut si la condition est fausse, alors utilisez while ou for
Si le bloc dinstructions doit tre excut au moins une fois, alors utilisez do - while.
Si le nombre dexcutions du bloc dinstructions dpend dune ou de plusieurs variables qui sont modifies
la fin de chaque rptition, alors utilisez for
Si le bloc dinstructions doit tre excut aussi longtemps quune condition extrieure est vraie (p.ex aussi
longtemps quil y a des donnes dans le fichier dentre), alors utilisez while.
Le choix entre for et while nest souvent quune question de prfrence ou dhabitudes :

7.4.5

Exercices

1. Ecrivez un programme qui lit N nombres entiers au clavier et qui affiche leur somme, leur produit et
leur moyenne. Choisissez un type appropri pour les valeurs afficher. Le nombre N est entrer au
clavier. Rsolvez ce problme,
(a) en utilisant while,
(b) en utilisant do - while,
(c) en utilisant for.
(d) Laquelle des trois variantes est la plus naturelle pour ce problme ?
2. Calculez par des soustractions successives le quotient entier et le reste de la division entire de deux
entiers entrs au clavier.
3. Calculez la somme des N premiers termes de la srie harmonique : 1 + 1/2 + 1/3 + ... + 1/N
4. Calculez la somme, le produit et la moyenne dune suite de chiffres non nuls entrs au clavier, sachant
que la suite est termine par zro. Retenez seulement les chiffres (0, 1 ... 9) lors de lentre des donnes
et effectuez un signal sonore si les donnes sortent de ce domaine.
5. Calculez le P.G.C.D. de deux entiers naturels entrs au clavier en utilisant lalgorithme dEUCLIDE.

7.4.6

Les Tableaux

Les tableaux sont certainement les variables structures les plus populaires. Ils sont disponibles dans tous
les langages de programmation et servent rsoudre une multitude de problmes.
7.4.6.1

Les tableaux une dimension

Dclaration de tableaux en C
<TypeSimple> <NomTableau>[<Dimension>] ;
Exemple

116

CHAPITRE 7. PROGRAMMATION EN LANGAGE C

int A[ 2 5 ] ;
f l o a t B[ 1 0 0 ] ;
int C[ 1 0 ] ;
char D[ 3 0 ] ;

7.4.6.2

Accs aux composantes

int A[5] ;
nous avons dfini un tableau A avec cinq composantes, auxquelles on peut accder par : A[0], A[1], ... , A[4]
Considrons un tableau T de dimension N :
En C,
- laccs au premier lment du tableau se fait par T[0]
- laccs au dernier lment du tableau se fait par T[N-1]
7.4.6.3

Affichage et Saisie

La structure for se prte particulirement bien au travail avec les tableaux. La plupart des applications se
laissent implmenter par simple modification des exemples-types de laffichage et de laffectation.
- Affichage du contenu dun tableau
main ( )
{
int A[ 5 ] ;
i n t I ; / Compteur /
f o r ( I =0; I <5; I++)
p r i n t f ("%d " , A[ I ] ) ;
return 0;
p r i n t f ("\n " ) ;
}
- Remplissage dun tableau
main ( )
{
int A[ 5 ] ;
i n t I ; / Compteur /
f o r ( I =0; I <5; I++)
s c a n f ("%d " , &A[ I ] ) ;
return 0;
}

7.4.6.4

Exercices

1. Ecrire un programme qui lit la dimension N dun tableau T du type int (dimension maximale : 50
composantes), remplit le tableau par des valeurs entres au clavier et affiche le tableau.
Calculer et afficher ensuite la somme des lments du tableau.

7.4. LES STRUCTURES DE BASE

117

2. Ecrire un programme qui lit la dimension N dun tableau T du type int (dimension maximale : 50
composantes), remplit le tableau par des valeurs entres au clavier et affiche le tableau.
Ranger ensuite les lments du tableau T dans lordre inverse sans utiliser de tableau daide. Afficher
le tableau rsultant.
Ide : Echanger les lments du tableau laide de deux indices qui parcourent le tableau en commenant
respectivement au dbut et la fin du tableau et qui se rencontrent en son milieu.
3. Ecrire un programme qui lit la dimension N dun tableau T du type int (dimension maximale : 50
composantes), remplit le tableau par des valeurs entres au clavier et affiche le tableau.
Copiez ensuite toutes les composantes strictement positives dans un deuxime tableau TPOS et toutes
les valeurs strictement ngatives dans un troisime tableau TNEG. Afficher les tableaux TPOS et
TNEG.
7.4.6.5

Les tableaux deux dimensions

En C, un tableau deux dimensions A est interprter comme un tableau (uni-dimensionnel) de dimension


L dont chaque composante est un tableau (uni-dimensionnel) de dimension C.
On appelle L le nombre de lignes du tableau et C le nombre de colonnes du tableau. L et C sont alors les
deux dimensions du tableau. Un tableau deux dimensions contient donc L*C composantes.
On dit quun tableau deux dimensions est carr, si L est gal C.
En faisant le rapprochement avec les mathmatiques, on peut dire que "A est un vecteur de L vecteurs de
dimension C", ou mieux :
"A est une matrice de dimensions L et C".
Dclaration de tableaux deux dimensions en C
<TypeSimple> <NomTabl>[<DimLigne>][<DimCol>] ;
int A[ 1 0 ] [ 1 0 ] ;
float B[ 2 ] [ 2 0 ] ;
int C[ 3 ] [ 3 ] ;
char D[ 1 5 ] [ 4 0 ] ;
Accs aux composantes
Accs un tableau deux dimensions en C
<NomTableau>[<Ligne>][<Colonne>]
Considrons un tableau A de dimensions L et C.
- les indices du tableau varient de 0 L-1, respectivement de 0 C-1.
- la composante de la Nime ligne et Mime colonne est note : A[N-1][M-1]
Affichage et affectation
Lors du travail avec les tableaux deux dimensions, nous utiliserons deux indices (p.ex : I et J), et la structure
for, souvent imbrique, pour parcourir les lignes et les colonnes des tableaux.
Affichage du contenu dun tableau deux dimensions
main ( )
{
int A[ 5 ] [ 1 0 ] ;

118

CHAPITRE 7. PROGRAMMATION EN LANGAGE C

int I , J ;
/ Pour chaque l i g n e . . . /
f o r ( I =0; I <5; I++)
{
/ . . . c o n s i d r e r chaque composante /
f o r ( J =0; J <10; J++)
p r i n t f ("%7d " , A[ I ] [ J ] ) ;
/ Retour l a l i g n e /
p r i n t f ("\n " ) ;
}
return 0;
}
Affectation (remplissage) avec des valeurs provenant de lextrieur
main ( )
{
int A[ 5 ] [ 1 0 ] ;
int I , J ;
/ Pour chaque l i g n e . . . /
f o r ( I =0; I <5; I++)
/ . . . c o n s i d r e r chaque composante /
f o r ( J =0; J <10; J++)
s c a n f ("%d " , &A[ I ] [ J ] ) ;
return 0;
}

7.4.6.6

Exrecices

1. Ecrire un programme qui lit les dimensions L et C dun tableau T deux dimensions du type int
(dimensions maximales : 50 lignes et 50 colonnes). Remplir le tableau par des valeurs entres au clavier
et afficher le tableau ainsi que la somme de tous ses lments.
2. Ecrire un programme qui lit les dimensions L et C dun tableau T deux dimensions du type int
(dimensions maximales : 50 lignes et 50 colonnes). Remplir le tableau par des valeurs entres au clavier
et afficher le tableau ainsi que la somme de chaque ligne et de chaque colonne en nutilisant quune
variable daide pour la somme.
3. Ecrire un programme qui dtermine la plus grande et la plus petite valeur dans un tableau dentiers A.
Afficher ensuite la valeur et la position du maximum et du minimum. Si le tableau contient plusieurs
maxima ou minima, le programme retiendra la position du premier maximum ou minimum rencontr.
7.4.6.7

Extras - Tableau une dimension

1. Insrer une valeur dans un tableau tri : Un tableau A de dimension N+1 contient N valeurs
entires tries par ordre croissant ; la (N+1)ime valeur est indfinie. Insrer une valeur VAL donne
au clavier dans le tableau A de manire obtenir un tableau de N+1 valeurs tries.
2. Recherche dune valeur dans un tableau : Rechercher dans un tableau dentiers A une valeur
VAL entre au clavier. Afficher la position de VAL si elle se trouve dans le tableau, sinon afficher un

7.4. LES STRUCTURES DE BASE

119

message correspondant. La valeur POS qui est utilise pour mmoriser la position de la valeur dans le
tableau, aura la valeur -1 aussi longtemps que VAL na pas t trouve.
(a) La recherche squentielle Comparer successivement les valeurs du tableau avec la valeur donne.
(b) La recherche dichotomique (recherche binaire (recherche binaire) Le tableau A doit tre tri
Comparer le nombre recherch la valeur au milieu du tableau,
i. sil y a galit ou si le tableau est puis, arrter le traitement avec un message correspondant.
ii. si la valeur recherche prcde la valeur actuelle du tableau, continuer la recherche dans le
demi-tableau gauche de la position actuelle.
iii. si la valeur recherche suit la valeur actuelle du tableau, continuer la recherche dans le demitableau droite de la position actuelle.
3. Fusion de deux tableaux tris On dispose de deux tableaux A et B (de dimensions respectives N
et M), tris par ordre croissant. Fusionner les lments de A et B dans un troisime tableau FUS tri
par ordre croissant.
Mthode : Utiliser trois indices IA, IB et IFUS. Comparer A[IA] et B[IB] ; remplacer FUS[IFUS] par
le plus petit des deux lments ; avancer dans le tableau FUS et dans le tableau qui a contribu son
lment. Lorsque lun des deux tableaux A ou B est puis, il suffit de recopier les lments restants
de lautre tableau dans le tableau FUS.
4. Tri par slection du maximum Classer les lments dun tableau A par ordre dcroissant.
Mthode : Parcourir le tableau de gauche droite laide de lindice I. Pour chaque lment A[I]
du tableau, dterminer la position PMAX du (premier) maximum droite de A[I] et changer A[I] et
A[PMAX].
5. Tri par propagation (bubble sort) Classer les lments dun tableau A par ordre croissant.
Mthode : En recommenant chaque fois au dbut du tableau, on effectue plusieurs reprises le
traitement suivant : On propage, par permutations successives, le plus grand lment du tableau vers
la fin du tableau (comme une bulle qui remonte la surface dun liquide).
6. Ecrire un programme qui lit les points de N lves dune classe dans un devoir et les mmorise dans
un tableau POINTS de dimension N. Rechercher et afficher :
(a) la note maximale,
(b) la note minimale,
(c) la moyenne des notes.
7.4.6.8

Extras - Tableau deux dimensions

1. Ecrire un programme qui met zro les lments de la diagonale principale dune matrice carre A
donne.
2. Ecrire un programme qui ralise la multiplication dune matrice A par un rel X.

a b


X e f

i j

c d X a X b X c X d

g h = X e X f X g X h

k l X i X j X k X l

Le rsultat de la multiplication sera mmoris dans une deuxime matrice A qui sera ensuite affiche.

120

CHAPITRE 7. PROGRAMMATION EN LANGAGE C

3. Ecrire un programme qui ralise laddition de deux matrices A et B de mmes dimensions N et M.



a b


e f

i j

c d m n o p a + m b + n c + o d + p


g h + q r s t = e+q f +r g+s h+t


k l u v w y i+u j+v k+w l+y

Le rsultat de laddition sera mmoris dans une troisime matrice C qui sera ensuite affiche.
4. En multipliant une matrice A de dimensions N et M avec une matrice B de dimensions M et P on
obtient une matrice C de dimensions N et P :
La multiplication de deux matrices se fait en multipliant les composantes des deux matrices lignes par
colonnes
Cij =

k=M
X

(aik bkj

k=1

7.5

a b c
e f g
h i j
k l m



p q


r s

t u

ap+br+ct aq+bs+cu
ep+f r+gt eq+f s+gu
hp+ir+jt hq+is+ju
kp+lr+mt kq+ls+mu

Les Chanes de Caractres

Il nexiste pas de type spcial chane ou string en C. Une chane de caractres est traite comme un tableau
une dimension de caractres (vecteur de caractres). Il existe quand mme des notations particulires et
une bonne quantit de fonctions spciales pour le traitement de tableaux de caractres.

7.5.1

Dclaration

Dclaration de chanes de caractres en C


char <NomVariable> [<Longueur>] ;
Exemples
c h a r NOM [ 2 0 ] ;
c h a r PRENOM [ 2 0 ] ;
c h a r PHRASE [ 3 0 0 ] ;
Lors de la dclaration, nous devons indiquer lespace rserver en mmoire pour le stockage de la chane.
La reprsentation interne dune chane de caractres est termine par le symbole
0 (NUL). Ainsi, pour un texte de n caractres, nous devons prvoir n+1 octets.
Malheureusement, le compilateur C ne contrle pas si nous avons rserv un octet pour le symbole de fin de
chane ; lerreur se fera seulement remarquer lors de lexcution du programme ...
Le nom dune chane est le reprsentant de ladresse du premier caractre de la chane. Pour mmoriser une
variable qui doit tre capable de contenir un texte de N caractres, nous avons besoin de N+1 octets en
mmoire :

7.5. LES CHANES DE CARACTRES

7.5.2

121

Les chanes de caractres constantes

Les chanes de caractres constantes (string literals) sont indiques entre guillemets. La chane de caractres
vide est alors : ""
Exemple : "Ceci est une chane de caractres constantes".
Observation
Pour la mmorisation de la chane de caractres "Hello", C a besoin de six octets. Il faut retenir ceci :
1. x est un caractre constant, qui a une valeur numrique : P.ex : x a la valeur 120 dans le code ASCII.
2. "x" est un tableau de caractres qui contient deux caractres : la lettre x et le caractre NUL :
0
3. x est cod dans un octet
4. "x" est cod dans deux octets

7.5.3

Accs aux lments dune chane

Laccs un lment dune chane de caractres peut se faire de la mme faon que laccs un lment dun
tableau. En dclarant une chane par :
L o k o 0
char A[5] ; : Si A contient "Loko", nous obtenons la reprsentation suivante : A[0] A[1] A[2] A[3] A[4]

7.5.4
7.5.4.1

Prcdence alphabtique et lexicographique


Prcdence alphabtique des caractres

La prcdence des caractres dans lalphabet dune machine est dpendante du code de caractres utilis.
Pour le code ASCII, nous pouvons constater lordre suivant : . . .,0,1,2, . . .,9, . . .,A,B,C, . . .,Z, . . .,a,b,c, . . .,z,
...
Les symboles spciaux ( ,+ ,- ,/ , ,] , ...) et les lettres accentues ( , , , , ...) se trouvent rpartis autour
des trois grands groupes de caractres (chiffres, majuscules, minuscules). Leur prcdence ne correspond
aucune rgle dordre spcifique.
Relation de prcdence
De la prcdence alphabtique des caractres, on peut dduire une relation de prcdence est infrieur
sur lensemble des caractres. Ainsi, on peut dire que
0 est infrieur Z et noter 0 < Z car dans lalphabet de la machine, le code du caractre 0 (ASCII :
48) est infrieur au code du caractre Z (ASCII : 90).
7.5.4.2

Prcdence lexicographique des chanes de caractres

En nous basant sur cette relation de prcdence alphabtique des caractres, nous pouvons dfinir une
prcdence lexicographique pour les chanes de caractres. Cette relation de prcdence suit lordre du
dictionnaire et est dfinie de faon rcurrente :
La chane vide "" prcde lexicographiquement toutes les autres chanes.
La chane A = a1 a2 a . . . ap (p caractres) prcde lexicographiquement

122

CHAPITRE 7. PROGRAMMATION EN LANGAGE C

la chane B = b1 b2 . . . bm (m caractres) si lune des deux conditions suivantes est remplie :


Exemples
"ABC" prcde "BCD" car A<B
"ABC" prcde "B" car A<B
"Abc" prcde "abc" car A<a
"ab" prcde "abcd" car "" prcde "cd"
" ab" prcde "ab" car <a (le code ASCII de est 32, et le code ASCII de a est 97)
Conversions et tests
En tenant compte de lordre alphabtique des caractres, on peut contrler le type du caractre (chiffre,
majuscule, minuscule).
Exemples
i f (C>=0 && C<= 9 ) p r i n t f ( " C h i f f r e \n " , C ) ;
i f (C>=A && C<=Z ) p r i n t f ( " M ajus cule \n " , C ) ;
i f (C>=a && C<=z ) p r i n t f ( " Minuscule \n " , C ) ;
Il est facile, de convertir des lettres majuscules dans des minuscules :
i f (C>=A && C<=Z ) C = CA+ a ;
ou v i c e v e r s a :
i f (C>=a && C<=z ) C = Ca + A ;

7.5.5

Travailler avec des chanes de caractres

Les bibliothques de fonctions de C contiennent une srie de fonctions spciales pour le traitement de chanes
de caractres. Sauf indication contraire, les fonctions dcrites dans ce chapitre sont portables conformment
au standard ANSI-C.

7.5.5.1

Affichage de chanes : Les fonctions de <stdio.h>

printf avec le spcificateur de format %s permet dintgrer une chane de caractres dans une phrase.
Ex.
p r i n t f ("% s " , NOM) ;

puts est idale pour crire une chane constante ou le contenu dune variable dans une ligne isole
Syntaxe : puts( <Chane> ) : puts crit la chane de caractres dsigne par <Chane>
puts(TXT) ; est quivalent printf("%s
n",TXT) ;
Remarque : Il faut noter que puts peut crire une chane contenant des espaces tandisque printf avec %s
ne le fait pas

7.5. LES CHANES DE CARACTRES


7.5.5.2

123

Saisie dune chane de caractres

scanf avec le spcificateur %s permet de lire un mot isol lintrieur dune suite de donnes du mme ou
dun autre type.
Exemple
c h a r Li eu [ 2 5 ] ;
i n t Jour , Mois , Annee ;
p r i n t f ( " En trez l i e u e t d a t e de n a i s s a n c e : " ) ;
s c a n f ("% s %d %d %d " , Lieu , &Jour , &Mois , &Annee ) ;

gets Il est convenable dutiliser la fonction gets pour le traitement des chanes. En effet, gets lit une ligne
de de caractres de stdin et la copie ladresse indique par <Chane>.
Exemple
i n t MAXI = 1 0 0 0 ;
c h a r LIGNE [MAXI ] ;
g e t s (LIGNE ) ;

7.5.6

Exercices

1. Ecrire un programme qui lit 5 mots, spars par des espaces et qui les affiche ensuite dans une ligne,
mais dans lordre inverse. Les mots sont mmoriss dans 5 variables M1, . . .,M5.
Exemple
voici une petite phrase !
! phrase petite une voici
2. Ecrire un programme qui lit une ligne de texte (ne dpassant pas 200 caractres) la mmorise dans une
variable TXT et affiche ensuite :
(a) la longueur L de la chane.
(b) le nombre de e contenus dans le texte
(c) toute la phrase rebours, sans changer le contenu de la variable TXT.
3. Ecrire un programme qui lit un texte TXT (de moins de 200 caractres) et qui enlve toutes les
apparitions du charactre e en tassant les lments restants. Les modifications se feront dans la mme
variable TXT.
Exemple :
Cette ligne contient quelques lettres e.
Ctt lign contint qulqus lttrs .

7.5.7

Les fonctions de <string>

La bibliothque <string> fournit une multitude de fonctions pratiques pour le traitement de chanes de
caractres. Voici une brve description des fonctions les plus frquemment utilises.
strlen(<s>) fournit la longueur de la chane sans compter le caractre final
strcpy(<s>, <t>) copie <t> vers <s>

124

CHAPITRE 7. PROGRAMMATION EN LANGAGE C

strcat(<s>, <t>) ajoute <t> la fin de <s>


strcmp(<s>, <t>) compare <s> et <t> lexicographiquement et fournit un rsultat : ngatif si <s>
prcde <t> zro si <s> est gal <t> positif si <s> suit <t>
strncpy(<s>, <t>, <n>) copie au plus <n> caractres de <t> vers <s>
strncat(<s>, <t>, <n>) ajoute au plus <n> caractres de <t> la fin de <s>
Remarques
- Comme le nom dune chane de caractres reprsente une adresse fixe en mmoire, on ne peut pas affecter
une autre chane au nom dun tableau :
Il faut bien copier la chane caractre par caractre ou utiliser la fonction strcpy respectivement strncpy :
7.5.7.1

Exercices

1. Ecrire un programme qui demande lintroduction du nom et du prnom de lutilisateur et qui affiche
alors la longueur totale du nom sans compter les espaces. Employer la fonction strlen.
2. Ecrire un programme qui lit deux chanes de caractres CH1 et CH2, les compare lexicographiquement
et affiche le rsultat :
3. Ecrire un programme qui lit deux chanes de caractres CH1 et CH2 et qui copie la premire moiti de
CH1 et la premire moiti de CH2 dans une troisime chane CH3. Afficher le rsultat.
4. Ecrire un programme qui lit une chane de caractres CH et qui convertit toutes les majuscules dans
des minuscules et vice-versa.
Le rsultat sera mmoris dans la mme variable CH et affich aprs la conversion.

7.6

Les Fonctions

La structuration de programmes en sous-programmes se fait en C laide de fonctions. Les fonctions en C


correspondent aux fonctions et procdures en langage algorithmique.

7.6.1

Modularisation de programmes

Jusquici, nous avons rsolu nos problmes laide de fonctions prdfinies Pour des problmes plus complexes,
nous obtenons ainsi de longues listes dinstructions, peu structures et par consquent peu comprhensibles.
En plus, il faut souvent rpter les mmes suites de commandes dans le texte du programme, ce qui entrane
un gaspillage de mmoire interne et externe.
7.6.1.1

La modularit et ses avantages

La plupart des langages de programmation nous permettent de subdiviser nos programmes en sous-programmes,
fonctions ou procdures plus simples et plus compacts. A laide de ces structures nous pouvons modulariser
nos programmes pour obtenir des solutions plus lgantes et plus efficientes.
Modules Dans ce contexte, un module dsigne une entit de donnes et dinstructions qui fournissent
une solution une (petite) partie bien dfinie dun problme plus complexe. Un module peut faire appel

7.6. LES FONCTIONS

125

dautres modules, leur transmettre des donnes et recevoir des donnes en retour. Lensemble des modules
ainsi relis doit alors tre capable de rsoudre le problme global.
Avantages Voici quelques avantages dun programme modulaire :
1. Meilleure lisibilit
2. Diminution du risque derreurs
3. Possibilit de tests slectifs
4. Dissimulation des mthodes : Lors de lutilisation dun module il faut seulement connatre son
effet, sans devoir soccuper des dtails de sa ralisation.
5. Rutilisation de modules dj existants Il est facile dutiliser des modules quon a crits soi-mme
ou qui ont t dvelopps par dautres personnes.
6. Simplicit de lentretien Un module peut tre chang ou remplac sans devoir toucher aux autres
modules du programme.
7. Favorisation du travail en quipe Un programme peut tre dvelopp en quipe par dlgation de
la programmation des modules diffrentes personnes ou groupes de personnes. Une fois dvelopps,
les modules peuvent constituer une base de travail commune.
8. Hirarchisation des modules Un programme peut dabord tre rsolu globalement au niveau du
module principal. Les dtails peuvent tre reports des modules sous-ordonns qui peuvent eux
aussi tre subdiviss en sous-modules et ainsi de suite. De cette faon, nous obtenons une hirarchie
de modules. Les modules peuvent tre dvelopps en passant du haut vers le bas dans la hirarchie
(top-down-development - mthode du raffinement progressif) ou bien en passant du bas vers le haut
(bottom-up-development).

7.6.2

Dclaration et dfinition de fonctions

En gnral, le nom dune fonction apparat trois endroits dans un programme :


1. lors de la dclaration
2. lors de la dfinition
3. lors de lappel
7.6.2.1

Dfinition dune fonction

Dans la dfinition dune fonction, nous indiquons :


le nom de la fonction
le type, le nombre et les noms des paramtres de la fonction
le type du rsultat fourni par la fonction
les donnes locales la fonction
les instructions excuter
<TypeRs> <NomFonct> (<TypePar1> <NomPar1>,
<TypePar2> <NomPar2>, . . . )
{
<d c l a r a t i o n s l o c a l e s >
<i n s t r u c t i o n s >
}

126

CHAPITRE 7. PROGRAMMATION EN LANGAGE C

Remarquez quil ny a pas de point-virgule derrire la dfinition des paramtres de la fonction


Type dune fonction
Si une fonction F fournit un rsultat du type T, on dit que la fonction F est du type T ou que la fonction
F a le type T. Exemple
La fonction MAX est du type int et elle a besoin de deux paramtres du type int. Le rsultat de la fonction
MAX peut tre intgr dans dautres expressions.
i n t MAX( i n t N1 , i n t N2)
{
i f (N1>N2)
r e t u r n N1 ;
else
r e t u r n N2 ;
}

7.6.2.2

Dclaration dune fonction

En C, il faut dclarer chaque fonction avant de pouvoir lutiliser. La dclaration informe le compilateur du
type des paramtres et du rsultat de la fonction. A laide de ces donnes, le compilateur peut contrler si
le nombre et le type des paramtres dune fonction sont corrects. Si dans le texte du programme la fonction
est dfinie avant son premier appel, elle na pas besoin dtre dclare.
Prototype dune fonction
La dclaration dune fonction se fait par un prototype de la fonction qui indique uniquement le type des
donnes transmises et reues par la fonction.
Dclaration : Prototype dune fonction
<TypeRs> <NomFonct> (<TypePar1 >, <TypePar2 >, . . . ) ;
ou b i e n
<TypeRs> <NomFonct> (<TypePar1> <NomPar1>,
<TypePar2> <NomPar2>, . . .

7.6.2.3

);

Rgles pour la dclaration des fonctions

De faon analogue aux dclarations de variables, nous pouvons dclarer une fonction localement ou globalement. La dfinition des fonctions joue un rle spcial pour la dclaration. En rsum, nous allons considrer
les rgles suivantes :
1. Dclaration locale : Une fonction peut tre dclare localement dans la fonction qui lappelle (avant
la dclaration des variables). Elle est alors disponible cette fonction.
2. Dclaration globale : Une fonction peut tre dclare globalement au dbut du programme (derrire
les instructions #include). Elle est alors disponible toutes les fonctions du programme.
3. Dclaration implicite par la dfinition : La fonction est automatiquement disponible toutes les
fonctions qui suivent sa dfinition.
4. main La fonction principale main na pas besoin dtre dclare.

7.6. LES FONCTIONS


7.6.2.4

127

Renvoyer un rsultat

Par dfinition, toutes les fonctions fournissent un rsultat dun type que nous devons dclarer.
Pour obtenir un rsultat en quittant une fonction, nous disposons de la commande return.
Exemples
La fonction CARRE du type double calcule et fournit comme rsultat le carr dun rel fourni comme
paramtre.
d o u b l e CARRE( d o u b l e X)
{
r e t u r n XX;
}

7.6.2.5

Les procdures en C (void)

void
En C, il nexiste pas de structure spciale pour la dfinition de procdures comme en langage algorithmique.
Nous pouvons cependant employer une fonction du type void partout o nous utiliserions une procdure en
langage algorithmique.
7.6.2.6

Paramtres ou Arguments dune fonction

Les paramtres ou arguments sont les botes aux lettres dune fonction. Elles acceptent les donnes de
lextrieur et dterminent les actions et le rsultat de la fonction. Techniquement, nous pouvons rsumer le
rle des paramtres en C de la faon suivante :
Les paramtres dune fonction sont simplement des variables locales qui sont initialises par les valeurs
obtenues lors de lappel.
Passage des paramtres par valeur En C, le passage des paramtres se fait toujours par la valeur, c.--d.
les fonctions nobtiennent que les valeurs de leurs paramtres et nont pas daccs aux variables elles-mmes.
Les paramtres dune fonction sont considrer comme des variables locales qui sont initialises automatiquement par les valeurs indiques lors dun appel.
A lintrieur de la fonction, nous pouvons donc changer les valeurs des paramtres sans influencer les valeurs
originales dans les fonctions appelantes.

128

CHAPITRE 7. PROGRAMMATION EN LANGAGE C

Chapitre 8

Corrig des exercices


Algorithme 8.1 : Chap 3 - Exo 1
Var :
NbSecondes,Heure,Minute,Seconde : Entier
Debut
N bSecondes 0
Heure 0
M inute 0
Seconde 0
Afficher "Entrez un nombre exprim en seconde : "
Saisir NbSecondes
Seconde N bSecondes MOD 60
M inute (N bSecondesDIV 60) MOD 60
Heure N bSecondes DIV 3600
Afficher "Le rsultat est :"
Afficher NbSecondes, "valent : ",Heure,"H",Minute,"Mn",Seconde,"s"
Afficher "Fin"
Fin

Algorithme 8.2 : Chap 3 - Exo 2


Var :
Nbre1, Nre2 : Entier
Moyenne : Rel
Debut
N bre1 0
N bre2 0
M oyenne 0
Afficher "Entrez un premier nombre : "
Saisir Nbre1
Afficher "Entrez un deuxime nombre : "
Saisir Nbre2
(N re1 + N bre2)/2
Afficher "La moyenne est : ",Moyenne
Afficher "Fin"
Fin

129

130

CHAPITRE 8. CORRIG DES EXERCICES

Algorithme 8.3 : Chap 3 - Exo 3


Var :
NbreArt, TauxTVA : Entier
PrixHT, PrixTTC : Rel
Debut
N breArt 0
T auxT V A 0
P rixHT 0
P rixT T C 0
Afficher "Donnez le nombre de produits achet : "
Saisir NbreArt
Afficher "Donnez le prix hors taxe du produit : "
Saisir PrixHT
Afficher "Donnez le taux de TVA : "
Saisir TauxTVA
P rixT T C = (P rixHT N breArt) + ((P rixHT N breArt) T auxT V A/100)
Afficher "Le prix TTC est : ", PrixTTC
Fin

Algorithme 8.4 : Chap 3 - Exo 4


Var :
Rayon, Pi, Aire, Vol : Rel
Debut
Rayon 0
Pi 0
Aire 0
V ol 0
Afficher "Donnez le rayon du cercle : "
Saisir Rayon
P i 3.1416
Aire 4 P i Rayon Rayon
V ol 4/3 P i Rayon Rayon Rayon
Afficher "Laire du cercle est : ",Aire
Afficher "Le volume du cercle est : ",Vol
Fin

Algorithme 8.5 : Chap 3 - Exo 5


Var :
SomInitiale, ValAcqSimple, ValAcqComp : Rel
Interet, NbreAnnee : Entier
Debut
SomInitiale 0
V alAcqSimple 0
V alAcqComp 0
N breAnnee 0
Interet 0
Afficher "Entrez la somme initiale : "
Saisir SomInitiale
Afficher "Entrez lintrt (ex : 6 pour 6%) : "
Saisir Interet
Afficher "Entrez le nombre dannes de placement : "
Saisir NbreAnnee
V alAcqSimple S (1 + n i/100)
V alAcqComp S (1 + i/100)n
Afficher "A intrt simple :", ValAcqSimple
Afficher "A intrt compos :", ValAcqComp
Fin

131
Algorithme 8.6 : Chap 3 - Exo 6 permutation
Var :
Nb1, Nb2, Temp : Entier
Debut
N b1 0
N b2 0
T emp 0
Afficher "Entrez un premier nombre : "
Saisir Nb1
Afficher "Entrez un deuxime nombre : "
Saisir Nb2
T emp N bb1
N b1 N b2
N b2 T emp
Afficher "Premier nombre est :", Nb1
Afficher "Deuxime nombre est :", Nb2
Fin

Algorithme 8.7 : Chap 4 - Exo 1


Var :
M,N,A,B,R,PGCD : Entier
Debut
M 0
N 0
B0
A0
R0
P GCD 0
Afficher "Entrez un premier nombre : "
Saisir M
Afficher "Entrez un deuxime nombre : "
Saisir N
AM
BN
TantQue NOT(B = 0) Faire
R AM ODB
AB
BR
Ftq
P GCD A
Afficher "Le PGCD de",M,"et",N,"est",PGCD
Fin

132

CHAPITRE 8. CORRIG DES EXERCICES

Algorithme 8.8 : Chap 4 - Exo 2


Var :
N,I : Entier
X, Puiss : Rel
Debut
N 0
I0
X0
P uiss 0
Afficher "Entrez un premier nombre : "
Saisir N
Afficher "Entrez un exposant : "
Saisir X
P uiss 1
I1
TantQue NOT(I > N) Faire
P uis P uiss I
I I +1
Ftq
Afficher "La puissance",N,"me de",X,"est",puiss
Fin

Algorithme 8.10 : Chap 4 - Exo 4


Var :
Nb1, Nb2, Prod, I : Entier
Debut
N b1 0
N b2 0
P rod 0
Afficher "Entrez un premier nombre : "
Saisir Nb1
Afficher "Entrez un deuxime nombre : "
Saisir Nb2
Pour I 1 A Nb2 Faire
P rod P rod + N b1
FPour
Afficher "Le produit est ",Prod
Fin

133

Algorithme 8.9 : Chap 4 - Exo 3


* Const :
LET T RE = [0 A0 ..0 Z 0 ] //ensemble des lettres majuscules
V OY ELLE = [0 A0 ,0 E 0 ,0 I 0 ,0 O0 ,0 U 0 ,0 Y 0 ] //ensemble des voyelles majuscules
Var :
PHRASE : Chane //La phrase
PcVoy : Rel //Pourcentage de voyelle
PcCons : Rel //Pourcentage de consonne
NbVoy : Entier //Nombre de voyelle
NbCons : Entier //Nombre de consonne
I : Entier //indice ditration
Debut
P HRASE
P cV oy 0
P cCons 0
N bV oy 0
N bCons 0
Afficher "Entrez une phrase : "
Saisir PHRASE
Si LONGUEUR(PHRASE) > 0 Alors
P HRASE M AJU SCU LE(P HRASE)
N bV oy 0
N bCons 0
Pour I 1 A LONGUEUR(PHRASE) Faire
Si PHRASE[1] dans LETTRE Alors
Si PHRASE[i] dans VOYELLE Alors
N bV oy N bV oy + 1
Sinon
N bCons N bCons + 1
FinSi
FinSi
FPour
P cV oy N bV oy/LON GU EU R(P HRASE) 100
P cCons N bCons/LON GU EU R(P HRASE) 100
Afficher PcVoy , PcCons
FinSi
Fin

134

CHAPITRE 8. CORRIG DES EXERCICES

Algorithme 8.11 : Chap 4 - Exo 5 - Notes tudiants


Var :
NbreCopies, Sup10, Sup18 : Entier
Note : Rel
Debut
N breCopies 0
Sup10 0
Sup18 0
N ote 0
Afficher "Entrez le nombre de notes traiter : "
Saisir NbreCopies
TantQue NbreCopies > 0 Faire
Afficher "Entrez une note : "
Saisir Note
Si Note > 10 Alors
Sup10 Sup10 + 1
Sinon
Si Note > Sup18 Alors
Sup18 Sup18 + 1
FinSi
FinSi
N breCopies N breCopies 1
Ftq
Afficher "Le nombre de notes suprieures 10 est ",Sup10 Afficher "Le nombre de notes suprieures 18 est
",Sup18
Fin

135
Algorithme 8.12 : Chap 4 - Exo 6 Supermach
Var :
PrixM1, PrixM2, PanierIdeal : Entier
Sup1, Sup2 : Entier
Debut
P rixM 1 0 //prix du produit au supermarch Nr 1
P rixM 2 0 //prix du mme produit au supermarch Nr 2
P anierIdeal 0 //prix du panier idale
Sup1 0 //prix du panier au supermarch Nr 1
Sup2 0 //prix du panier au supermarch Nr 2
Afficher "Entrez le prix du produit du supermarch Nr 1 : "
Saisir PrixM1
Afficher "Entrez le prix du produit du supermarch Nr 2 : "
Saisir PrixM2
TantQue PrixM1 <> 0 ET PrixM2 <> 0 Faire
Si PrixM1 < PrixM2 Alors
P anierIdeal P anierIdeal + P rixM 1
Sinon
P anierIdeal P anierIdeal + P rixM 2
FinSi
Sup1 Sup1 + P rixM 1
Sup2 Sup2 + P rixM 2
Afficher "Entrez le prix du produit du supermarch Nr 1 : "
Saisir PrixM1
Afficher "Entrez le prix du produit du supermarch Nr 2 : "
Saisir PrixM2
Ftq
Afficher "Le panier idal vaut : ",PanierIdeal
Si Sup1 < Sup2 Alors
Afficher "Le panier du supermarch Nr 1 est le moins cher "
Sinon
Si Sup1 > Sup2 Alors
Afficher "Le panier du supermarch Nr 2 est le moins cher"
Sinon
Afficher "Le panier des deux supermarchs ont le mme prix "
FinSi
FinSi
Fin

136

CHAPITRE 8. CORRIG DES EXERCICES

Algorithme 8.13 : Chap 4 - Exo 7 - Nombres parfaits de 1 100


Var :
Nombre,Diviseur, Somme, Quotient, Reste : Entier
Debut
N ombre 1
Diviseur 0
Somme 0
Quotient 0
Quotient 0
TantQue Nombre < 100 Faire
Diviseur 2
Somme 1
TantQue Diviseur * Diviseur < Nombre Faire
Quotient N ombreDIV Diviseur
Reste N ombreM ODDiviseur
Si Reste = 0 Alors
Somme Somme + Diviseur + Quotient
FinSi
Diviseur Diviseur + 1
Ftq
Si Diviseur Diviseur = N ombre Alors
Somme Somme + Diviseur
FinSi
Si Nombre = Somme Alors
Afficher Nombre, "est parfait"
FinSi
N ombre N ombre + 1
Ftq
Fin