Sunteți pe pagina 1din 168

0

Avant-propos
Cet ouvrage intitul Algorithmique et structures de donnes
est le rsultat de 8 annes denseignements lISET de Ksar-Hellal et
dans dautres institutions universitaires. De ce fait, il a bnfici des
questions et problmes poss par les tudiants durant les cours et travaux
pratiques de programmation.
Lobjectif de louvrage est dexpliquer en termes simples et
travers de multiples exemples et exercices corrigs comment apprendre
programmer tout en vitant les contraintes spcifiques imposes par les
langages de programmation.
La premire partie du livre traite les notions fondamentales de
lalgorithmique : types de base, instructions simples, structures
conditionnelles et itratives, procdures et fonctions, etc.
La seconde partie est consacre aux structures de donnes
composes : tableaux, enregistrements, fichiers, structures dynamiques :
listes chanes, piles, files et arbres.
Pour tre complet, le livre contient une leon sur la rcursivit.
De mme, plusieurs problmes ont t traits de faon itrative puis
rcursive afin de mettre en vidence les points forts et les points faibles
de chaque approche.
Le livre contient environ une centaine dexercices souvent conus
comme une application du cours des situations de la vie professionnelle
(calcul mathmatique, problmes de gestion, jeux, etc.). La solution
propose chaque exercice nest pas unique et dans plusieurs cas elle
nest optimale car on a toujours privilgi lapport pdagogique et la
simplicit.
Je tiens remercier toutes les personnes qui mont aid
llaboration de cet ouvrage et, en particuler, Messieurs Samir CHEBILI,
Technologue lISET de Sousse et Youssef GAMHA, Assistant
Technologue lISET de Ksar-Hellal pour leur active et aimable
participation.
Leon 1 : I nt r oduct i on l a pr ogr ammat i on
1
Le on 1 : I nt r oduc t i on l a pr ogr ammat i on
O b j e c t i f s
- Connatre le vocabulaire de base en programmation
- Comprendre la dmarche de programmation
I. Notion de programme
Le mot programmation recouvre lensemble des activits qui font passer
dun problme un programme.
Un programme est un texte constitu dun ensemble de directives,
appeles instructions, qui spcifient :
les oprations lmentaires excuter
la faon dont elles senchanent.
Supposons quun enseignant dispose dun ordinateur et dun programme
de calcul de la moyenne des tudiants. Pour sexcuter, ce programme
ncessite quon lui fournisse pour chaque tudiant, les notes de contrle
continu, de T.P et de lexamen final : ce sont les donnes. En retour, le
programme va fournir la moyenne cherche : cest le rsultat.
De la mme manire, un programme de paie ncessite des informations
donnes : noms des employs, grades, numros de scurit sociale,
situations familiales, nombre dheures supplmentaires, etc. Les rsultats
seront imprims sur les diffrents bulletins de paie : identification de
lemploy, salaire brut, retenue scurit sociale, etc.
Pour viter de saisir chaque fois les mmes donnes, certaines
informations doivent tre archives sur une mmoire de masse. Le
programme y accdera alors directement (figure 1).
Leon 1 : I nt r oduct i on l a pr ogr ammat i on
2
Figure 1. Schma dexcution dun programme
II. Interprtation et compilation
Lordinateur ne sait excuter quun nombre limit doprations
lmentaires dictes par des instructions de programme et codes en
binaire (langage machine). Obligatoirement, les premiers programmes
taient crits en binaire. Ctait une tche difficile et expose aux erreurs
car il fallait aligner des squences de bits dont la signification nest pas
vidente.
Par la suite, pour faciliter le travail, les programmes ont t crits en
dsignant les oprations par des codes mnmoniques faciles retenir
(ADD, DIV, SUB, MOVE, etc.). Les adresses des instructions et les
variables pouvaient aussi tre donnes sous forme symbolique. Pour
pouvoir utiliser effectivement tous ces symboles, il fallait trouver le
moyen de les convertir en langage machine ; ce fut ralis par un
programme appel assembleur. Le langage dassemblage est toujours
utilis, car cest le seul langage qui permet dexploiter au maximum les
ressources de la machine.
Lcriture de programmes en langage dassemblage reste une tche
fastidieuse. De plus, ces programmes prsentent un problme de
portabilit tant donn quils restent dpendants de la machine sur
laquelle ils ont t dvelopps. Lapparition des langages volus, tels
que Fortran et Pascal, a apport une solution ces problmes. Les
programmes crits en langage volu doivent galement tre convertis en
langage machine pour tre excuts. Cette conversion peut seffectuer de
deux faons : par compilation ou par interprtation.
La compilation consiste traduire dans un premier temps lensemble du
programme en langage machine. Dans un deuxime temps, le programme
est excut.
Rsul t at s
Donnes
archives
Informations

Utilisateur
Ordinateur
Programme Archives
Leon 1 : I nt r oduct i on l a pr ogr ammat i on
3
Linterprtation consiste traduire chaque instruction du programme en
langage machine avant de lexcuter (figure 2).
Figure 2. Diffrents niveaux de langages de programmation
III. Dmarche de programmation
La dmarche de programmation se droule en deux phases (figure 3) :
1- Dans un premier temps, on identifie les donnes du problme, les
rsultats recherchs et par quel moyen on peut obtenir ces rsultats
partir des donnes. Cest ltape danalyse du problme qui aboutit
un procd de rsolution appel algorithme. Une approche
modulaire consiste dcomposer le problme initial en sous-
problmes plus simples rsoudre appels modules. Par exemple, un
programme de gestion de scolarit comportera un module inscription,
un module examen, un module diplme, etc.
ORDINATEUR
Langage
machine
Programme en
langage dassemblage
Programme en
langage machine
Programme en
langage volu
Compilateur Interprteur
PROGRAMMEUR
Assembleur
Leon 1 : I nt r oduct i on l a pr ogr ammat i on
4
2- Dans un deuxime temps, on traduit dans le langage de
programmation choisi le rsultat de la phase prcdente. Si lanalyse
a t mene convenablement, cette opration se rduit une simple
transcription systmatique de lalgorithme selon la grammaire du
langage.
Figure 3. Dmarche de ralisation dun programme
Lors de lexcution, soit des erreurs syntaxiques sont signales, ce qui
entrane des retours au programme et des corrections en gnral simples
effectuer, soit des erreurs smantiques plus difficiles dceler. Dans ce
dernier cas, le programme produit des rsultats qui ne correspondent pas
ceux escompts : les retours vers lanalyse (lalgorithme) sont alors
invitables.
IV. Notion de variable
Malgr une apparente diversit, la plupart des langages sont bass sur la
mme technique fondamentale savoir la manipulation de valeurs
contenues dans des variables .
En programmation, une variable est un identificateur qui sert reprer
un emplacement donn de la mmoire centrale. Cette notion nous permet
de manipuler des valeurs sans nous proccuper de lemplacement quelles
occupent effectivement en mmoire.
La lisibilit des programmes dpend troitement du choix des noms des
variables qui doivent tre simples et significatifs. Ainsi, Mont_Fac est un
meilleur choix que x pour dsigner le montant dune facture.
Comme tout identificateur, le nom dune variable est form dune ou de
plusieurs lettres ; les chiffres sont galement autoriss, condition de ne
pas les mettre au dbut du nom (figure 4).
Anal yse Tr aduc t i on
Problme
ALGORITHME
Programme
Lettre
Lettre
Chiffre
Leon 1 : I nt r oduct i on l a pr ogr ammat i on
5
Figure 4. Rgle de construction dun identificateur
Ainsi : P, Quantite et f91 sont tous des noms corrects.
Notons enfin que certains langages comme C, C++ et Java font la
diffrence entre lettres minuscules et majuscules alors que dautres
comme Turbo Pascal nen font aucune distinction.
V. Notion de constante
Contrairement aux variables, les constantes sont des donnes dont la
valeur reste fixe durant lexcution du programme.
Exemples : Pi = 3.14 g = 9.80 etc.
VI. Notion de type
A chaque variable utilise dans le programme, il faut associer un type qui
permet de dfinir :
lensemble des valeurs que peut prendre la variable
lensemble des oprations quon peut appliquer sur la variable.
La syntaxe de laction de dclaration est la suivante :
Variable 1, Variable 2, : Type
Leon 1 : I nt r oduct i on l a pr ogr ammat i on
6
Les principaux types utiliss en algorithmique sont :
- le type entier
- le type rel
- le type caractre
- le type chane de caractres
- le type logique ou boolen.
VI.1. le type entier
Une variable est dite entire si elle prend ses valeurs dans Z (ensemble
des entiers relatifs) et quelle peut supporter les oprations suivantes :
Opration Notation
Addition +
Soustraction -
Multiplication *
Division entire div
Modulo (reste de la division) mod
Exemples
13 div 5 = 2
13 mod 5 = 3
Lensemble de valeurs que peut prendre un entier varie selon le langage
de programmation utilis tant donn que le nombre de bits rservs pour
une variable de ce type nest pas le mme. A titre dexemple, en Turbo
Pascal, les entiers varient entre 32768 et +32767.
VI.2. le type rel ou dcimal
Il existe plusieurs types de rels reprsentant chacun un ensemble
particulier de valeurs prises dans (ensemble des nombres rels). Ici
encore, cette distinction se justifie par le mode de stockage des
informations dans le langage de programmation.
Il existe deux formes de reprsentation des rels :
la forme usuelle avec le point comme symbole dcimal.
Exemples : -3.2467 2 12.7 +36.49
la notation scientifique selon le format aEb, o :
Leon 1 : I nt r oduct i on l a pr ogr ammat i on
7
a est la mantisse, qui scrit sous une forme usuelle
b est lexposant reprsentant un entier relatif.
Exemple : 347 = 3.47E2 = 0.347E+3 = 3470E-1 = ...
Les oprations dfinies sur les rels sont :
Opration Notation
Addition +
Soustraction -
Multiplication *
Division (relle) /
VI.3. le type caractre
Un caractre peut appartenir au domaine des chiffres de 0 9, des
lettres (minuscules et majuscules) et des caractres spciaux (*, /,
{, $, #, % ). Un caractre sera toujours not entre des
guillemets. Le caractre espace (blanc) sera not .
Les oprateurs dfinis sur les donnes de type caractre sont :
Opration Notation
gal =
Diffrent #
Infrieur <
Infrieur ou gal <=
Suprieur >
Suprieur ou gal >=
La comparaison entre les caractres se fait selon leur codes ASCII (voir
annexe 2).
Exemple :
< 0 < 1 < A < B < a < b < {
Leon 1 : I nt r oduct i on l a pr ogr ammat i on
8
VI.4. le type logique ou boolen
Une variable logique ne peut prendre que les valeurs Vrai ou Faux.
Elle intervient dans lvaluation dune condition.
Les principales oprations dfinies sur les variables de type logique sont :
la ngation (NON), lintersection (ET) et lunion (OU).
Lapplication de ces oprateurs se fait conformmnet la table de vrit
suivante :
Table de vrit des oprateurs logiques
A B NON (A) A ET B A OU B
Vrai Vrai Faux Vrai Vrai
Vrai Faux Faux Faux Vrai
Faux Vrai Vrai Faux Vrai
Faux Faux Vrai Faux Faux
Remarque
En plus de ces types pr-dfinis, le programmeur a la possibilit de
dfinir lui-mme de nouveaux types en fonction de ses besoins.
Exemple
Types
Saison = (A,H,P,E)
Tnote = 0 .. 20
Variables
s : Saison
note : Tnote
La variable s de type saison ne peut prendre que les valeurs A, H,
P ou E.
VII. Les expressions
Ce sont des combinaisons entre des variables et des constantes laide
doprateurs. Elles expriment un calcul (expressions arithmtiques) ou
une relation (expressions logiques).
VII. 1. Les expressions arithmtiques
Leon 1 : I nt r oduct i on l a pr ogr ammat i on
9
Exemple : x * 53.4 / (2 + pi)
Lordre selon lequel se droule chaque opration de calcul est important.
Afin dviter les ambiguts dans lcriture, on se sert des parenthses et
des relations de priorit entre les oprateurs arithmtiques :
Ordre de priorit des oprateurs arithmtiques
Priorit Oprateurs
1 - signe ngatif (oprrateur unaire)
2 ( ) parenthses
3 ^ puissance
4 * et / multiplication et division
5 + et - addition et soustraction
En cas de conflit entre deux oprateurs de mme priorit, on commence
par celui situ le plus gauche.
VII. 2. Les expressions logiques
Ce sont des combinaisons entre des variables et des constantes laide
doprateurs relationnels (=, <, <=, >, >=, #) et/ou des combinaisons entre
des variables et des constantes logiques laide doprateurs logiques
(NON , ET, OU, ).
Ici encore, on utilise les parenthses et lordre de priorit entre les
diffrents oprateurs pour rsoudre les problmes de conflits.
Oprateurs logiques Oprateurs relationnels
Priorit Oprateur Priorit Oprateur
1 NON 1 >
2 ET 2 >=
3 OU 3 <
4 <=
5 =
6 #
EXERCICES DAPPLICAION
Exercice 1.1
Leon 1 : I nt r oduct i on l a pr ogr ammat i on
10
1- Quel est lordre de priorit des diffrents oprateurs de lexpression
suivante :
((3 * a) x ^ 2) (((c d) / (a / b)) / d)
2- Evaluer lexpression suivante :
5 + 2 * 6 4 + (8 + 2 ^ 3) / (2 4 + 5 * 2)
3- Ecrire la formule suivante sous forme dune expression arithmtique :
z x
ac xy


2
4 ) 3 (
2
Exercice 1.2
Sachant que a = 4, b = 5, c = -1 et d = 0, valuer les expressions logiques
suivantes :
1- (a < b) ET (c >= d)
2- NON (a < b) OU (c # b)
3- NON( (a # b ^ 2) OU (a*c < d))
Leon 1 : I nt r oduct i on l a pr ogr ammat i on
11
SOLUTIONS DES EXERCICES
Ecercice 1.1
1- ((3 * a) x ^ 2) (((c d) / (a / b)) / d)

2- 5 + 2 * 6 4 + (8 + 2 ^ 3) / (2 4 + 5 * 2) = 15
3- ((3 x * y) ^ 2 4 * a * c) / (2 * x z)
Ecercice 1.2
1- Faux
2- Vrai
3- Faux
Le rsultat dune expression logique est toujours Vrai ou Faux.
Leon 2 : Les i nst r uct i ons simpl es
12
Le on 2 : Les i nst r uc t i ons si mpl es
O b j e c t i f s
- Comprendre les actions algorithmiques simples
- Connatre la structure gnrale dun algorithme
I. Linstruction daffectation
Le rle de cette instruction consiste placer une valeur dans une variable.
Sa syntaxe gnrale est de la forme :
Variable Expression
Ainsi, linstruction :
A 6
signifie mettre la valeur 6 dans la case mmoire identifie par A .
Alors que linstruction :
B (A + 4) Mod 3
range dans B la valeur 1 (A toujours gale 6).
Remarque
La valeur ou le rsultat de lexpression droite du signe daffectation doit
tre de mme type ou de type compatible avec celui de la variable
gauche.
Exemple 1
Quelles seront les valeurs des variables A, B et C aprs lexcution des
instructions suivantes :
A 5
B 3
C A + B
A 2
C B A
Leon 2 : Les i nst r uct i ons simpl es
13
Trace dexcution
Instruction
Contenu des variables
A B C
(1) A 5 5 - -
(2) B 3 5 3 -
(3) C A + B 5 3 8
(4) A 2 2 3 8
(5) C B A 2 3 1
Exemple 2
Quelles seront les valeurs des variables A et B aprs lexcution des
instructions suivantes :
A 5
B 7
A A + B
B A - B
A A B
Trace dexcution
Instruction
Contenu des variables
A B
(1) A 5 5 -
(2) B 7 5 7
(3) A A + B 12 7
(4) B A B 12 5
(5) A A B 7 5
Cette squence dinstructions permet de permuter les valeurs de A et B.
Une deuxime faon de permuter A et B consiste utiliser une variable
intermdiaire X :
X A
A B
B X
Exercice
Leon 2 : Les i nst r uct i ons simpl es
14
Soient 3 variables A, B et C. Ecrire une squence dinstructions
permettant de faire une permutation circulaire de sorte que la valeur de A
passe dans B, celle de B dans C et celle de C dans A. On utilisera une
seule variable supplmentaire.
Solution
X C
C B
B A
A X
II. Linstruction dcriture : communication Programme Utilisateur
Pour quun programme prsente un intrt pratique, il devra pouvoir nous
communiquer un certain nombre dinformations (rsultats) par
lintermdiaire dun priphrique de sortie comme lcran ou
limprimante. Cest le rle de linstruction dcriture.
La forme gnrale de cette instruction est :
Ecrire(expression1, expression2, ...)
Exemple
Quobtient t-on lcran aprs lexcution des instructions suivantes :
x 4
Ville Tunis
Ecrire(x)
Ecrire(x*x)
Ecrire(Ville)
Ecrire(Ville = ,Ville)
Leon 2 : Les i nst r uct i ons simpl es
15
Solution
4
16
Ville
Ville = Tunis
III. Linstruction de lecture : communication Utilisateur Programme
Dans certains cas, nous pourrons tre amens transmettre des
informations (donnes) notre programme par lintermdiaire dun
priphrique dentre comme le clavier. Cela sera ralis par linstruction
de lecture.
La forme gnrale de cette instruction est :
Lire(Variable1, Variable2, ...)
Ainsi, linstruction :
Lire(A)
signifie lire une valeur partir du priphrique dentre, qui est le
clavier par dfaut, et la ranger dans la variable identifie par A
IV. Structure gnrale dun algorithme
Algorithme Nom_algorithme
Constantes
C1 = Valeur1

Types
Type1 = dfinition du type

Variables
V1 : Type1

Dbut
Instruction1

Fin.
Leon 2 : Les i nst r uct i ons simpl es
16
Remarques
1. Les nouveaux types doivent tre dclars dans la partie Types.
2. Toute variable utilise dans lalgorithme doit tre pralablement
dclare.
3. Les instructions places entre Dbut et Fin forment le corps
principal de lalgorithme.
4. Seules les parties Entte et Corps de lalgorithme sont
obligatoires.
5. Lindentation qui consiste insrer des tabulations avant les objets
dclars et les instructions offre une meilleure lisibilit de
lalgorithme et le rend, par consquent, plus facile comprendre et
corriger.
EXERCICES DAPPLICATION
Exercice 2.1
Donner toutes les raisons pour lesquelles lalgorithme suivant est
incorrect :
Algoritme Incorrect
x, y : Entier
z : Rel
Dbut
z x + 2
y z
x*2 3 + z
y 5y + 3
Fin.
Exercice 2.2
Ecrire un algorithme qui lit deux entiers au clavier et qui affiche ensuite
leur somme et leur produit.
Exercice 2.3
Leon 2 : Les i nst r uct i ons simpl es
17
Ecrire un algorithme qui lit le rayon dun cercle et qui affiche ensuite son
primtre et sa surface.
Exercice 2.4
Ecrire un algorithme qui calcule et affiche la rsistance dun composant
lectrique en utilisant la loi dOhm :

'


A. en Intensit : I
en Rsistance : R
V en Tension : U
avec I R U
Leon 2 : Les i nst r uct i ons simpl es
18
SOLUTIONS DES EXERCICES
Exercice 2.1
1. Algoritme Incorrect
2. x, y : Entier
3. z : Rel
4. Dbut
5. z x + 2
6. y z
7. x*2 3 + z
8. y 5y + 3
9. Fin.
Cet algorithme est incorrect pour plusieurs raisons :
ligne 1 : Le mot Algorithme scrit avec un h au milieu
ligne 2 : La dclaration des variables commence par le mot
Variables
ligne 5 : La valeur de x est indtermine
Ligne 6 : incompatibilit de type (un rsultat rel affect une
variable de type entier)
Ligne 7 : Le membre gauche dune affectation doit tre une variable
Ligne 8 : Il faut crire 5*y et non 5y.
Exercice 2.2 : calcul de la somme et du produit de deux entiers
Algorithme Som_Prod
Variables
a, b, s, p : Entier
Dbut
Ecrire(Entrer la valeur de a : ) Lire(a)
Ecrire(Entrer la valeur de b : ) Lire(b)
s a + b
p a * b
Ecrire (Somme = , s)
Ecrire (Produit = , p)
Fin.
Exercice 2.3 : calcul du primtre et de la surface dun cercle
Leon 2 : Les i nst r uct i ons simpl es
19
Algorithme Cercle
Constantes
pi = 3.14
Variables
r, p, s : Rel
Dbut
Ecrire(Entrer le rayon du cercle : ) Lire(r)
p 2 * pi * r
s pi * r ^ 2
Ecrire (Primtre = , p)
Ecrire (Surface = , s)
Fin.
Exercice 2.4 : calcul de la rsistance dun composant lectrique
Algorithme Rsistance
Variables
U, I, R : Rel
Dbut
Ecrire(Entrer la tension : ) Lire(U)
Ecrire(Entrer lintensit : ) Lire(I)
R U/I (* on suppose toujours I # 0 *)
Ecrire (Rsitance = , R, Ohms )
Fin.
Leon 3 : Les st r uct ur es condi t i onnel l es
20
Le on 3 : l es st r uc t ur es c ondi t i onnel l es
O b j e c t i f
Construire des algorithmes comportant des traitements conditionnels.
I. Introduction
En programmation, on est souvent confront des situations o on a
besoin de choisir entre deux ou plusieurs traitements selon la ralisation
ou non dune certaine condition ; do la notion de traitement
conditionnel.
On distingue deux structures de traitement conditionnel savoir :
La structure de slection simple dans laquelle on a choisir entre
deux traitements au plus ;
La structure de slection multiple dans laquelle on a la possibilit
de choisir un traitement parmi plusieurs.
II. Structure de slection simple
II.1. Forme simple
Si <Condition> Alors
<Squence dinstructions>
FinSi
Cette primitive a pour effet dexcuter la squence dinstructions si et
seulement si la condition est vrifie.
Lexcution de cette instruction se droule selon lorganigramme
suivant (figure 5) :
Si
Leon 3 : Les st r uct ur es condi t i onnel l es
21
Figure 5. Schma dexcution dune instruction conditionnelle simple
Exemple
Ecrire un algorithme qui calcule le salaire dun employ partir du
nombre dheures travailles, du taux horaire et du nombre dannes de
service. Les employs ayant une anciennet de plus de 10 ans bnficient
dune allocation supplmentaire de 35 D.
Analyse du problme
1- Donnes du problme
nh : nombre dheures travailles
th : taux horaire (en Dinar)
anc : anciennet (en Anne)
2- Rsultat recherch
salaire : salaire net de lemploy (en Dinar)
3- Comment faire ?
Salaire nh * th
Si (anc > 10) Alors
salaire salaire + 35
FinSi
Solution
Algorithme Calc_Salaire
Condition ?
Squence dinstructions
faux
vrai
Suite du programme
Leon 3 : Les st r uct ur es condi t i onnel l es
22
Variables
nh, th, anc, salaire : Rel
Dbut
Ecrire(Nombre dheures travailles : ) Lire(nh)
Ecrire(Taux horaire : ) Lire(th)
Ecrire(Anciennet : ) Lire(anc)
salaire nh * th
Si (anc > 10) Alors
salaire salaire + 35
FinSi
Ecrire (Salaire de lemploy = , salaire)
Fin.
II.2 Forme alternative
Si <Condition> Alors
<Squence dinstructions 1>
Sinon
<Squence dinstructions 2>
FinSi
Cette primitive a pour effet dexcuter la premire squence
dinstructions si la condition est vrifie ou bien la deuxime squence
dinstructions dans le cas contraire.
Lexcution de cette instruction se droule selon lorganigramme
suivant (figure 6) :
Leon 3 : Les st r uct ur es condi t i onnel l es
23
Figure 6. Schma dexcution dune instruction conditionnelle alternative
Exemple 1
Ecrire un algorithme qui calcule et affiche la valeur absolue dun entier
quelconque lu au clavier.
Solution
Algorithme Val_Abs
Variables
x, va : Entier
Dbut
Ecrire(Entrer un entier : ) Lire(x)
Si (x >= 0) Alors
va x
Sinon
va -x
FinSi
Ecrire (|,x, | = ,va)
Fin.
Exemple 2
Condition ?
Squence
dinstructions 1
faux vrai
Squence
dinstructions 2
Si
Suite du programme
Leon 3 : Les st r uct ur es condi t i onnel l es
24
Ecrire un algorithme qui lit un entier et affiche ensuite sil est pair ou
impair.
Solution
Algorithme pair_impair
Variables
x : Entier
Dbut
Ecrire(Entrer un entier : ) Lire(x)
Si (x Mod 2 = 0) Alors
Ecrire(cest un entier pair)
Sinon
Ecrire(cest un entier impair)
FinSi
Fin.
III. Structure de slection multiple
Syntaxe gnrale
Selon <slecteur> Faire
Liste de valeurs 1 : < Squence dinstructions 1>
Liste de valeurs 2 : < Squence dinstructions 2>

Liste de valeurs n : < Squence dinstructions n>


Sinon
<Autre Squence dinstructions>
FinSelon
La squence dinstructions numro i sera excut si la valeur du slecteur
appartient la i
me
liste de valeurs.
Le slecteur est une variable ou une expression de type scalaire (le
rsultat est un entier ou un caractre).
Exercice
Ecrire un algorithme qui permet de lire un numro compris entre 1 et 12
et dafficher le nom du mois correspondant. Si le numro entr est en
dehors de cet intervalle, un message derreur doit tre affich.
Solution
Leon 3 : Les st r uct ur es condi t i onnel l es
25
Algorithme mois
Variables
n : Entier
Dbut
Ecrire(Entrer le numro du mois : ) Lire(n)
Selon n Faire
1 : Ecrire(janvier)
2 : Ecrire(fvrier)

12 : Ecrire(dcembre)
Sinon
Ecrire(numro de mois erron... )
FinSelon
Fin.
Remarque
Lexercice prcdent peut tre rsolu en utilisant plusieurs instructions
Si imbriques, mais lalgorithme sera trs lourd :
Algorithme mois (* version Si *)
Variables
n : Entier
Dbut
Ecrire(Entrer le numro du mois : ) Lire(n)
Si (n = 1) Alors
Ecrire(janvier)
Sinon
Si (n = 2) Alors
Ecrire(fvrier)
Sinon
Si (n = 3) Alors
Ecrire(mars)
Sinon
Si (n = 4) Alors

Fin.
EXERCICES DAPPLICATION
Exercice 3.1
Leon 3 : Les st r uct ur es condi t i onnel l es
26
Ecrire un algorithme permettant de rsoudre dans une quation du
second degr de la forme ax
2
+bx+c = 0.
Exercice 3.2
Ecrire un algorithme pemettant de simuler une calculatrice 4 oprations
(+, -, *, et /). Utiliser la structure selon pour le choix de lopration
effectuer.
Exercice 3.3
Ecrire un algorithme qui lit un caractre au clavier puis affiche sil sagit
dune lettre minuscule, dune lettre majuscule, dun chiffre ou dun
caractre spcial.
Leon 3 : Les st r uct ur es condi t i onnel l es
27
SOLUTIONS DES EXERCICES
Exercice 3.1 : rsolution dune quation du second degr
Algorithme equa2d
Variables
a, b, c, delta : Rel
Dbut
Ecrire(Entrer la valeur de a (non nulle) : ) Lire(a)
Ecrire(Entrer la valeur de b : ) Lire(b)
Ecrire(Entrer la valeur de c : ) Lire(c)
delta b^2 4*a*c
Si (delta < 0) Alors
Ecrire(pas de solution dans R)
Sinon
Si (delta = 0) Alors
Ecrire(x1 = x2 = ,-b/(2*a))
Sinon
Ecrire(x1 =,(-b-racine(delta))/(2*a))
Ecrire(x2 =,(-b+racine(delta))/(2*a))
FinSi
FinSi
Fin.
Exercice 3.2 : simulation dune calculatrice 4 oprations
Algorithme calculatrice
Variables
val1, val2 : Rel
opration : Caractre
Dbut
Ecrire(Premire oprande : ) Lire(val1)
Ecrire(Opration : ) Lire(opration)
Ecrire(Deuxime oprande : ) Lire(val2)
Selon opration Faire
+ : Ecrire(Rsultat = , val1 + val2)
- : Ecrire(Rsultat = , val1 - val2)
* : Ecrire(Rsultat = , val1 * val2)
/ : Si (b # 0) Alors
Ecrire(Rsultat = , val1/val2)
Leon 3 : Les st r uct ur es condi t i onnel l es
28
Sinon
Ecrire(Division par zro !)
FinSi
Sinon
Ecrire(oprateur erron... )
FinSelon
Fin.
Exercice 3.3 : nature dun caractre
Algorithme Nature_car
Variables
c : Caractre
Dbut
Ecrire(Entrer un caractre : ) Lire(c)
Selon c Faire
a..z : Ecrire(cest une lettre minuscule)
A..Z : Ecrire(cest une lettre majuscule)
0..9 : Ecrire(cest un chiffre)
Sinon
Ecrire(cest un caractre spcial)
FinSelon
Fin.
Leon 4 : Les st r uct ur es i t r at i ves
29
Le on 4 : Les st r uct ur es i t r at i ves
O b j e c t i f
Construire des algorithmes comportant des traitements itratifs.
I. Introduction
La notion ditration est une des notions fondamentales de
lalgorithmique. On lutilise souvent quand on doit excuter le mme
traitement un certain nombre de fois qui peut tre connu lavance ou
non. Dans ce dernier cas, larrt de litration est dclench par une
condition sur ltat des variables dans le programme.
II. La structure Pour Faire
Syntaxe gnrale
Pour compteur De valeur initiale A valeur finale Faire
<Squence dinstructions>
FinPour
Principe de fonctionnement
Le compteur (variable de contrle) prend la valeur initiale au moment
daccs la boucle puis, chaque parcours, il passe automatiquement
la valeur suivante dans son domaine jusqu atteindre la valeur finale
(figure 7) :
Leon 4 : Les st r uct ur es i t r at i ves
30
Figure 7. Schma dexcution dune boucle pour
Exemple
Pour i de 1 5 Faire
Ecrire(i*10)
FinPour
Cette boucle affiche respectivement les nombres 10, 20, 30, 40 et 50.
Remarques
1- Une boucle pour peut tre excute 0, 1 ou n fois
2- On ne peut utiliser la boucle pour que si on connat au pralable
combien de fois le traitement sera excut (valeur finale valeur
initiale + 1).
3- Dans une boucle pour , lvolution du compteur peut se faire dans
le sens dcroissant comme dans lexemple suivant :
Pour i de 5 1 [pas = -1] Faire
Ecrire(i*10)
FinPour
Dans ce cas, le compteur i sera dcrment aprs chaque parcours.
cpt <= Val_Fin
Squence dinstructions
non
oui
cpt Val_Init
cpt cpt + 1
Pour
Suite du programme
Leon 4 : Les st r uct ur es i t r at i ves
31
Exercice
Ecrire un algorithme qui lit un entier positif n puis affiche tous ses
diviseurs.
Solution
Algorithme Diviseurs (* version pour *)
Variables
n, i : Entier
Dbut
Ecrire(Entrer un entier positif : ) Lire(n)
Pour i de 1 n Faire
Si (n Mod i = 0) Alors
Ecrire(i)
FinSi
FinPour
Fin.
Exercice
Ecrire un algorithme qui lit un entier positif n puis calcule et affiche son
factoriel selon la formule n! = 1 2 n.
Solution
Algorithme Facto (* version pour *)
Variables
n, i, f : Entier
Dbut
Ecrire(Entrer un entier positif : ) Lire(n)
f 1
Pour i de 2 n Faire
f f * i
FinPour
Ecrire(n,! = ,f)
Fin.
III. La structure Rpter Jusqu
Leon 4 : Les st r uct ur es i t r at i ves
32
Syntaxe gnrale
Rpter
<Squence dinstructions>
Jusqu <condition>
Principe de fonctionnement
La squence dinstructions est excute une premire fois, puis
lexcution se rpte jusqu ce que la condition de sortie soit vrifie.
Une boucle rpter sexcute toujours au moins une fois (figure 8).
Figure 8. Schma dexcution dune boucle rpter
Exemple
i 1
Rpter
Ecrire(i*10)
i i + 1
Jusqu (i > 5)
Remarques
1- Contrairement une boucle pour , dans une boucle rpter ,
linitialisation et lavancement du compteur doivent tre grs
manuellement par le programmeur.
Condition de sortie ?
Squence
dinstructions
vrai
faux
Suite du programme
Rpter
Leon 4 : Les st r uct ur es i t r at i ves
33
2- Dans une boucle rpter , il faut toujours sassurer que la
condition de sortie sera vrifie aprs un nombre fini de parcours.
Sinon, cest une boucle infinie comme dans le cas suivant :
c A
Rpter
Ecrire(c)
Jusqu (c > Z)
Exercice
Rcrire lalgorithme diviseurs en remplaant la boucle pour par une
boucle rpter
Solution
Algorithme Diviseurs (* version rpter *)
Variables
n, i : Entier
Dbut
Ecrire(Entrer un entier positif : ) Lire(n)
i 1
Rpter
Si (n Mod i = 0) Alors
Ecrire(i)
FinSi
i i + 1
Jusqu (i > n)
Fin.
Exercice
Rcrire lalgorithme facto en remplaant la boucle pour par une
boucle rpter
Solution
Algorithme Facto (* version rpter *)
Variables
n, f, i : Entier
Leon 4 : Les st r uct ur es i t r at i ves
34
Dbut
Ecrire(Entrer un entier positif : ) Lire(n)
f 1
i 1
Rpter
f f * i
i i + 1
Jusqu (i > n)
Ecrire(n,! = ,f)
Fin.
IV. La structure TantQue Faire
Syntaxe gnrale
TantQue <condition> Faire
<Squence dinstructions>
FinTQ
Principe de fonctionnement
Le traitement est excut aussi longtemps que la condition est vrifie. Si
ds le dbut cette condition est fausse, le traitement ne sera excut
aucune fois.
Une boucle tantque peut sexcuter 0, 1 ou n fois (figure 9).
Leon 4 : Les st r uct ur es i t r at i ves
35
Figure 9. Schma dexcution dune boucle tantque
Exemple
i 1
TantQue (i<=5) Faire
Ecrire(i*10)
i i + 1
FinTQ
Exercice
Rcrire lalgorithme diviseurs en remplaant la boucle rpter par
une boucle tantque
Solution
Algorithme Diviseurs (* version tantque *)
Variables
n, i : Entier
Dbut
Ecrire(Entrer un entier positif : ) Lire(n)
i 1
TantQue (i <= n) Faire
Si (n Mod i = 0) Alors
Ecrire(i)
FinSi
i i + 1
FinTQ
Fin.
Exercice
Condition ?
Squence
dinstructions
vrai
faux
TantQue
Suite du programme
Leon 4 : Les st r uct ur es i t r at i ves
36
Rcrire lalgorithme facto en remplaant la boucle rpter par une
boucle tantque .
Solution
Algorithme Facto (* version tantque *)
Variables
n, f, i : Entier
Dbut
Ecrire(Entrer un entier positif : ) Lire(n)
f 1
i 2
TantQue (i <= n) Faire
f f * i
i i + 1
FinTQ
Ecrire(n,! = ,f)
Fin.
V. Synthse
V.1. Passage dune structure itrative une autre
(*) : Le passage dune boucle rpter ou tantque une boucle pour nest
possible que si le nombre de parcours est connu lavance.
(**) : Lors du passage dune boucle pour ou tantque une boucle rpter , faire
attention aux cas particuliers (le traitement sera toujours excut au moins une fois).
V.2. Choix de la structure itrative
Pour cpt de vi vf Faire
Traitement
FinPour
cpt vi
Rpter
Traitement
cpt suivant(cpt)
Jusqu (cpt > vf)
cpt vi
TantQue (cpt <= vf) Faire
Traitement
cpt suivant(cpt)
FinTQ
(*) (**)
(*)
(**)
Leon 4 : Les st r uct ur es i t r at i ves
37
Figure 10. Critres de choix de la structure itrative adquate
EXERCICES DAPPLICATION
Exercice 4.1
Ecrire un algorithme permettant de :
- Lire un nombre fini de notes comprises entre 0 et 20
- Afficher la meilleure note, la mauvaise note et la moyenne de
toutes les notes.
Exercice 4.2
Calculer a
b
avec a rel et b entier par multiplications successives.
Exercice 4.3
Ecrire un algorithme qui lit un entier positif et vrifie si ce nombre est
premier ou non.
Remarque : un nombre premier nest divisible que par 1 ou par lui-mme.
Exercice 4.4
Ecrire un algorithme qui dtermine tous les nombres premiers infrieurs
une valeur donne.
Exercice 4.5
Nbre ditrations
connu lavance
non
oui
Boucle Pour
Le traitement sexcute
au moins une fois
oui
Boucle Rpter
Boucle TantQue
non
Leon 4 : Les st r uct ur es i t r at i ves
38
Ecrire un algorithme qui lit deux entiers A et B puis calcule et affiche
leur PGCD en utilisant la mthode suivante :
Si A = B ; PGCD(A,B) = A
Si A > B ; PGCD(A,B) = PGCD(AB,B)
Si B > A ; PGCD(A,B) = PGCD(A,B-A)
Exemple : PGCD(18,45)=PGCD(18,27)=PGCD(18,9)=PGCD(9,9)=9
Exercice 4.6
Ecrire un algorithme qui calcule le PPCM (Plus Petit Commun Multiple)
de 2 entiers A et B en utilisant la mthode suivante :
Permuter, si ncessaire, les donnes de faon ranger dans A le
plus grand des 2 entiers ;
Chercher le plus petit multiple de A qui est aussi multiple de B.
Exemple : PPCM(6,8) = PPCM(8,6) = 24.
Exercice 4.7
Ecrire un algorithme qui calcule et affiche les 10 premiers termes de la
suite de Fibonacci.
La suite de Fibonacci est dfinie par :
F
0
= 1
F
1
= 1
F
n
= F
n-2
+ F
n-1
pour n >1
Exercice 4.8
Ecrire un algorithme qui calcule la somme harmonique

n
i
i
s
1
1
; n est
un entier positif lu partir du clavier.
Exemple : Pour n = 3, s = 1 + 1/2 + 1/3 = 1.83.
Leon 4 : Les st r uct ur es i t r at i ves
39
Exercice 4.9 : nombres cubiques
Parmi tous les entiers suprieurs 1, seuls 4 peuvent tre reprsents par
la somme des cubes de leurs chiffres.
Ainsi, par exemple : 153 = 1
3
+ 5
3
+ 3
3
est un nombre cubique
Ecrire un algorithme permettant de dterminer les 3 autres.
Note : les 4 nombres sont compris entre 150 et 410.
Exercice 4.10 : nombres parfaits
Un nombre parfait est un nombre prsentant la particularit dtre gal
la somme de tous ses diviseurs, except lui-mme.
Le premier nombre parfait est 6 = 3 + 2 + 1.
Ecrire un algorithme qui affiche tous les nombres parfaits infrieurs
1000.
Exercice 4.11
Ecrire un algorithme qui simule le jeu suivant :
a- A tour de rle, lordinateur et le joueur choisissent un nombre qui ne
peut prendre que 3 valeurs : 0, 1 ou 2.
Linstruction : N Random(3) ralise le choix de lordinateur
b- Si la diffrence entre les nombres choisis vaut :
2, le joueur qui a propos le plus grand nombre gagne un point
1, le joueur qui a propos le plus petit nombre gagne un point
0, aucun point nest marqu
c- Le jeu se termine quand lun des joueurs totalise 10 points.
Leon 4 : Les st r uct ur es i t r at i ves
40
SOLUTIONS DES EXERCICES
Exercice 4.1
Algorithme Notes
Variables
n, i : Entier
note, min, max, s : Rel
Dbut
Ecrire(Entrer le nombre de notes : )
Lire(n) (* On suppose que n est toujours suprieur zro *)
s 0
max 0
min 20
Pour i de 1 n Faire
Ecrire(Entrer une note : ) Lire(note)
s s + note
Si (note > max) Alors
max note
FinSi
Si (note < min) Alors
min note
FinSi
FinPour
Ecrire(Meilleure note = ,max)
Ecrire(Mauvaise note = ,min)
Ecrire(Moyenne des notes = ,s/n)
Fin.
Exercice 4.2 : calcul de a
b
par multiplications successives
Algorithme Puissance
Variables
a, c : Rel
b, i : Entier
Dbut
Ecrire(Entrer la valeur de a : ) Lire(a)
Ecrire(Entrer la valeur de b : ) Lire(b)
c 1
Pour i de 1 Abs(b) Faire
Leon 4 : Les st r uct ur es i t r at i ves
41
c c * a
FinPour
Si (b < 0) Alors
c 1 / c
FinSi
Ecrire(a, la puissance ,b, = ,c)
Fin.
Exercice 4.3 : vrifier si un entier n est premier ou non
Algorithme Premier
Variables
n, i, nb_div : Entier
Dbut
Ecrire(Entrer un entier positif : ) Lire(n)
nb_div 0
i 1
TantQue (i <= n) Faire
Si (n Mod i = 0) Alors
nb_div nb_div + 1
FinSi
i i + 1
FinTQ
Si (nb_div <= 2) Alors
Ecrire(Cest un nombre premier)
Sinon
Ecrire(Ce nest pas un nombre premier)
FinSi
Fin.
Exercice 4.4 : dterminer les nombres premiers infrieurs un entier n
Algorithme Premiers
Variables
n, i, j, nb_div : Entier
Dbut
Ecrire(Entrer la valeur de n : ) Lire(n)
Pour i de 1 n Faire
nb_div 0
Pour j de 1 i Faire
Leon 4 : Les st r uct ur es i t r at i ves
42
Si (i Mod j = 0) Alors
nb_div nb_div + 1
FinSi
FinPour
Si (nb_div <= 2) Alors
Ecrire(i)
FinSi
FinPour
Fin.
Exercice 4.5 : calcul du PGCD de 2 entiers a et b
Algorithme PGCD
Variables
a, b : Entier
Dbut
Ecrire(Entrer la valeur de a : ) Lire(a)
Ecrire(Entrer la valeur de b : ) Lire(b)
Rpter
Si (a > b) Alors
a a b
FinSi
Si (b > a) Alors
b b - a
FinSi
Jusqu (a = b)
Ecrire(PGCD = , a)
Fin.
Exercice 4.6 : calcul du PPCM de 2 entiers a et b
Algorithme PPCM
Variables
a, b, i, x : Entier
Dbut
Ecrire(Entrer la valeur de a : )
Lire(a)
Ecrire(Entrer la valeur de b : )
Lire(b) (* On suppose que b est toujours suprieur zro *)
Si (a < b) Alors
Leon 4 : Les st r uct ur es i t r at i ves
43
x a
a b
b x
FinSi
i 1
TantQue (((i*a) Mod b) # 0) Faire
i i + 1
FinTQ
Ecrire(PPCM = , i*a)
Fin.
Exercice 4.7 : calcul des n premiers termes de la suite de Fibonacci
Algorithme Fibo
Variables
f0, f1, f, n, i : Entier
Dbut
Ecrire(Nombre de termes calculer : ) Lire(n)
f0 1
Ecrire(f0 = ,f0)
f1 1
Ecrire(f1 = ,f1)
Pour i de 2 (n-1) Faire
f f0 + f1
Ecrire(f,i, = ,f)
f0 f1
f1 f
FinPour
Fin.
Leon 4 : Les st r uct ur es i t r at i ves
44
Exercice 4.8 : calcul de la somme harmonique

n
i
i
s
1
1
Algorithme Somme
Variables
n, i : Entier
s : Rel
Dbut
Ecrire(Entrer la valeur de n : ) Lire(n)
s 0
Pour i de 1 n Faire
s s + 1/i
FinPour
Ecrire(s = ,s)
Fin.
Exercice 4.9 : nombres cubiques
Algorithme cubiques
Variables
i, centaine, dizaine, unite : Entier
Dbut
Pour i de 150 410 Faire
centaine i Div 100
dizaine (i Mod 100) Div 10
unite i Mod 10
Si ((centaine^3 + dizaine^3 + unite^3) = i)
Alors
Ecrire(i, est un nombre cubique)
FinSi
FinPour
Fin.
Remarque : les nombres cubiques sont : 153, 370, 371 et 407
Leon 4 : Les st r uct ur es i t r at i ves
45
Exercice 4.10 : nombres parfaits infrieurs 1000
Algorithme parfaits
Variables
i, n, s, j : Entier
Dbut
Pour i de 1 1000 Faire
s 0
Pour j de 1 (i Div 2) Faire
Si ((i Mod j) = 0) Alors
s s + j
FinSi
FinPour
Si (s = i) Alors
Ecrire(i, est un nombre parfait)
FinSi
FinPour
Fin.
Remarque : les nombres parfaits infrieurs 1000 sont : 6, 28 et 496
Exercice 4.11 : simulation dun jeu
Algorithme jeu
Variables
nb_j, nb_ord, tot_j, tot_ord : Entier
Dbut
tot_j 0
tot_ord 0
TantQue (tot_j < 10) ET (tot_ord < 10) Faire
nb_ord = random(3)
Ecrire(Entrer un entier (0/1/2) : ) Lire(nb_j)
Si (Abs(nb_ord nb_j) = 2) Alors
Si (nb_ord > nb_j) Alors
tot_ord tot_ord + 1
Sinon
tot_j tot_j + 1
FinSi
FinSi
Si (Abs(nb_ord nb_j) = 1) Alors
Leon 4 : Les st r uct ur es i t r at i ves
46
Si (nb_ord < nb_j) Alors
tot_ord tot_ord + 1
Sinon
tot_j tot_j + 1
FinSi
FinSi
FinTQ
Ecrire(Total ordinateur = ,tot_ord)
Ecrire(Total joueur = ,tot_j)
Fin.
Leon 5 : Les cha nes de car act r es
47
Le on 5 : l es c hanes de c ar ac t r es
O b j e c t i f
Construire des algorithmes qui traitent des caractres et des chanes de
caractres.
I. Le type caractre
I.1. Dfinition
Ce type sapplique tous les caractres du code ASCII (American
Standard Code for Information Interchange). La liste comprend :
- Les lettres : A .. Z,a..z
- Les chiffres : 0..9
- Les caractres spciaux : / ; * ; ? ; & ; etc.
- Les caractres de contrle : <Retour Chariot> ; <Echap> ; etc.
Chaque caractre est dfini par son numro dordre unique compris entre
0 et 255 (voir annexe 2).
I.2 Fonctions standards sur les caractres
Fonction Rle Exemple
Asc(c) retourne le code ASCII du caractre c i Asc(A)
i contiendra 65
Car(i) retourne le caractre dont le code ASCII est
gal i.
c Car(65)
c contiendra A
Succ(c) retourne le successeur du caractre c c Succ(a)
c contiendra b
Pred(c) retourne le prdcesseur du caractre c c Pred(b)
c contiendra a
Majus(c) retourne le majuscule du caractre c c Majus(a)
c contiendra A
Leon 5 : Les cha nes de car act r es
48
Exemple
Ecrire un algorithme qui lit un caractre au clavier puis affiche son
prdcesseur, son successeur et le code ASCII de son quivalent en
majuscule.
Solution
Algorithme Caract
Variables
c : Caractre
Dbut
Ecrire(Entrer un caractre: ) Lire(c)
Ecrire(pred(c))
Ecrire(succ(c))
Ecrire(asc(majus(c)))
Fin.
Exercice 1
Que fait lalgorithme suivant :
Algorithme Upcase
Variables
c1, c2 : Caractre
Dbut
Ecrire(Entrer un caractre: ) Lire(c1)
Si (asc(c1) >= 97) et (asc(c1) <= 122) Alors
c2 car(asc(c1) - 32)
Sinon
c2 c1
FinSi
Ecrire(c2)
Fin.
Solution
Cet algorithme lit un caractre puis affiche son quivalent en majuscule.
Leon 5 : Les cha nes de car act r es
49
Exercice 2
Ecrire un algorithme qui affiche une table ASCII des lettres minuscules
sous la forme suivante :
Le code ASCII de a est 97
Le code ASCII de b est 98

Le code ASCII de z est 122


Solution
Algorithme table_minus
Variables
c : Caractre
Dbut
Pour c de a z Faire
Ecrire(Le code ASCII de ,c, est ,asc(c))
FinPour
Fin.
Exercice 3
Ecrire un algorithme qui lit une lettre au clavier puis affiche sil sagit
dune consonne ou dune voyelle.
Remarque : les voyelles sont : A ; a ; E ; e ; I ; i; O ; o ;
U ; u ; Y ; y.
Solution
Algorithme Cons_Voy
Variables
c : Caractre
Dbut
Rpter
Ecrire(Entrer un caractre : ) Lire(c)
Jusqu (c >= A et c <= Z) ou (c >= a et c <= z)
Si (Majus(c)=A) ou (Majus(c)=E) ou (Majus(c)=I)
ou (Majus(c)=O) ou (Majus(c)=U) ou (Majus(c)=Y)
Alors
Ecrire(c, est une voyelle)
Sinon
Ecrire(c, est une consonne)
FinSi
Fin.
Leon 5 : Les cha nes de car act r es
50
Dans cet algorithme, le but de la boucle rpter est dobliger lutilisateur
entrer une lettre.
II. Le type chane de caractres
Une chane est une suite de caractres. La chane ne contenant aucun
caractre est appele chane vide.
II. 1. Dclaration dune chane
Variables
c : Caractre
ch : Chane
chn : Chane[20]
La variable ch peut contenir jusqu 255 caractres alors que chn peut
contenir au maximum 20.
II. 2 Oprations sur les chanes de caractres
a- l a concatnati on
Cest lassemblage de deux chanes de caractres en utilisant loprateur
+ .
Exemple
chn1 Turbo
chn2 Pascal
chn3 chn1+ +chn2
la variable chn3 contiendra Turbo Pascal
b- l es oprateurs rel ati onnel s (>, >=, <, <=, =, #)
Il est possible deffectuer une comparaison entre deux chanes de
caractres, le rsultat est de type boolen. La comparaison se fait
caractre par caractre de la gauche vers la droite selon le code ASCII.
Leon 5 : Les cha nes de car act r es
51
Exemples
Lexpression (a > A) est vraie puisque le code ASCII de a
(97) est suprieur celui de A (65)
Lexpression (programme < programmation) est fausse
puisque e > a
Lexpression ( = ) est fausse (le vide est diffrent du
caractre espace).
c- accs un caractre dans une chane
Pour accder un caractre de la chane, il suffit dindiquer le nom de la
chane suivi dun entier entre crochets qui indique la position du caractre
dans la chane.
Exemple
chn Turbo Pascal
c chn[7]
la variable c contiendra le caractre P.
En gnral, ch[i] dsigne le i
me
caractre de la chane ch.
III. Procdures et fonctions standards sur les chanes
III.1. Procdures standards
Procdure Rle Exemple
Efface(Chane, P, N) Enlve N caractres de
Chane partir de la
position P donne.
chn Turbo Pascal
efface(chn,6,7)
chn contiendra Turbo
Insert(Ch1, Ch2, P) Insre la chane Ch1
dans la chane Ch2
partir de la position P.
ch1 D
ch2 AA
insert(ch1,ch2,2)
ch2 contiendra ADA
Convch(Nbr, Ch) Converti le nombre Nbr
en une chane de
caractres Ch.
n = 1665
convch(n,chn)
chn contiendra la chane
1665
Leon 5 : Les cha nes de car act r es
52
III.2. Fonctions standards
Fonction Rle Exemple
Long(Chane) Retourne la longueur de la
chane.
chn Turbo Pascal
n Long(chn)
n contiendra 12
Copie(Chane, P, N) Copie N caractres de Chane
partir de la position P donne.
ch1 Turbo Pascal
ch2 Copy(ch1,7,6)
ch2 contiendra Pascal
Position(Ch1, Ch2) Retourne la position de la
premire occurrence de la
chane Ch1 dans la chane Ch2.
ch1 as
ch2 Turbo Pascal
n Position(ch1,ch2)
n contiendra 8
Exercice
Ecrire un algorithme Palind qui lit une chane de caractres et vrifie
si cette chane est un palindrome ou non.
Un palindrome est un mot qui peut tre lu indiffremment de droite
gauche ou de gauche droite (Exemples : AZIZA, LAVAL,
RADAR, 2002, etc.)
Correction
Algorithme Palind
Variables
ch : Chane
i, L : Entier
Pal : Boolen
Dbut
Ecrire(Entrer une chane non vide : ) Lire(ch)
L long(ch)
Pal Vrai
i 1
TantQue (i <= L/2) et (Pal) Faire
Si (ch[i] = ch[L-i+1]) Alors
i i + 1
Sinon
Pal Faux
Leon 5 : Les cha nes de car act r es
53
FinSi
FinTQ
Si (Pal) Alors
Ecrire(ch, est un palindrome)
Sinon
Ecrire(ch, nest pas un palindrome)
FinSi
Fin.
EXERCICES DAPPLICATION
Exercice 5.1
Ecrire un algorithme qui lit une chane de caractres puis affiche son
inverse.
Exemple : Si la chane entre est algo, lalgorithme doit afficher ogla.
Exercice 5.2
Ecrire un algorithme qui lit une chane de caractres et renvoie son
quivalent en majuscules.
Exercice 5.3
Ecrire un algorithme qui permet de compter le nombre de mots dans une
phrase.
La phrase commence obligatoirement par une lettre et les mots sont
spars par des espaces.
Exercice 5.4
Ecrire un algorithme qui dtermine et affiche le mot le plus long dans une
phrase donne.
Exercice 5.5
Ecrire un algorithme qui lit :
Leon 5 : Les cha nes de car act r es
54
- Un mot (chane de caractres forme uniquement de lettres)
- Une lettre
puis affiche le nombre dapparitions de la lettre dans le mot.
Exercice 5. 6 : conversion dcimal binaire
Ecrire un algorithme qui lit en entier positif puis affiche son quivalent en
binaire (base 2).
Exemple : (23)
10
= (10111)
2
Leon 5 : Les cha nes de car act r es
55
SOLUTIONS DES EXERCICES
Exercice 5.1 : affichage de linverse dune chane de caractres
Algorithme inverse
Variables
i, L : Entier
ch1, ch2 : Chane
Dbut
Ecrire(Entrer une chane : ) Lire(ch1)
L Long(ch1)
ch2
Pour i de 1 L Faire
ch2 ch1[i] + ch2
FinPour
Ecrire(Inverse de la chane = ,ch2)
Fin.
Exercice 5.2 : conversion dune chane de caractres en majuscule
Algorithme Majuscule
Variables
i, L : Entier
ch1, ch2 : Chane
Dbut
Ecrire(Entrer une chane : ) Lire(ch1)
L Long(ch1)
ch2
Pour i de 1 L Faire
ch2 ch2 + Majus(ch1[i])
FinPour
Ecrire(Chane en majuscule = ,ch2)
Fin.
Exercice 5.3 : comptage du nombre de mots dans une phrase
Algorithme Comptage_Mots
Variables
i, L, nb_mot : Entier
phrase : Chane
Leon 5 : Les cha nes de car act r es
56
Dbut
Ecrire(Entrer une phrase non vide : ) Lire(phrase)
L Long(phrase)
nb_mot 1
Pour i de 1 L Faire
Si (phrase[i] = ) Alors
nb_mot nb_mot + 1
FinSi
FinPour
Ecrire(Nombre de mots = ,nb_mot)
Fin.
Exercice 5.4 : dtermination du mot le plus long dans une phrase
Algorithme Plus_Long_Mot
Variables
i, j, L : Entier
phrase, mot, motpl : Chane
Dbut
Ecrire(Entrer une phrase : ) Lire(phrase)
L Long(phrase)
motpl
i 1
TantQue (i <= L) Faire
mot
j i
TantQue ((j <= L) et (phrase[j] # )) Faire
mot mot + phrase[j]
j j + 1
FinTQ
Si (long(mot) > long(motpl)) Alors
motpl mot
FinSi
i j + 1
FinTQ
Ecrire(Le mot le plus long est = ,motpl)
Fin.
Leon 5 : Les cha nes de car act r es
57
Exercice 5.5 : nombre doccurrences dune lettre dans un mot
Algorithme frquence
Variables
i, L, nb : Entier
mot : Chane
lettre : Caractre
Dbut
Ecrire(Entrer un mot : ) Lire(mot)
Ecrire(Entrer une lettre : ) Lire(lettre)
L Long(mot)
nb 0
Pour i de 1 L Faire
Si (mot[i] = lettre) Alors
nb nb + 1
FinSi
FinPour
Ecrire(lettre, apparat ,nb, fois dans ,mot)
Fin.
Exercice 5. 6 : conversion dcimal binaire
Algorithme Decimal_Binaire
Variables
i, n, quotient, reste : Entier
c : Caractre
equiv : Chane
Dbut
Ecrire(Entrer votre entier : ) Lire(n)
equiv =
TantQue (n # 0) Faire
reste n Mod 2
convch(reste,c)
equiv c + equiv
n n Div 2
FinTQ
Ecrire(Nombre binaire quivalent = ,equiv)
Fin.
Leon 6 : Pr ocdur es et fonct i ons
58
Le on 6 : Pr oc dur es et f onct i ons
O b j e c t i f
Appliquer la dmarche de programmation modulaire pour construire des
algorithmes structurs en procdures et fonctions.
I. Introduction
Pour matriser la complexit dun problme, il est prfrable de procder
une conception modulaire qui consiste le dcomposer en plusieurs
sous-problmes. Ces sous-problmes peuvent leurs tours tre
dcomposs jusqu aboutir des traitements lmentaires simples.
Ensuite, chaque sous-problme sera rsolu par un sous-programme qui
peut tre une procdure ou une fonction.
A titre dexemple, un programme de gestion de scolarit peut tre
dcoup en plusieurs modules : inscription, suivi des absences, examens,
diplmes, etc. (figure 11).
Figure 11. Dcomposition dun programme en sous-programmes
Les modules dvelopps peuvent tre rutiliss plusieurs fois dans le
mme programme ou dans dautres programmes une fois intgrs des
bibliothques.
Inscription
Saisie des tudiants
Suivi des absences Examens
Attestation dinscritption
Diplmes
Gestion de scolarit

Leon 6 : Pr ocdur es et fonct i ons


59
II. Procdure simple
Une procdure est une structure de programme autonome qui permet
deffectuer une tche bien prcise et qui peut transmettre un certain
nombre de rsultats.
Exemple
Algorithme Proc (* version 1 *)
Constantes
titre = Turbo Pascal
Procdure trait
Variables
i : Entier
Dbut
Pour i de 1 12 Faire
Ecrire(-)
FinPour
Fin
Dbut
Ecrire(titre)
trait
Fin.
La procdure trait permet de souligner le titre Turbo Pascal.
Remarques
1. La structure dune procdure est anologue celle dun algorithme.
Elle possde une entte, une partie dclarative et un corps.
2. Pour appeler une procdure simple, il suffit dcrire le nom de cette
procdure.
3. Une ressource locale (prive) est dclare dans une procdure et ne
peut tre utilise qu lintrieur de celle-ci.
Exemple : i est une variable locale la procdure trait.
Leon 6 : Pr ocdur es et fonct i ons
60
4. Une ressource globale (publique) est dclare au dbut de
lalgorithme. Elle peut tre utilise dans le corps principal de
lalgorithme ou par les diffrents modules.
Exemple : titre est une constante globale.
Il est fortement recommand dutiliser autant que possible des variables
locales pour rendre les modules plus autonomes et par consquent
utilisables dans nimporte quel programme.
III. Procdure paramtre
Lors de lappel, il est souvent ncessaire dchanger des informations
entre la procdure et le programme ou le module appelant. Cest le rle
des paramtres.
A titre dexemple, la procdure trait de lalgorithme suivant permet
dafficher un trait dont la longueur effective est prcise lors de lappel,
ce qui permet de souligner nimporte quel titre :
Algorithme Proc (* version 2 *)
Variables
titre : Chane
L : Entier
Procdure Trait(n : entier)
Variables
i : Entier
Dbut
Pour i de 1 n Faire
Ecrire(-)
FinPour
Fin
Dbut
Ecrire(Entrer un titre : ) Lire(titre)
L Long(titre)
Ecrire(titre)
Trait(L)
Fin.
Remarques
Leon 6 : Pr ocdur es et fonct i ons
61
1. Lentte dune procdure paramtre comporte, en plus du nom de la
procdure, une liste de paramtres formels (fictifs) sous la forme
suivante :
Procdure Nom_Proc(pf1 : type 1 ; pf2 : type 2 ; ...)
2. Pour appeler une procdure paramtre, il faut crire le nom de la
procdure suivi dune liste de paramtres effectifs (rels) sous la
forme suivante :
Nom_Proc(pef1, pef2, ...)
Lors de lappel, il faut respecter le nombre, lordre et le type des
paramtres.
Exercice
Ecrire une procdure ReptCar qui permet dafficher un caractre un
certain nombre de fois.
Exemple : lappel de procdure ReptCar(,5) doit afficher *****.
Solution
Procdure ReptCar(c : Caractre ; n : Entier)
Variables
i : Entier
Dbut
Pour i de 1 n Faire
Ecrire(c)
FinPour
Fin
IV. Modes de passage de paramtres
La substitution des paramtres effectifs aux paramtres formels sappelle
passage de paramtres. Elle correspond un transfert dinformations
entre le programme ou le module appelant et la procdure appele.
Notons dabord que les paramtres dune procdure peuvent tre de type
donne, rsultat ou donne-rsultat.
Leon 6 : Pr ocdur es et fonct i ons
62
Un paramtre donne est une information ncessaire pour raliser
une tche. Il ne subit aucun changement au cours de lexcution de la
procdure.
Un paramtre rsultat est un aboutissement de laction, sa valeur
nest pas significative avant le dbut de lexcution de la procdure.
Un paramtre donne-rsultat est la fois une donne et un
rsultat, cest dire une information dont la valeur sera modifie par
la procdure.
Le tableau suivant indique pour chaque type de paramtre le sens de
transfert et le mode de passage utilis :
Type de paramtre Sens de transfert Mode de passage
Donne Programme Procdure Par valeur
Rsultat Programme Procdure Par variable
(par adresse) Donne-Rsultat Programme Procdure
En algorithmique, le mot Var insr devant un paramtre formel signifie
que ce paramtre est pass par variable (paramtre de type rsultat ou
donne-rsultat).
Exemple 1
Ecrire une procdure puissance qui calcule c = a
b
= a a a (b
fois) ; a et b tant des entiers positifs.
Solution
Procdure puissance(a, b : Entier ; Var c : Entier)
Variables
i : Entier
Dbut
c 1
Pour i de 1 b Faire
Puissance
a
b
c
Leon 6 : Pr ocdur es et fonct i ons
63
c c * a
FinPour
Fin.
Exemple 2
Ecrire une procdure permut qui permet dchanger les valeurs de 2
entiers a et b.
Solution
Procdure permut(Var a, b : Entier)
Variables
x : Entier
Dbut
x a
a b
b x
Fin.
Remarque
Dans le mode de passage par valeur, les modifications effectues sur le
paramtre formel naffectent pas la valeur du paramtre effectif (la
procdure travaille sur une copie de la variable) alors que dans le mode
de passage par variable, toute modification sur le paramtre formel
affecte galement le paramtre effectif correspondant (la procdure
travaille sur la copie originale).
Exercice
Faire la trace dexcution de lalgorithme suivant :
Algorithme Paramtre
Variables
i, j : Entier
Procdure transmission(a : Entier ; Var b : Entier)
Permut
a
b
a
b
Leon 6 : Pr ocdur es et fonct i ons
64
Dbut
a a + 100
b b + 100
Ecrire(a = ,a, b = ,b)
Fin
Dbut
i 1
j 2
transmission(i,j)
Ecrire(i = ,i, j = ,j)
Fin.
Solution
A la fin de lexcution de cet algorithme, on aura comme rsultat :
a = 101 b = 102
i = 1 j = 102
V. Les fonctions
V.1. Dfinition
Une fonction est une procdure particulire qui admet un seul paramtre
rsultat de type simple (entier, rel, caractre, etc.).
Une fonction possde un type qui est celui de son rsultat.
V.2. Structure dune fonction
Fonction Nom_Fonc(<paramtres formels>) : Type
Espace mmoire dfini
pour les variables du
programme principal
Espace mmoire dfini
pour les variables de la
procdure
i = 1
j = 2
102
a = 1
101
b = 2
102
Leon 6 : Pr ocdur es et fonct i ons
65
<Dclarations>
Dbut
<Squence dinstructions>
Nom_Fonc rsultat
Fin
Remarques
1. Le nom de la fonction joue un double rle, cest la fois lidentifiant
de la fonction et une variable locale.
2. Dans une fonction, le passage de tous les paramtres se fait par
valeur (tous les paramtres sont des donnes).
Exemple
Ecrire une fonction min qui retourne le minimum de 2 entiers a et b.
Solution
Fonction min(a, b : Entier) : Entier
Variables
c : Entier
Dbut
Si (a <= b) Alors
c a
Sinon
c b
FinSi
min c
Fin
V.3. Appel dune fonction
Lappel dune fonction se fait toujours dans une expression sous la
forme :
Nom_Fonc(<liste de paramtres effectifs>)
Exemples
x 3
y 5
z min(a,b)
z min(3,5)
Leon 6 : Pr ocdur es et fonct i ons
66
t (7 + min(x,y))/2
Ecrire(min(x,y))
Si (min(x,y) > 0) Alors
Exercice
Comment utiliser la fonction min pour afficher le minimum de 3 entiers
x, y et z en une seule instruction et sans utiliser de variables
supplmentaires ?
Solution
Ecrire(min(min(x,y),z))
EXERCICES DAPPLICATION
Exercice 6.1
1. On appelle bigramme une suite de deux lettres. Ecrire une procdure
qui calcule le nombre doccurrences dun bigramme dans une chane
de caractres.
2. Peut-on transformer cette procdure en fonction ? si oui crire cette
fonction.
Exercice 6.2
Ecrire une fonction Triangle qui permet de vrifier si les 3 nombres a, b
et c peuvent tre les mesures des cts dun triangle rectangle.
Remarque : Daprs le thorme de Pythagore, si a, b et c sont les
mesures des cts dun triangle rectangle, alors a
2
= b
2
+ c
2
ou b
2
= a
2
+ c
2
ou c
2
= a
2
+ b
2
.
Exercice 6.3
Ecrire une fonction PGCD_Euc qui retourne le PGCD de 2 entiers a et b
en utilisant lalgorithme dEuclide :
Leon 6 : Pr ocdur es et fonct i ons
67
Lalgorithme dEuclide consiste rpter plusieurs fois le traitement :
PGCD(a,b) = PGCD(b,a Mod b)
jusqu obtenir PGCD(x,0). Le PGCD est alors x.
Exemple : PGCD(36,16) = PGCD(16,4) = PGCD(4,0) = 4.
Leon 6 : Pr ocdur es et fonct i ons
68
SOLUTIONS DES EXERCICES
Exercice 6.1 : nombre doccurrences dun bigramme dans une chane
Procdure frqunece(bigram:Chane[2] ; chn :Chane ; Var nb : Entier)
Variables
i, L : Entier
Dbut
L Long(chn)
nb 0
Pour i de 1 (L-1) Faire
Si (chn[i]=bigram[1]) ET (chn[i+1]=bigram[2])
Alors
nb nb + 1
FinSi
FinPour
Fin
Cette procdure possde un seul paramtre rsultat de type entier, donc
elle peut tre remplace par une fonction.
Fonction frqunece(bigram:Chane[2] ; chn :Chane) : Entier
Variables
i, L : Entier
Dbut
L Long(chn)
nb 0
Pour i de 1 (L-1) Faire
Si (chn[i]=bigram[1]) et (chn[i+1]=bigram[2])
Alors
nb nb + 1
FinSi
FinPour
frquence nb
Fin
Exercice 6.2 : triangle rectangle
Leon 6 : Pr ocdur es et fonct i ons
69
Fonction triangle (a, b, c : Rel) : Boolen
Dbut
Si (a^2=b^2+c^2) OU (b^2=a^2+c^2) OU
(c^2=a^2+b^2) Alors
triange Vrai
Sinon
triangle Faux
FinSi
Fin
Exercice 6.3 : calcul du PGCD(a,b) par la mthode dEuclide
Fonction PGCD_Euc(a, b : Entier) : Entier
Variables
r : Entier
Dbut
TantQue (b # 0) Faire
r a Mod b
a b
b r
FinTQ
PGCD_Euc a
Fin
Leon 7 : Les t abl eaux
70
Le on 7 : Les t abl eaux
O b j e c t i f
Dvelopper des algorithmes de traitement de tableaux.
I. Introduction
Supposons que nous avons dterminer partir de 30 notes fournies en
entre, le nombre dtudiants qui ont une note suprieure la moyenne de
la classe.
Pour parvenir un tel rsultat, nous devons :
1. Lire les 30 notes
2. Dterminer la moyenne de la classe : m
3. Compter combien parmi les 30 notes sont suprieures la
moyenne m.
Il faut donc conserver les notes en mmoire afin quelles soient
accessibles durant lexcution du programme.
Solution 1 : utiliser 30 variables relles nommes x1, x2, , x30
Cette faon de faire prsente deux inconvnients :
- il faut trouver un nom de variable par note ;
- il nexiste aucun lien entre ces diffrentes valeurs. Or, dans
certains cas, on est appel appliquer le mme traitement
lensemble ou une partie de ces valeurs.
Solution 2 : utiliser la notion de tableau qui consiste :
- attribuer un seul nom lensemble des 30 notes, par exemple
Tnote,
- reprer chaque note par ce nom suivi entre crochets dun numro
entre 1 et 30 : Tnote[1], Tnote[2], Tnote[30].
II. Tableaux unidimensionnels
Leon 7 : Les t abl eaux
71
Un tableau une dimension, appel aussi vecteur, est une structure
de donnes constitue dun nombre fini dlments de mme type et
directement accessibles par leurs indices ou indexes.
II.1. Dclaration dun tableau
Pour dfinir une variable de type tableau, il faut prciser :
- le nom (identifiant du tableau)
- lindice (gnralement de type entier ou caractre)
- le type des lments (entier, rel, caractre, etc.)
on note :
Variables
Nom_tab : Tableau [PremInd..DernInd] de Type_lments
Exemple
Tnote : Tableau[1..30] de Rel
Schmatiquement, ce tableau peut tre reprsent comme suit :
Tnote 10.5 8 15
1 2 30
Remarque
Il est galement possible de dfinir un type tableau comme dans
lexemple suivant :
Constantes
n = 10
Types
Tab = Tableau[1..n] de Entier
Variables
T : Tab
Leon 7 : Les t abl eaux
72
II.2. Identification dun lment du tableau
Un lment dans un tableau est identifi de la faon suivante :
NomTab[position de llment]
Cela traduit bien laccs direct aux lments du tableau.
Ainsi, Tnote[3] dsigne la note du 3
me
tudiant et dune faon gnrale,
T[i] dsigne le i
me
lment du tableau T.
Lindice i peut tre une valeur, une variable ou une expression dont
la valeur appartient lintervalle des indices.
II.3. Remplissage dun tableau
Un tableau peut tre rempli lment par lment laide dune srie
daffectations :
T[1] Valeur 1
T[2] Valeur 2

T[n] Valeur n
Il est galement possible de lire les lments du tableau partir du
clavier grce une procdure :
Procdure remplir(Var T : tab)
Variables
i : Entier
Dbut
Pour i de 1 n Faire
Ecrire(Entrer un entier : )
Lire(T[i])
FinPour
Fin
Leon 7 : Les t abl eaux
73
II.4. Affichage des lments dun tableau
Laffichage des lments dun tableau se fait galement lment par
lment. Seulement, le tableau constitue ici un paramtre donn et non
pas un rsultat comme dans la procdure de remplissage.
Procdure afficher(T : tab)
Variables
i : Entier
Dbut
Pour i de 1 n Faire
Ecrire(T[i])
FinPour
Fin
Exercice
Soit T un tableau contenant n lments de type entier. Ecrire une fonction
MinTab qui retourne le plus petit lment de ce tableau.
Solution
On suppose initialement que le premier lment du tableau est le
minimum puis on le compare tous les autres lments. Chaque fois
quon trouve un lment qui lui est infrieur, ce dernier devient le
minimum.
Fonction MinTab(T : tab) : Entier
Variables
m,i : Entier
Dbut
m T[1]
Pour i de 2 n Faire
Si (T[i] < m) Alors
m T[i]
FinSi
FinPour
MinTab m
Fin
II.5. Recherche squentielle dun lment dans un tableau
Leon 7 : Les t abl eaux
74
Soit T un tableau contenant n lments de type entier.
On veut crire une procdure dont lentte sera :
Procdure recherche(T : Tab, x : Entier)
Cette procdure affiche :
lindice de la premire occurrence de x dans T si x T
le message lment introuvable si x T
Principe
Comparer x aux diffrents lments du tableau jusqu trouver x ou
atteindre la fin du tableau.
Procdure Recherche(T : Tab ; x : Entier)
Variables
i : Entier
Dbut
i 0
Rpter
i i + 1
Jusqu (T[i] = x) ou (i > n)
Si (T[i] = x) Alors
Ecrire(Indice = ,i)
Sinon
Ecrire(Elment introuvable)
FinSi
Fin
Leon 7 : Les t abl eaux
75
II.6. Algorithmes de tri
Il existe plusieurs mthodes de tri parmi lesquelles on peut citer :
- tri bulle
- tri par slection
- tri par insertion
- tri par comptage
- tri shell
- tri rapide (quick sort).
a- Tri bul l e
Soit T un tableau de n entiers. La mthode de tri bulles ncessite deux
tapes :
Parcourir les lments du tableau de 1 (n1) ; si llment i est
suprieur llment (i+1), alors on les permute.
Le programme sarrte lorsquaucune permutation nest
ralisable aprs un parcours complet du tabeau.
Procdure Tri_Bulle (Var T : Tab)
Variables
i, x : Entier
change : Boolen
Dbut
Rpter
change Faux
Pour i de 1 (n-1) Faire
Si (T[i] > T[i+1]) Alors
x T[i]
T[i] T[i+1]
T[i+1] x
change Vrai
FinSi
FinPour
Jusqu (change = Faux)
Fin
Trace dxcution
Leon 7 : Les t abl eaux
76
Tableau initial 6 4 3 5 2
Aprs la 1
re
itration 4 3 5 2 6
Aprs la 2
me
itration 3 4 2 5 6
Aprs la 3
me
itration 3 2 4 5 6
Aprs la 4
me
itration 2 3 4 5 6
b- Tri par sl ecti on (par mi ni mum)
Cest la mthode de tri la plus simple, elle consiste :
- chercher lindice du plus petit lment du tableau T[1..n] et
permuter llment correspondant avec llment dindice 1
- chercher lindice du plus petit lment du tableau T[2..n] et
permuter llment correspondant avec llment dindice 2
-
- chercher lindice du plus petit lment du tableau T[n-1..n] et
permuter llment correspondant avec llment dindice (n-1).
Procdure Tri_Selection(Var T : Tab)
Variables
i, j, x, indmin : Entier
Dbut
Pour i de 1 (n-1) Faire
indmin i
Pour j de (i+1) n Faire
Si (T[j] < T[indmin]) Alors
indmin j
FinSi
FinPour
x T[i]
T[i] T[indmin]
T[indmin] x
FinPour
Fin
Trace dxcution
Tableau initial 6 4 2 3 5
Leon 7 : Les t abl eaux
77
Aprs la 1
re
itration 2 4 6 3 5
Aprs la 2
me
itration 2 3 6 4 5
Aprs la 3
me
itration 2 3 4 6 5
Aprs la 4
me
itration 2 3 4 5 6
c- Tri par i nserti on
Cette mthode consiste prendre les lments de la liste un par un et
insrer chacun dans sa bonne place de faon que les lments traits
forment une sous-liste trie.
Pour ce faire, on procde de la faon suivante :
- comparer et permuter si ncessaire T[1] et T[2] de faon placer
le plus petit dans la case dindice 1
- comparer et permuter si ncessaire llment T[3] avec ceux qui
le prcdent dans lordre (T[2] puis T[1]) afin de former une
sous-liste trie T[1..3]
-
- comparer et permuter si ncessaire llment T[n] avec ceux qui
le prcdent dans lordre (T[n-1], T[n-2], ) afin dobtenir un
tableau tri.
Procdure Tri_Insertion(Var T : Tab)
Variables
i, j, x, pos : Entier
Dbut
Pour i de 2 n Faire
pos i - 1
TantQue (pos>=1) et (T[pos]>T[i]) Faire
pos pos 1
FinTQ
pos pos + 1
x T[i]
Pour j de (i-1) pos [pas = -1] Faire
T[j+1] T[j]
Leon 7 : Les t abl eaux
78
FinPour
T[pos] x
FinPour
Fin
[Pas = -1] signifie que le parcours se fait dans le sens dcroissant.
Trace dxcution
Tableau initial 6 4 3 5 2
Aprs la 1
re
itration 4 6 3 5 2
Aprs la 2
me
itration 3 4 6 5 2
Aprs la 3
me
itration 3 4 5 6 2
Aprs la 4
me
itration 2 3 4 5 6
II.7. Recherche dichotomique
Soit T un tableau contenant n lments tris dans le sens croissant :
T 1 3 5 5 8
1 2 3 4 5
i [1 , n-1], T[i] <= T[i+1]
On veut crire une procdure dont lentte est de la forme :
Procdure Rechdicho(T : tab ; x : Entier)
et qui affiche lindice de la premire apparition de x dans le tableau sil
existe. Sinon, elle affiche le message lment introuvable.
Principe
Le but de la recherche dichotomique est de diviser lintervalle de
recherche par 2 chaque itration. Pour cela, on procde de la faon
suivante :
Leon 7 : Les t abl eaux
79
Soient premier et dernier les extrmits gauche et droite de lintervalle
dans lequel on cherche la valeur x, on calcule M, lindice de llment
mdian :
M = (premier + dernier) div 2
Il y a 3 cas possibles :
x = T[M] : llment de valeur x est trouv, la recherche est
termine
x < T[M] : llment x, sil existe, se trouve dans lintervalle
[premier..M-1]
x > T[M] : llment x, sil existe, se trouve dans lintervalle
[M+1..dernier]
La recherche dichotomique consiste itrer ce processus jusqu ce que
lon trouve x ou que lintervalle de recherche soit vide.
Procdure Rechdicho(T : Tab , x : entier)
Variables
premier, milieu, dernier : Entier
trouve : Boolen
Dbut
premier 1
dernier n
trouve Faux
Rpter
milieu (premier + dernier) div 2
Si (x < T[milieu]) Alors
dernier milieu 1
Sinon
Si (x > T[milieu]) Alors
premier milieu + 1
Sinon
trouve Vrai
FinSi
FinSi
Jusqu (trouve = Vrai) ou (premier > dernier)
Si (trouve = Vrai) Alors
Leon 7 : Les t abl eaux
80
Ecrire(Indice = ,milieu)
Sinon
Ecrire(Elment introuvable)
FinSi
Fin.
Evaluation de lalgorithme
Dans le cas le plus dfavorable, lalgorithme se termine lorsque le
nombre dlments p prsents dans lintervalle [premier .. dernier]
devient nul. A chaque itration, p est au moins divis par 2. On est donc
certain dobtenir le rsultat en au plus i itrations tel que n = 2
i
. Do
i=log
2
n (fonction inverse).
titre dexemple, si le tableau tri contient 1024 lments, il faudra au
plus 1025 itrations avec lalgorithme squentiel et au plus 10 avec
lalgorithme dichotomique.
III. Tableaux multidimensionnels
Les tableaux multidimensionnels sont des tableaux qui contiennent des
tableaux. Par exemple, le tableau bidimensionnel (3 lignes et 4 colonnes)
suivant est en fait un tableau comportant 3 lments, chacun dentre eux
tant un tableau de 4 lments :
1 2 3 4
1
2
3
Leon 7 : Les t abl eaux
81
Cette matrice peut tre dfinie de la faon suivante :
Types
Mat : Tableau[1..3,1..4] de Rel
Variables
Matrice : Mat
Chaque lment de la matrice est repr par deux indices :
- le premier indique le numro de la ligne
- le second indique le numro de la colonne.
Ainsi, Matrice[2,4] dsigne llment situ la 2
me
ligne et la 4
me
colonne.
Remarque
Cette reprsentation est arbitraire, on a pu considrer que le premier
indice dsigne la colonne et le second dsigne la ligne. Dans ce cas,
llment Matrice[2,4] nexiste plus.
III.1. Remplissage dun tableau deux dimensions
Le remplissage dun tableau bidimensionnel n lignes et m colonnes se
fait peu prs de la mme faon quun tableau unidimensionnel.
Seulement, il est ncessaire dutiliser deux boucles imbriques
correspondant chacune lindice dune dimension :
Procdure remplir(Var matrice : Mat)
Variables
i, j : Entier
Dbut
Pour i de 1 n Faire
Pour j de 1 m Faire
Ecrire(Entrer un entier :)
Lire(Matrice[i,j])
FinPour
FinPour
Fin
Leon 7 : Les t abl eaux
82
III.2. Transposition dune matrice carre
Une matrice carre est une matrice n lignes et n colonnes.
Lopration de transposition consiste inverser les lignes et les colonnes
en effectuant une symtrie par rapport la diagonale principale de la
matrice.
Exemple
1 2 3 1 4 7
M 4 5 6 Devient 2 5 8
7 8 9 3 6 9
Procdure Transpose(Var M : Mat)
Variables
i, j, x : Entier
Dbut
Pour i de 1 n Faire
Pour j de (i+1) n Faire
x M[i,j]
M[i,j] M[j,i]
M[j,i] x
FinPour
FinPour
Fin
III.3. Somme de deux matrices
Soient M1 et M2 deux matrices n lignes et m colonnes.
On veut crire une procdure qui calcule les lments de la matrice
M3=M1+M2
Exemple
M1
1 2 3
M2
2 5 3
donnent M3 =
3 7 6
4 5 6 3 0 1 7 5 7
Procdure SomMat(M1, M2 : Mat ; Var M3 : Mat)
Leon 7 : Les t abl eaux
83
Variables
i, j : Entier
Dbut
Pour i de 1 n Faire
Pour j de 1 m Faire
M3[i,j] M1[i,j]+ M2[i,j]
FinPour
FinPour
Fin
III.4. Produit de deux matrices
Soient M1 une matrice ayant n lignes et m colonnes
M2 une matrice ayant m lignes et p colonnes
On veut crire une procdure qui calcule les lments de la matrice
M3=M1M2.
Notons dabord que le nombre de colonnes de M1 doit tre gal au
nombre de lignes de M2.
Le produit M3 = M1 M2 est dfini comme une matrice ayant n lignes et
p colonnes et dont les lments sont calculs par la formule :
j m, m i, j 2, i,2 j 1, i,1 j i,
M2 M1 ... M2 M1 M2 M1 M3 + + +
soit

m
1 k
j K, k i, j i,
M2 M1 M3
o M1
i,k
, M2
k,j
et M3
i,j
sont respectivement les lments des matrices M1,
M2 et M3.
Exemple
M1
1 2 3
M2
2 1
donnent M3 =
11 13
4 0 5 3 0 13 24
1 4
Procdure ProdMat(M1 : Mat1; M2 : Mat2; Var M3 : Mat3)
Leon 7 : Les t abl eaux
84
Variables
i, j, k : Entier
Dbut
Pour i de 1 n Faire
Pour j de 1 p Faire
M3[i,j] 0
Pour k de 1 mFaire
M3[i,j]M3[i,j]+M1[i,k]*M2[k,j]
FinPour
FinPour
FinPour
Fin
EXERCICES DAPPLICATION
Exercice 7.1
Soit T un tableau contenant n lments de type entier et x un entier
quelconque.
Ecrire une fonction Frquence(T : Tab ; x : Entier) : Entier qui
retourne le nombre dapparitions de x dans le tableau T.
Exercice 7.2
Ecrire une procdure permettant dclater un tableau T dentiers en deux
tableaux :
- TP qui contiendra les lments positifs de T
- TN qui contiendra les lments ngatifs de T.
Exercice 7.3
Un instituteur cherche vrifier si ses lves ont appris rciter
lalphabet lettre par lettre dans lordre. Pour ceci, Il vous demande de lui
dvelopper lalgorithme dun programme permettant dvaluer chaque
lve de la faon suivante :
Leon 7 : Les t abl eaux
85
1- Le programme demande chaque lve de remplir un tableau nomm
rponse par les lettres de lalphabet dans lordre
2- Ensuite, le programme examine ce tableau lment par lment :
- Si la lettre est dans sa place, il laccepte
- Sinon, il la remplace par la lettre adquate et incrmente le
nombre de fautes
3- Enfin, le programme affiche le nombre total de fautes.
Exercice 7.4 : produit scalaire de 2 vecteurs
Ecrire une fonction ProdScal qui calcule le produit scalaire de deux
vecteurs U et V reprsents par deux tableaux.
Le produit scalaire de deux vecteurs :
U = (x
1
, x
2
,, x
n
) et V = (y
1
, y
2
,, y
n
)
est dfini par :
U.V = x
1
y
1
+ x
2
y
2
+ + x
n
y
n
=

n
1 i
i i
y x
Exercice 7.5 : norme dun vecteur
Ecrire une fonction NormVect qui calcule la norme dun vecteur et qui
utilise la fonction ProdScal de lexercice prcdent.
La norme dun vecteur U = (x
1
, x
2
,, x
n
)
est dfini par :
2
n
2
2
2
1
x ... x x U + + +
Exercice 7.6
Ecrire une procdure qui permet de remplir un tableau Fib par les 10
premiers termes de la suite de Fibonacci.
La suite de Fibonacci est dfinie par :
F
0
= 1
F
1
= 1
Leon 7 : Les t abl eaux
86
F
n
= F
n-2
+ F
n-1
pour n >1
Exercice 7.7
Ecrire un algorithme permettant de trouver tous les nombres premiers
infrieurs 400 et qui utilise la mthode suivante :
Crer un tableau T pouvant contenir 400 entiers
Initialiser chaque lment du tableau son indice cest--dire
T[1]=1 ; T[2]=2 ; T[400]=400
Remplacer tous les multiples de 2 par 0 sauf 2
Chercher le prochain lment diffrent de 0 dans le tableau cest
dire T[3] et remplacer tous les multiples de 3 par 0 sauf 3
Continuer ce processus jusqu avoir T[i] 20 (20 tant la racine
carre de 400)
Afficher tous les lments non nuls de T.
Exercice 7.8 : compression dun vecteur
Soit un vecteur U1 de composantes x
1
, x
2
, , x
n
non nulles et un vecteur
L de mme longueur dont les composantes sont 0 ou 1.
Ecrire une procdure qui fait la compression de U1 par L. Le rsultat est
un vecteur U2 dont les composantes sont, dans lordre, celles de U1 pour
lesquelles la composante de L vaut 1.
Exemple
U1 1 2 3 4 5 6 7
L 0 1 1 0 1 0 1
U2 2 3 5 7 0 0 0
Leon 7 : Les t abl eaux
87
Exercice 7.9 : recherche de la plus grande monotonie dans un tableau
Soit un tableau T de n lments, dterminer la longueur de la premire
plus longue squence de nombres rangs par ordre croissant et le rang de
son premier lment.
Exercice 7.10 : fusion de deux tableaux tris
Ecrire une procdure qui permet de fusionner deux tableaux tris A et B
contenant respectivement n et m lments. Le rsultat est un tableau tri
C (n+m) lments.
Exemple :
A 1 20 41 B 19 23 27 54 91
C 1 19 20 23 27 41 54 91
Exercice 7.11
Etant donn un tableau A de n nombres tris par ordre croissant. Ecrire
un algorithme qui permet de lire un rel R et linsrer dans sa bonne
position. Le rsultat sera un deuxime tableau B de longueur (n+1) et qui
est galement tri par ordre croissant.
Exemple :
A 1 2 5 8 10 25 R = 6
B 1 2 5 6 8 10 25
Exercice 7.12 : triangle de Pascal
Crer un tableau deux dimensions qui contiendra les n premires lignes
du triangle de Pascal.
Chaque lment du triangle de pascal est obtenu par la formule :
T[L,C] = T[L-1,C-1] + T[L-1,C]
Leon 7 : Les t abl eaux
88
A titre dexemple, pour n = 6, le triangle de pascal est :
1 0 0 0 0 0
1 1 0 0 0 0
1 2 1 0 0 0
1 3 3 1 0 0
1 4 6 4 1 0
1 5 10 10 5 1
Exercice 7.13 : la tour sur un chiquier
Sur un chiquier, cest--dire un tableau de 8 lignes et 8 colonnes, partir
dune case quelconque, marquer toutes les cases susceptibles dtre
atteintes en un coup par une tour. Au terme de lexcution, les cases
atteintes contiendront la valeur 1, les autres la valeur 0.
La tour peut se dplacer sur la ligne et sur la colonne correspondantes la
case o elle est situe.
Exemple
Si la tour se trouve la case (L=2 , C=3), le tableau final aura lallure
suivante :
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
0 0 1 0 0 0 0 0
0 0 1 0 0 0 0 0
0 0 1 0 0 0 0 0
Leon 7 : Les t abl eaux
89
Exercice 7.14 : le fou sur un chiquier
Sur un chiquier, cest--dire un tableau de 8 lignes et 8 colonnes, partir
dune case quelconque, marquer toutes les cases susceptibles dtre
atteintes en un coup par un fou. Au terme de lexcution, les cases
atteintes contiendront la valeur 1, les autres la valeur 0.
Le fou peut se dplacer sur les diagonales issues de la case o il est situ.
Exemple
Si le fou se trouve la case (L=4 , C=3), le tableau final aura lallure
suivante :
0 0 0 0 0 1 0 0
1 0 0 0 1 0 0 0
0 1 0 1 0 0 0 0
0 0 1 0 0 0 0 0
0 1 0 1 0 0 0 0
1 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0
0 0 0 0 0 0 1 0
Remarque
Pour toutes les cases qui peuvent tre atteintes par le fou, lune des 2
relations suivantes est vrifie :
L C = 4 - 3 = 1
L + C = 4 + 3 = 7
Exercice 7.15 : le carr magique
Dans un tableau carr N lignes et N colonnes (N impair) ranger les
nombres entiers de 1 N
2
de manire ce que la somme des lments de
chaque ligne soit gale la somme des lments de chaque colonne et
la somme des lments de chaque diagonale.
Leon 7 : Les t abl eaux
90
Exemple
Le principe expos ci-aprs est lune des mthodes de cration dun carr
magique :
Pour commencer, 1 est plac dans la case centrale de la premire
ligne ;
Ensuite, les entiers de 2 N
2
sont placs les uns aprs les autres dans
les cases dune diagonale oriente nord-ouest.
Plusieurs cas particuliers peuvent se prsenter :
- Si on tombe hors du carr en haut, le nombre est plac dans la
dernire ligne sans changer de colonne ;
- Si on tombe hors du carr gauche, le nombre est plac dans la
colonne de droite sans changer de ligne ;
- Si on tombe sur une case dj occupe, le nombre est plac sous la
case prcdemment remplie. A chaque fois quun multiple de N est
plac dans une case, la case destine au nombre suivant est
normalement occupe.
6 1 8
T 7 5 3 est un carr magique dont somme S est 15
2 9 4
Leon 7 : Les t abl eaux
91
SOLUTIONS DES EXERCICES
Exercice 7.1 : frquence dapparition de x dans le tableau T
Fonction Frquence(T : Tab ; x : Entier) : Entier
Variables
i, cpt : Entier
Dbut
cpt 0
Pour i de 1 n Faire
Si (T[i] = x) Alors
cpt cpt + 1
FinSi
FinPour
Frquence cpt
Fin
Exercice 7.2 : clatement dun tableau
Procdure Eclater(T : Tab ; Var TP, TN : Tab)
Variables
i, j, k : Entier
Dbut
i 1 j 1 k 1
Pour i de 1 n Faire
Si (T[i] > 0) Alors
TP[j] T[i]
j j + 1
FinSi
Si (T[i] < 0) Alors
TN[k] T[i]
k k + 1
FinSi
Si (T[i] = 0) Alors
TP[j] T[i]
j j + 1
TN[k] T[i]
Leon 7 : Les t abl eaux
92
k k + 1
FinSi
FinPour
Fin
Exercice 7.3
Algorithme Alphabet
Constantes
n = 26
Types
Tab = Tableau[1..n] de Caractre
Variables
rponse : Tab
i, nb_fautes : Entier
Procdure Remplir(Var T : Tab)
Dbut
Pour i de 1 n Faire
Ecrire(Entrer un caractre :) Lire(T[i])
FinPour
Fin
Procdure Corriger(Var T : Tab ; Var nb : Entier)
Dbut
nb 0
Pour i de 1 n Faire
Si (Majus(T[i]) # Car(i+64)) Alors
T[i] Car(i+64)
nb nb + 1
FinSi
FinPour
Fin
Dbut
remplir(rponse)
corriger(rponse, nb_fautes)
Ecrire(Nombre de fautes : ,nb_fautes)
Fin.
Exercice 7.4 : calcul du produit scalaire de deux vecteurs
Leon 7 : Les t abl eaux
93
Fonction ProdScal(U : Tab ; V : Tab) : Rel
Variables
i : Entier
ps : Rel
Dbut
ps 0
Pour i de 1 n Faire
ps ps + U[i] * V[i]
FinPour
ProdScal ps
Fin
Exercice 7.5 : calcul de la norme dun vecteur
Fonction NormVect(U : Tab) : Rel
Dbut
NormVect Racine(ProdScal(U,U))
Fin
Exercice 7.6 : les 10 premiers termes de la suite de Fibonacci (de 0 9)
Procdure Fibonacci(Var fib : Tab)
Variables
i : Entier
Dbut
fib[0] 1
fib[1] 1
Pour i de 2 9 Faire
fib[i] fib[i-2] + fib[i-1]
FinPour
Fin
Leon 7 : Les t abl eaux
94
Exercice 7.7 : nombres premiers infrieurs 400
Algorithme Premiers
Constantes
n = 400
Types
Tab = Tableau[1..n] de Entier
Variables
Prem : Tab
i, j : Entier
Procdure initialiser(Var T : Tab)
Dbut
Pour i de 1 n Faire
T[i] i
FinPour
Fin
Procdure mise_a_zero(Var T : Tab)
Dbut
Pour i de 1 20 Faire
Si (T[i] # 0) Alors
Pour j de i+1 n Faire
Si (T[j] Mod T[i] = 0) Alors
T[j] 0
FinSi
FinPour
FinSi
FinPour
Fin
Procdure afficher(T : Tab)
Dbut
Pour i de 1 n Faire
Si (T[i] # 0) Alors
Ecrire(T[i])
FinSi
FinPour
Fin
Dbut
initialiser(Prem)
mise_a_zero(Prem)
afficher(Perm)
Fin.
Exercice 7.8 : compression dun vecteur
Leon 7 : Les t abl eaux
95
Procdure Compression(U1, L : Tab ; Var U2 : Tab)
Variables
i, j : Entier
Dbut
j 1
Pour i de 1 n Faire
Si (L[i] # 0) Alors
U2[j] U1[i]
j j+1
FinSi
FinPour
Pour i de (j+1) n Faire
U2[i] 0
FinPour
Fin.
Exercice 7.9 : recherche de la plus grande monotonie dans un tableau
Procdure Monotonie(T : Tab ; Var iplm, Lplm : Entier)
Variables
i, j, L : Entier
Dbut
i 1
Lplm 1
iplm 1
TantQue (i <= n) Faire
j i + 1
TantQue (T[j] >= T[j-1]) Faire
j j + 1
FinTQ
L j i + 1
Si (L > Lplm) Alors
iplm i
Lplm L
FinSi
i j
FinTQ
Fin
Exercice 7.10 : fusion de 2 tableaux tris
Procdure Fusion(A : Tab1 ; B : Tab2 ; Var C : Tab3)
Leon 7 : Les t abl eaux
96
Variables
i, j, k : Entier
Dbut
i 1 j 1 k 1
TantQue (i <= n) et (j <= m) Faire
Si (A[i] <= B[j]) Alors
C[k] A[i]
i i + 1
k k + 1
FinSi
Si (B[j] <= A[i]) Alors
C[k] B[j]
j j + 1
k k + 1
FinSi
FinTQ
TantQue (i <= n) Faire
C[k] A[i]
i i + 1
k k + 1
FinTQ
TantQue (j <= m) Faire
C[k] B[j]
j j + 1
k k + 1
FinTQ
Fin
Leon 7 : Les t abl eaux
97
Exercice 7.11 : insertion dun lment dans un tableau tri
Procdure Insertion(A : Tab1; R : Entier; Var B : Tab2)
Variables
i, j : Entier
Dbut
i 1
TantQue (A[i] <= R) et (i <= n) Faire
B[i] A[i]
i i + 1
FinTQ
B[i] R
i i + 1
TantQue (i <= n) Faire
B[i] A[i]
i i + 1
FinTQ
Fin
Exercice 7.12 : triangle de Pascal
Procdure Pasc(n:Entier; Var T:Tableau[1..n,1..n] de Entier)
Variables
i, j : Entier
Dbut
(* Initialisation du tableau zro *)
Pour i de 1 n Faire
Pour j de 1 n Faire
T[i,j] 0
FinPour
FinPour
(* Remplissage du tableau *)
Pour i de 1 n Faire
T[i,1] 1
Pour j de 2 i Faire
T[i,j] T[i-1,j-1] + T[i-1,j]
FinPour
FinPour
Fin
Leon 7 : Les t abl eaux
98
Exercice 7.13 : la tour sur un chiquier
Procdure tour(L,C : Entier ; Var T : Tableau[1..8,1..8] de Entier)
Variables
i, j : Entier
Dbut
Pour i de 1 8 Faire
Pour j de 1 8 Faire
Si (i = L) OU (j = C) Alors
T[i,j] 1
Sinon
T[i,j] 0
FinSi
FinPour
FinPour
Fin
Exercice 7.14 : le fou sur un chiquier
Procdure fou(L,C : Entier ; Var T : Tableau[1..8,1..8] de Entier)
Variables
i, j : Entier
Dbut
Pour i de 1 8 Faire
Pour j de 1 8 Faire
Si (i-j = L-C) OU (i+j = L+C) Alors
T[i,j] 1
Sinon
T[i,j] 0
FinSi
FinPour
FinPour
Fin
Leon 7 : Les t abl eaux
99
Exercice 7.15 : le carr magique
Procdure carr(n : Entier; Var T: Tableau[1..n,1..n] de Entier)
Variables
i, j, L, C : Entier
Dbut
(* mettre 1 dans la case centrale de la 1re ligne *)
C (n + 1) Div 2
T[1,C] 1
(* remplissage du reste du tableau *)
i 1
L 1
TantQue (i <= n^2) Faire
Si (i Mod n = 0) Alors (* case occupe *)
L L + 1
Sinon
Si (L = 1) Alors (* dbordement de ligne *)
L n
Sinon
L L 1
FinSi
Si (C = 1) Alors (* dbordement de colonne *)
C n
Sinon
C C 1
FinSi
FinSi
i i + 1
T[L,C] i
FinTQ
Fin
Leon 8 : Les enr egi st r ement s
100
Le on 8 : Les enr egi st r ement s
O b j e c t i f
Manipuler correctement des variables de type enregistrement.
I. Notion denregistrement
Les variables que nous avons jusqu prsent utilises ne se constituent
que dun seul type de donnes (Entier, Rel, Caractre, etc.).
Les tableaux constituent une extension puisque nous y dclarons une
variable compose de plusieurs lments de mme type.
Un enregistrement (ou article) permet de rassembler un ensemble
dlments de types diffrents sous un nom unique. On dfinit ainsi un
type compos.
A titre dexemple, une date, une adresse ou nombre complexe peuvent
tre considrs comme des enregistrements.
II. Dclaration des variables de type enregistrement
Un enregistrement peut tre dfini par une dclaration de type contenant
une liste de champs prcde par le mot Struct et termine par FinStruct.
Exemples
Dfinition dune adresse :
Types
Adresse = Struct
Rue : Chane
Ville : Chane
CP : Entier
FinStruct
Variables
Adr : Adresse
Dfinition dun produit :
Leon 8 : Les enr egi st r ement s
101
Types
Produit = Struct
Codp : Entier
Libell : Chane
Prix_Unit : Rel
Stock : Rel
FinStruct
Variables
P1, P2 : Produit
Exercice
Dfinir le type nombre complexe.
Solution
Types
Complexe = Struct
Reel : Rel
Imag : Rel
FinStruct
Variables
C : Complexe
III. Manipulation des variables de type enregistrement
Les enregistrements ne peuvent tre rfrencs globalement dans une
instruction car ils sont composs dlments de types diffrents. Par
contre, il est possible de faire rfrence chaque lment dun
enregistrement.
Pour cela, il est ncessaire de prciser le nom (identificateur) de
lenregistrement, suivi dun suffixe indiquant lidentificateur du champ
concern. Les deux identificateurs sont spars par un point.
Leon 8 : Les enr egi st r ement s
102
Exemple
Adr.Rue Ibn Rochd
Adr.Ville Monastir
Adr.CP 5000
Remarque
Il est possible dutiliser loprateur daffectation entre deux
enregistrements de mme type comme dans lexemple suivant :
P1 P2
{
P1.Codp P2.Codp
P1.Libell P2.Libell
P1.Prix_Unit P2.Prix_Unit
P1.Stock P2.Stock
De mme, on peut effectuer une comparaison galitaire ou ingalitaire
entre deux enregistrements de mme type comme dans les 2 exemples
suivants :
Si (P1 = P2) Alors
TantQue (P1 # P2) Faire
EXERCICES DAPPLICATION
Exercice 8.1
Ecrire un algorithme qui lit deux nombres complexes C1 et C2 et qui
affiche ensuite leur somme et leur produit.
On utilisera les formules de calcul suivantes :
(a + bi) + (c + di) = (a + c) + (b + d)i
(a + bi) (c + di) = (ac - bd) + (ad + bc)i
Leon 8 : Les enr egi st r ement s
103
Exercice 8.2
Crer un tableau TabEmp qui contiendra les informations sur les 50
employs dune entreprise (Matricule, Nom, Salaire, Etat_Civil), le
remplir puis afficher le nombre demploys dont le salaire est compris
entre 500 et 700 D.
Leon 8 : Les enr egi st r ement s
104
SOLUTIONS DES EXERCICES
Exercice 8.1 : somme et produit de deux nombres complexes
Algorithme CalculComplexe
Types
Complexe = Struct
Reel : Rel
Imag : Rel
FinStruct
Variables
C1, C2, S, P : Complexe
Dbut
Ecrire(Partie relle du 1er nombre : )
Lire(C1.Reel)
Ecrire(Partie imaginaire du 1er nombre : )
Lire(C1.Imag)
Ecrire(Partie relle du 2me nombre : )
Lire(C2.Reel)
Ecrire(Partie imaginaire du 2me nombre : )
Lire(C2.Imag)
S.Reel C1.Reel + C2.Reel
S.Imag C1.Imag + C2.Imag
Ecrire(Somme = ,S.Reel, +,S.Imag, i)
P.Reel (C1.Reel*C2.Reel) (C1.Imag*C2.Imag)
P.Imag (C1.Reel*C2.Imag) + (C1.Imag*C2.reel)
Ecrire(Produit = ,P.Reel, +,P.Imag, i)
Fin.
Exercice 8.2 : tableau des employs
Algorithme Personnel
Constantes
n = 50
Types
Employ = Struct
Matricule : Entier
Nom : Chane
Sal : Rel
Etat_Civil : Caractre
FinStruct
Tab = Tableau[1..n] de Employ
Variables
TabEmp : Tab
Leon 8 : Les enr egi st r ement s
105
i, nb : Entier
Procdure remplir(Var T : Tab)
Dbut
Pour i de 1 n Faire
Ecrire(Matricule de lemploy : )
Lire(T[i].Matricule)
Ecrire(Nom de lemploy : )
Lire(T[i].Nom)
Ecrire(Salaire de lemploy : )
Lire(T[i].Sal)
Ecrire(Etat civil de lemploy : )
Lire(T[i].Etat_Civil)
FinPour
Fin
Fonction compter(T : Tab) : Entier
Dbut
Compter 0
Pour i de 1 n Faire
Si (T[i].Sal >= 500) ET (T[i].sal <= 700) Alors
Compter Compter + 1
FinSi
FinPour
Fin
Dbut
Remplir(TabEmp)
nb Compter(TabEmp)
Ecrire(nb, employs touchent entre 500 et 700 D)
Fin.
Leon 9 : Les fi chi er s squent i el s
106
Le on 9 : Les f i c hi er s squent i el s
O b j e c t i f s
- Comprendre les concepts de base relatifs aux fichiers
- Manipuler des fichiers organisation squentielle.
I. Notion de fichier
Dans tous les programmes que nous avons jusqu prsent dvelopps le
stockage des donnes se fait en mmoire vive qui est volatile et de
capacit limite. Or, la plupart des applications ncessitent une
sauvegarde permanente des donnes.
Pour viter la perte de ces informations au dbranchement de
lordinateur, on utilise des fichiers.
I.1 . Dfinition
Un fichier est une structure de donnes forme de cellules contigus
permettant limplantation dune suite de donnes en mmoire secondaire
(disque, disquette, CD-ROM, bande magntique, etc.)
Chaque lment de la suite est appel article et correspond gnralement
un enregistrement.
Exemples :
liste des tudiants dune institution
tat des produits stocks dans un magasin
liste des employs dune entreprise.
Leon 9 : Les fi chi er s squent i el s
107
I.2. Elments attachs un fichier
On appelle nom interne dun ficher le nom sous lequel un fichier est
identifi dans un programme.
On appelle nom externe dun fichier le nom sous lequel le fichier est
identifi en mmoire secondaire. Ce nom est compos de trois
parties:
- lidentifiant du support
- le nom du fichier proprement dit
- une extension (ou suffixe) qui prcise le genre du fichier
(donne, texte, programme, etc.)
Ainsi, A:nombres.DAT dsigne un fichier de donnes stock sur la
disquette et qui sappelle nombres.
On appelle tampon ou buffer dun fichier, une zone de la mmoire
principale pouvant contenir un enregistrement du fichier. Cest une
fentre travers laquelle on voit le fichier.
Un fichier possde toujours un enregistrement supplmentaire la fin
appel marque de fin de fichier (FDF) permettant de le borner (fig.
12) :
Ficher FDF
Figure 12. Structure dun fichier
Chaque fichier est caractris par :
- un mode dorganisation : squentielle, squentielle indexe,
relative ou slective.
- un mode daccs : squentiel ou direct
Tampon ou Fentre
Leon 9 : Les fi chi er s squent i el s
108
Un fichier organisation squentielle (F.O.S) ne permet que laccs
squentiel : pour atteindre larticle de rang n, il est ncessaire de parcourir
les (n-1) articles prcdents.
Laccs direct se fait soit en utilisant le rang de lenregistrement (cas de
lorganisation relative) comme dans les tableaux, soit en utilisant une cl
permettant didentifier de faon unique chaque enregistrement (cas de
lorganisation squentielle indexe et slective).
Remarque
Les caractristiques dun fichier sont troitement lies aux langages de
programmation qui offrent chacun diffrents types de fichiers.
II. Dclaration dun fichier organisation squentielle
Pour dclarer une variable de type fichier, il faut spcifier :
- le nom du fichier
- le type des lments du fichier
Exemple
Types
Etudiant = Struct
Numro : Entier
Nom : Chane[30]
Prnom : Chane[30]
Classe : Chane[5]
FinStruct
Fetud = Fichier de Etudiant
Variables
Fe : Fetud
et : Etudiant (* variable tampon *)
Leon 9 : Les fi chi er s squent i el s
109
III. Manipulation des fichiers organisation squentielle
Toute manipulation dun fichier ncessite 3 phases :
1- Ouverture du fichier :
Ouvrir(NomFichier, mode)
Un fichier peut tre ouvert en mode lecture (L) ou en mode criture (E).
Aprs louverture, le pointeur pointe sur le premier enregistrement du
fichier.
2- Traitement du fichier :
Lire(NomFichier, fentre)
Cette primitive a pour effet de copier lenregistrement actuel dans la
fentre du fichier. Aprs chaque opration de lecture, le pointeur passe
lenregistrement suivant. Si on veut lire une information en amont du
pointeur, il faut rouvrir le fichier et le lire jusqu linformation dsire.
Ecrire(NomFichier, fentre)
Cette primitive a pour effet de copier le contenu de la fentre sur le
fichier en mmoire secondaire. Dans un fichier organisation
squentielle, lajout dun nouveau article se fait toujours en fin de fichier.
3- Fermeture du fichier :
Fermer(NomFichier)
Leon 9 : Les fi chi er s squent i el s
110
Remarque
La fonction boolenne FDF(NomFichier) permet de tester si la fin du
fichier est atteinte. Sa valeur est dtermine par le dernier ordre de lecture
excut.
III.1. Cration dun Fichier organisation squentielle
Ecrire une procdure permettant de crer et remplir le fichier des
tudiants.
Procdure Cration(Var fe : Fetud)
Variables
et : Etudiant
Dbut
Ouvrir(fe,E)
Ecrire(Numro de ltudiant : )
Lire(et.Numro)
TantQue (et.Numro # 0) Faire
Ecrire(Nom de ltudiant : )
Lire(et.Nom)
Ecrire(Prnom de ltudiant : )
Lire(et.Prnom)
Ecrire(Classe de ltudiant : )
Lire(et.Classe)
Ecrire(fe,et)
Ecrire(Numro de ltudiant : )
Lire(et.Numro)
FinTQ
Fermer(fe)
Fin
Dans cette procdure, lutilisateur doit entrer la valeur 0 pour le champ
numro pour indiquer la fin de la saisie tant donn que le nombre
dtudiants nest pas connu lavance.
Leon 9 : Les fi chi er s squent i el s
111
III.2. Parcours dun fichier organsation squentielle
Ecrire une procdure permettant dafficher la liste des tudiants partir
du fichier fe .
Procdure Consultation(fe : Fetud)
Variables
et : Etudiant
Dbut
Ouvrir(fe,L)
Lire(fe,et)
TantQue NON(FDF(fe)) Faire
Ecrire(et.Numro,et.Nom,et.Prnom,et.classe)
Lire(fe,et)
FinTQ
Fermer(fe)
Fin
IV. Les fichiers de type texte
Les fichiers de texte sont des fichiers squentiels qui contiennent des
caractres organiss en lignes. La prsentation sous forme de ligne est
obtenue grce la prsence des caractres de contrle :
- retour chariot (not souvent CR), de code ASCII 13
- saut de ligne (not souvent LF) de code ASCII 10.
Un fichier texte peut tre dclar de 2 faons diffrentes :
Variables
ftext : Fichier de Caractre
ou
Variables
ftext : Fichier Texte
Remarques
1- Un fichier de type texte peut tre trait ligne par ligne ou
caractre par caractre
Leon 9 : Les fi chi er s squent i el s
112
2- Dans un fichier de type texte, la primitive
Lire_Lig(NomFichier,Fentre) permet de lire une ligne du
fichier et la transfrer dans la fentre.
3- De mme, la fonction boolenne FDL(NomFichier) permet de
vrifier si le pointeur a atteint la fin dune ligne.
Exercice
Ecrire lalgorithme dune procdure qui lit et affiche le contenu dun
fichier de type texte.
Solution
Procdure ParcoursFichText(ftext : Fichier texte)
Variables
ligne : Chane
Dbut
Ouvrir(ftext,L)
Lire(ftext,ligne)
TantQue Non(FDF(ftext)) Faire
Ecrire(ligne)
Lire(ftext,ligne)
FinTQ
Fermer(ftext)
Fin
Leon 9 : Les fi chi er s squent i el s
113
EXERCICES DAPPLICATION
Exercice 9.1
Ecrire un algorithme permettant de :
- Crer et remplir un fichier Fp qui contient des informations sur le
personnel dune entreprise (matricule, nom, prnom, grade, salaire).
- Afficher la liste des employs de cette entreprise dont le salaire est
compris entre 500 et 700 D.
Exercice 9.2
Ecrire une procdure permettant de rechercher un employ dans le fichier
Fp partir de son matricule.
- Si lemploy est trouv, lalgorithme affiche son nom, son prnom et
son grade
- Sinon, il affiche le message ce matricule ne figure pas dans le
fichier
Exercice 9.3
Ecrire un algorithme permettant de :
- Crer et remplir un fichier fnotes qui contient les notes de 30
tudiants
- Copier les notes dans un tableau Tnote
- Trier le tableau Tnote dans lordre croissant
- Copier les notes tries du tableau vers le fichier fnotes.
Leon 9 : Les fi chi er s squent i el s
114
SOLUTIONS DES EXERCICES
Exercice 9.1 : fichier personnel
Algorithme Personnel
Types
Employ = Struct
Matricule : Entier
Nom : Chane
Prnom : Chane
Grade : Caractre
Sal : Rel
FinStruct
Fpers = Fichier de Employ
Variables
Fp : Fpers
emp : Employ
Procdure Cration(Var f : Fpers)
Dbut
Ouvrir(f,E)
Ecrire(Matricule : ) Lire(emp.Matricule)
TantQue (emp.Matricule # 0) Faire
Ecrire(Nom : ) Lire(emp.Nom)
Ecrire(Prnom : ) Lire(emp.Prnom)
Ecrire(Grade : ) Lire(emp.Grade)
Ecrire(Salaire : ) Lire(emp.Sal)
Ecrire(f,emp)
Ecrire(Matricule : ) Lire(emp.Matricule)
FinTQ
Fermer(f)
Fin
Procdure Consultation(f : Fpers)
Dbut
Ouvrir(f,L)
Lire(f,emp)
TantQue NON(FDF(f)) Faire
Si (emp.Sal>=500) ET (emp.Sal<=700) Alors
Ecrire(emp.Matricule, emp.Nom, emp.Sal)
Leon 9 : Les fi chi er s squent i el s
115
FinSi
Lire(f,emp)
FinTQ
Fermer(f)
Fin
Dbut
Cration(Fp)
Consultation(Fp)
Fin.
Exercice 9.2 : recherche dun employ dans le fichier personnel
Procdure Recherche(Fp : Fpers ; x : Entier)
Variables
emp : Employ
Dbut
Ouvrir(Fp,L)
Lire(Fp,emp)
Trouve (emp.Matricule = x)
TantQue (trouve = Faux) ET NON(FDF(Fp)) Faire
Lire(Fp,emp)
Trouve (emp.Matricule = x)
FinTQ
Si FDF(Fp) Alors
Ecrire(Ce matricule ne figure pas dans le
fichier)
Sinon
Ecrire(emp.Nom, emp.Prnom, emp.Grade)
FinSi
Fermer(Fp)
Fin
Leon 9 : Les fi chi er s squent i el s
116
Exercice 9.3 : tri du fichier fnotes
Algorithme Notes
Variables
fnotes : Fichier de Rel
Tnote : Tableau[1..30] de Rel
x, note : Rel
change : Boolen
i : Entier
Dbut
(* Cration du fichier fnotes *)
Ouvrir(fnotes,E)
Pour i de 1 30 Faire
Ecrire(Entrer une note : ) Lire(note)
Ecrire(fnotes,note)
FinPour
Fermer(fnotes)
(* Copie du fichier fnotes dans le tableau Tnote *)
Ouvrir(fnotes,L)
Pour i de 1 30 Faire
Lire(fnotes,note)
Tnote[i] note
FinPour
Fermer(fnotes)
(* Tri du tableau Tnote *)
Rpter
change Faux
Pour i de 1 29 Faire
Si (Tnote[i] > Tnote[i+1]) Alors
x Tnote[i]
Tnote[i] Tnote[i+1]
Tnote[i+1] x
change Vrai
FinSi
FinPour
Jusqu (change = Faux)
(* Copie du tableau Tnote dans le fichier fnotes *)
Leon 9 : Les fi chi er s squent i el s
117
Ouvrir(fnotes,E)
Pour i de 1 30 Faire
Ecrire(fnotes,Tnote[i])
FinPour
Fermer(fnotes)
Fin.
Leon 10 : La r cur si vi t
118
Le on 10 : La r c ur si vi t
O b j e c t i f s
- Rsoudre des problmes rcursifs
- Comparer les approches de programmation itrative et rcursive.
I. Notion de rcursivit
La rcursivit est une technique de programmation alternative
litration qui permet de trouver, lorsquelle est bien utilise, des
solutions trs lgantes un certain nombre de problmes.
Une procdure ou fonction est dite rcursive si son corps contient un ou
plusieurs appels elle-mme :
Procdure Precur(paramtres)
Dbut

Precur(valeurs)

Fin
Utiliser la rcursivit revient dfinir :
- une solution pour un ensemble de cas de base (sans utiliser dappels
rcursifs)
- une solution dans le cas gnral travers une relation de rcurrence
avec des cas plus simples. Cette relation doit permettre darriver un
cas de base en un nombre fini dtapes.
Leon 10 : La r cur si vi t
119
II. Etude dun exemple : la fonction factorielle
Solution itrative
Fonction Facto( n : Entier) : Entier
Variables
n, i, f : Entier
Dbut
f 1
Pour i de 2 n Faire
f f * i
FinPour
Facto f
Fin
Solution rcursive
La relation de rcurrence est dfinie par :
0 ! = 1
n ! = n * (n-1)!
Cette relation donne la fonction rcursive suivante :
Fonction Facto( n : Entier) : Entier
Dbut
Si (n = 0) Alors
Facto 1
Sinon
Facto n * Facto(n-1)
FinSi
Fin
Leon 10 : La r cur si vi t
120
III. Mcanisme de fonctionnement de la rcursivit
Considrons le calcul de 4! par la fonction rcursive dfinie ci-dessus :
Facto(4) renvoie 4 * Facto(3)
Facto(3) renvoie 3 * Facto(2)
Facto(2) renvoie 2 * Facto(1)
Facto(1) renvoie 1 * Facto(0)
Facto(0) renvoie 1 (arrt de la rcursivit)
Facto(1) renvoie 1 * 1 = 1
Facto(2) renvoie 2 * 1 = 2
Facto(3) renvoie 3 * 2 = 6
Facto(4) renvoie 4 * 6 = 24
IV. Performances de la rcursivit
Les problmes de mmoire et de rapidit sont les critres qui permettent
de faire le choix entre la solution itrative et la solution rcursive.
Pour le calcul de la fonction factorielle, les diffrences entre les deux
solutions ne se voient pas trop. Pour lutilisation de la mmoire, il y aura
dpassement dans les calculs avant la saturation de la mmoire.
Le calcul de la suite de fibonacci est le parfait contre-exemple de la
solution rcursive.
La relation de rcurrence est dfinie par :
f
0
= 1
f
1
= 1
f
n
= f
n-2
+ f
n-1
pour n > 1
La solution rcursive vient immdiatement de cette relation :
Fonction Fibo( n : Entier) : Entier
Dbut
Si (n = 0) ou (n = 1) Alors
Fibo 1
Sinon
Fibo Fibo(n - 2) + Fibo(n 1)
FinSi
Fin
Leon 10 : La r cur si vi t
121
On remarque que la fonction effectue deux appels, donc pour les valeurs
importantes de n on aura des temps dexcution importants (attente du
rsultat).
A titre dexemple, voici le schma de calcul de Fibo(4) (figure 13) :
Figure 13. Appels rcursifs pour le calcul de Fibo(4)
Fibo(4) = Fibo(3) + Fibo(2)
= (Fibo(2) + Fibo(1)) + Fibo(2)
= ((Fibo(1) + Fibo(0)) + Fibo(1)) + Fibo(2)
= ((1 + Fibo(0)) + Fibo(1)) + Ffibo(2)
= ((1 + 1) + Fibo(1)) + Fibo(2)
= (2 + Fibo(1)) + Fibo(2)
= (2 + 1) + Fibo(2)
= 3 + Fibo(2)
= 3 + (Fibo(1) + Fibo(0))
= 3 + (1 + Fibo(0))
= 3 + (1 + 1)
= 3 + 2
= 5
Le nombre d'appels rcursifs est donc trs lev (9 pour Fibo(4), 15 pour
Fibo(5), 25 pour Fibo(6) et 21891 pour Fibo(20)), d'autant plus qu'il
existe une mthode itrative simple qui calcule simultanment Fibo(n) et
Fibo(n-1) :
Fibo(4)
Fibo(3) Fibo(2)
Fibo(1)
Fibo(0)
Fibo(1) Fibo(2)
Fibo(1) Fibo(0)
Leon 10 : La r cur si vi t
122
Fonction Fibo(n : Entier) : Entier
Variables
i, fn, fn_1, fn_2 : Entier
Dbut
fn_1 1
fn_2 1
Pour i de 2 n Faire
fn fn_1 + fn_2
fn_2 fn_1
Fn_1 fn
FinPour
Fibo fn
Fin
V. Rcursivit indirecte ou croise
On dit quon a une rcursivit indirecte ou une rcursivit croise
lorsquune procdure A, sans appel rcursif, appelle une procdure B qui
appelle A.
Exemple
Procdure A(paramtres)
Dbut

B(valeurs)

Fin
Procdure B(paramtres)
Dbut

A(valeurs)

Fin
VI. Choix entre itration et rcursivit
Le choix de la solution itrative peut tre impos par le langage de
programmation. En effet, certains langages tels que Cobol et T. Basic ne
sont pas rcursifs.
Dautre part, seuls les problmes dont la solution se base sur une relation
de rcurrence avec une condition de sortie peuvent tre rsolus de faon
rcursive.
Outre ces deux contraintes, le choix doit tre fait uniquement en fonction
des critres defficacit (contraintes de temps et despace). Si la solution
rcursive satisfait ces critres, il ny a pas lieu de chercher
systmatiquement une solution itrative.
Leon 10 : La r cur si vi t
123
Exercice : tours de Hanoi
Le problme des tours de Hanoi est un grand classique de la rcursivit
car la solution itrative est relativement complexe. On dispose de 3 tours
appeles A, B et C. La tour A contient n disques empils par ordre de
taille dcroissante quon veut dplacer sur la tour B dans le mme ordre
en respectant les contraintes suivantes :
On ne peut dplacer quun disque la fois
On ne peut empiler un disque que sur un disque plus grand ou sur
une tour vide.
Ainsi, le paramtrage de la procdure dplacer sera le suivant :
Procdure dplacer(n : Entier ; A, B, C : Caractre)
Lorsque la tour A ne contient quun seul disque, la solution est vidente :
il sagit de raliser un transfert de la tour A vers B. Ce cas constitue donc
la condition de sortie (point dappui).
Ainsi, pour dplacer n disques de A vers B en utilisant ventuellement C,
il faut :
1- dplacer (n-1) disques de A vers C en utilisant ventuellement B
2- raliser un transfert du disque de A sur B
3- dplacer (n-1) disques de C vers B en utilisant ventuellement A.
Procdure dplacer (n : Entier; A,B,C : Caractre);
Dbut
Si (n=1) Alors
Ecrire(A,' -> ',B)
Sinon
dplacer(n-1, A, C, B);
Ecrire(A,' -> ',B);
dplacer(n-1, C, B, A);
FinSi
Fin
Voici le rsultat de lexcution de cette procdure avec 3 disques placs
initialement sur A (figure 14) :
A -> B
A -> C
B -> C
A -> B
C -> A
C -> B
A -> B
Leon 10 : La r cur si vi t
124
A B C
Figure 14. Trace dexcution de la procdure
dplacer(3,A,B,C)
Leon 10 : La r cur si vi t
125
EXERCICES DAPPLICATION
Exercice 10.1 : calcul du PGCD par la mthode dEuclide
Ecrire une fonction rcursive PGCD_Euc qui retourne le PGCD de 2
entiers A et B en utilisant lalgorithme dEuclide qui sappuie sur les
proprits suivantes :
PGCD(A,B) = B Si B est un diviseur de A
PGCD(A,B) = PGCD(B,A mod B) Sinon
Exemple : PGCD(36,20) = PGCD(20,16) = PGCD(16,4) = 4.
Exercice 10.2 : nombre de combinaisons de p lments parmi n.
Ecrire une fonction rcursive CNP qui calcule le nombre de
combinaisons de p lments pris parmi n lments diffrents par la
formule suivante :
n C
n

1
1
n
n
C
1
1 1


+
p
n
p
n
p
n
C C C
Exercice 10.3 : palindrome
Ecrire une fonction rcursive Palind qui vrifie si une chane de
caractres est un palindrome ou non.
Formellement, une chane S de n caractres est un palindrome si et
seulement si :
[ [ 1 , 2 1 , + i n S i S div n i i
Une condition ncessaire est que les caractres extrmes soient identiques
et que la sous chane prive des caractres extrmes soit galement un
palindrome.
Leon 10 : La r cur si vi t
126
Exercice 10.4 : fonction dAckermann
Ecrire une fonction rcursive Ack qui calcule Ack(n,m) selon la formule
suivante :
Ack(0,m) = m + 1
Ack(n,0) = Ack(n-1,1)
Ack(n,m) = Ack(n-1,Ack(n,m-1))
Vrifier que : Ack(1,n) = n + 2, Ack(2,n) 2 * n, Ack(3,n) 2
n
.
Exercice 10.5 : fonction 91 de MacCarthy
1- Ecrire une fonction rcursive f qui calcule f(n) selon la formule
suivante :
f(n) = n - 10 Si n > 100
f(n) = f(f(n+11)) Sinon
2- Calculer f(96).
Exercice 10.6 : fonction de Morris
Soit la fonction rcursive suivante :
Fonction g(m, n : Entier) : Entier
Dbut
Si (m = 0) Alors
g 1
Sinon
g g(m 1,g(m,n))
FinSi
Fin
Calculer g(1,0).
Leon 10 : La r cur si vi t
127
SOLUTIONS DES EXERCICES
Exercice 10.1 : calcul du PGCD(a,b) par la mthode dEuclide
On suppose que a et b sont strictement positifs.
Fonction PGCD_Euc(a,b : Entier) : Entier
Dbut
Si (a Mod b = 0) alors
PGCD_Euc b
Sinon
PGCD_Euc PGCD_Euc(b,a mod b)
FinSi
Fin
Exercice 10.2 : nombre de combinaisons de p lments parmi n
Fonction CNP(n,p : Entier) : Entier
Dbut
Si (p = 1) alors
CNP n
Sinon
Si (p = n) Alors
CNP 1
Sinon
CNP CNP(n-1,p) + CNP(n-1,p-1)
FinSi
FinSi
Fin
Exercice 10.3 : palindrome (version rcursive)
Fonction Palind(s : Chane) : Boolen
Dbut
Si (Longueur(s) < 2) Alors
Palind Vrai
Sinon
Palind (s[1]=s[longueur(s)]) ET
(Palind(copie(s,2,longueur(s)-2)))
FinSi
Fin
Exercice 10.4 : fonction dAckerman
Leon 10 : La r cur si vi t
128
Fonction Ack(a,b : Entier) : Entier
Dbut
Si (a = 0) Alors
Ack b + 1
Sinon
Si (b = 0) Alors
Ack Ack(a-1,1)
Sinon
Ack Ack(a-1,Ack(a,b-1))
FinSi
FinSi
Fin
Exercice 10.5 : fonction 91 de MacCarthy
Fonction F91(x : Entier) : Entier
Dbut
Si (x > 100) Alors
F91 x - 10
Sinon
F91 F91(F91(x + 11))
FinSi
Fin
F91(96) = F91(F91(107)) = F91(97) = F91(F91(108)) = F91(98) =
F91(F91(109)) = F91(99) = F91(F91(110)) = F91(100) = F91(F91(111))
= F91(101) = 91.
Exercice 10.6 : fonction de Morris
g(1,0) = g(0,g(1,0))
= g(0,g(0,g(1,0)))
= g(0,g(0,g(0,g(1,0))))
=
Impossible de calculer g(1,0) ; la rcursivit ne sarrte plus.
Leon 11 : St r uct ur es de donnes dynami ques
129
Le on 11 : St r uc t ur es de donnes dynami ques
O b j e c t i f
Manipuler correctement des structures de donnes dynamiques.
I. Introduction
Le but de cette leon est de grer un ensemble fini dlments dont le
nombre varie au cours de lexcution du programme. Les lments de cet
ensemble peuvent tre de diffrentes sortes : nombres entiers ou rels,
chanes de caractres ou des objets informatiques plus complexes comme
les identificateurs de processus ou les expressions arithmtiques.
On ne sintressera pas aux lments de lensemble en question mais aux
oprations que lon effectue sur cet ensemble. Plus prcisment, les
oprations que lon sautorise sur un ensemble E sont le suivantes :
tester si lensemble E est vide
ajouter llment x lensemble E
vrifier si llment x appartient lensemble E
supprimer llment x de lensemble E
Cette gestion des ensembles doit, pour tre efficace, rpondre deux
critres parfois contradictoires : un minimum despace mmoire utilis et
un minimum dinstructions lmentaires pour raliser une opration.
II. Les variables dynamiques
Jusquici, nous avons utilis des variables dites statiques .
Une variable statique est caractrise par les proprits suivantes :
- elle est dclare en tte du bloc o elle est utilise
- elle occupe un espace mmoire dont la taille est fixe ds le
dbut pour quon y place ses valeurs
- laccs la valeur se fait par le nom de la variable.
Leon 11 : St r uct ur es de donnes dynami ques
130
Au contraire, une variable dynamique est caractrise par les proprits
suivantes :
- elle peut tre cre et dtruite au cours de lexcution du bloc
dans lequel elle est dclare
- lespace mmoire rendu libre peut tre rcupr
- laccs la valeur se fait par un pointeur.
II.1 Variable pointeur et variable pointe
Un pointeur P est une variable statique dont les valeurs sont des
adresses. Une variable dynamique pointe par P sera note P^.
Le type de la variable pointe est appel type de base.
Exemple
P P^
La variable pointeur P a pour valeur 43. Elle pointe sur lespace mmoire
P^ dadresse 43 et dont le contenu est la chane Tunis.
Lalgorithe suivant permet de crer et initialiser un pointeur P :
Algorithme Pteur
Types
Pointeur = ^Chane
Variables
P : Pointeur
Dbut
Allouer(P) (* cration du pointeur P *)
P^ Tunis
Fin.
43
Tunis
Leon 11 : St r uct ur es de donnes dynami ques
131
II.2 Oprations sur les pointeurs
Il ne faut pas confondre les oprations sur les pointeurs avec les
oprations sur les variables pointes (figure 15).
a b c
Figure 15. oprations sur les pointeurs
Supposons quon soit dans la situation initiale illustre par la figure 15a :
Si linstruction :
P Q
est excute, nous passerons la nouvelle situation illustre par la figure
15b. Dans ce cas, on a :
P^ = Q^ = Sousse
et si lon modifie la valeur de Q^, P^ sera galement modifi et restera
gal Q^.
Par contre, si linstruction :
P^ Q^
est excute, nous passerons la nouvelle situation illustre par la figure
15c. Dans ce cas, on a galement :
P^ = Q^ = Sousse
mais si lon modifie la valeur de Q^, P^ ne sera pas modifi.
Tunis
P P^
Sousse
Q Q^
Tunis
P P^
Sousse
Sousse
P P^
Sousse
Q Q^
Q Q^
Leon 11 : St r uct ur es de donnes dynami ques
132
III. Les listes chanes
La structure de liste est utilise pour reprsenter un ensemble dlments
contenus chacun dans une cellule. Celle-ci contient en plus de llment,
ladresse de llment suivant appele pointeur. La rfrence vers la
premire cellule est contenue dans un pointeur nomm tte de liste. Une
liste chane est accessible uniquement par sa tte (figure 16).
Figure 16. Structure dune liste chane
Nil est une constante prdfinie qui indique la fin de la liste.
En supposant que les lments de la liste sont des entiers, celle-ci se
dclare de la faon suivante :
Types
Liste = ^Cellule
Cellule = Struct
Elem : entier
Suiv : Liste
FinStruct
Variables
L : Liste
III.1. Cration dune liste chane
La procdure suivante permet de crer une liste chane de n lments de
type entier.
Procdure CratListe(n : Entier, Var L : Liste)
Variables
Tte, P : Liste
i : Entier
Dbut
Allouer(Tte)
Ecrire(Entrer llment de tte : ) Lire(Tte^.Elem)
e1 e2 e3
Tte de liste
Fin de
liste (Nil)
Leon 11 : St r uct ur es de donnes dynami ques
133
Tte^.Suiv Nil
L Tte
Pour i de 2 n Faire
Allouer(P)
Ecrire(Entrer un entier : ) Lire(P^.Elem)
P^.Suiv Nil
L^.Suiv P
L P
FinPour
L Tte
Fin
III.2 Parcours dune liste chane
La procdure itrative suivante permet de parcourir et afficher les
lments dune liste chane.
Procdure AffichListe_itr(L : Liste)
Variables
P : Liste
Dbut
P L
TantQue (P # Nil) Faire
Ecrire(P^.Elem)
P P^.Suiv
FinTQ
Fin
Le parcours peut se faire galement de faon rcursive :
Procdure AffichListe_rcur(L : Liste)
Dbut
Si (L # Nil) Alors
Ecrire(L^.Elem)
AffichListe_rcur(L^.Suiv)
FinSi
Fin
III.3 Insertion dun lment en tte de liste (figure 17)
e1 e2 e3
Tte
Nil
Leon 11 : St r uct ur es de donnes dynami ques
134
a- tat initial
b- tat final
Figure 17. Principe dinsertion dun lment en tte de liste
On suppose que la liste initiale contient au moins une cellule.
Procdure InsertTte(Var L : Liste)
Variables
P : Liste
Dbut
Allouer(P)
Ecrire(Entrer un entier : ) Lire(P^.Elem)
P^.Suiv L
L P
Fin
III.4 Recherche dun lment dans une liste chane
On veut crire une fonction recherche(x : Entier ; L : Liste) : Boolen
qui vrifie si llment x figure dans la liste L.
a- versi on i trati ve
Fonction recherche(x : Entier ; L : Liste) : Boolen
Variables
P : Liste
trouve : Boolen
Dbut
trouve Faux
P L
TantQue (P # Nil) ET (trouve = Faux) Faire
Trouve (P^.Elem = x)
e1 e2 e3
Tte
Nil
e0
Leon 11 : St r uct ur es de donnes dynami ques
135
P P^.Suiv
FinTQ
recherche trouve
Fin
b- versi on rcursi ve
Fonction recherche(x : Entier ; L : Liste) : Boolen
Dbut
Si (L = Nil) Alors
recherche Faux
Sinon
Si (L^.Elem = x) Alors
recherche Vrai
Sinon
recherche recherche(x,L^.Suiv)
FinSi
FinSi
Fin
III.5 Suppression dun lment dune liste chane
En supposant que la valeur x existe une seule fois dans la liste, supprimer
x revient mettre jour les liens de faon que le successeur du
prdcesseur de x devient le successeur de x (figure 18). Un traitement
particulier doit tre fait si llment supprimer est le premier lment de
la liste.
Leon 11 : St r uct ur es de donnes dynami ques
136
a- tat initial
b- tat final
Figure 18. Principe de suppression dun lment de la liste
a- versi on i trati ve
Procdure supprimer(x : Entier ; Var L : Liste)
Variables
P, Q : Liste
Dbut
Si (L # Nil) Alors
P L
Si (L^.Elem = x) Alors
L L^.Suiv
Librer(P)
Sinon
Q L^.Suiv
TantQue (Q # Nil) ET (Q^.Elem # x) Faire
P Q
Q Q^.Suiv
FinTQ
Si (Q # Nil) Alors
P^.suiv Q^.Suiv
Librer(Q)
FinSi
FinSi
FinSi
Fin
Linstruction Librer(P) permet de rendre disponible lespace occup par
P.
b- versi on rcursi ve
e1 e2 e3
Tte
Nil
e1 e2 e3
Tte
Nil

Leon 11 : St r uct ur es de donnes dynami ques


137
Procdure supprimer(x : Entier ; Var L : Liste)
Variables
P, Q : Liste
Dbut
Si (L # Nil) Alors
Si (L^.Elem = x) Alors
P L^.Suiv
Librer(L)
L P
Sinon
supprimer(x, L^.Suiv)
FinSi
FinSi
Fin
Exercice : longueur dune liste
Ecrire une fonction rcursive qui retourne le nombre dlments dune
liste chane.
Solution
Fonction Longueur(L : Liste) : Entier
Dbut
Si (L = Nil) Alors
Longueur 0
Sinon
Longueur 1 + Longueur(L^.Suiv)
FinSi
Fin
Remarque
Une liste chane circulaire est une liste particulire dans laquelle le
dernier lment pointe sur la tte de la liste (figure 19).
Leon 11 : St r uct ur es de donnes dynami ques
138
Figure 19. Structure dune liste chane circulaire
IV. Les listes chanage double
Ce sont des listes chanes avec, en plus, un pointeur vers llment
prcdent de chaque cellule. Cette structure permet de parcourir la liste
dans les 2 sens et dacclrer la recherche dun lment (figure 20) :
Figure 20. Structure dune liste chanage double
En supposant que les lments de la liste sont des entiers, celle-ci se
dclare de la faon suivante :
Types
Liste = ^Cellule
Cellule = Struct
Pred : Liste
Elem : Entier
Suiv : Liste
FinStruct
Variables
L : Liste
e1 e2 e3
Tte
Tte
Nil
Queue
Nil
e1 e2 e3
Leon 11 : St r uct ur es de donnes dynami ques
139
IV.1. Cration dune liste chanage double
La procdure suivante permet de crer une liste chanage double qui
contient n lments de type entier :
Procdure CratListe(n : Entier ; Var L, Queue : Liste)
Variables
Tte, P : Liste
i : Entier
Dbut
Allouer(Tte)
Ecrire(Entrer un entier : ) Lire(Tte^.Elem)
Tte^.Pred Nil
Tte^.Suiv Nil
L Tte
Pour i de 2 n Faire
Allouer(P)
Ecrire(Entrer un entier : ) Lire(P^.Elem)
P^.Pred L
P^.Suiv Nil
L^.Suiv P
L P
FinPour
Queue P
L Tte
Fin
IV.2 Parcours inverse dune liste chanage double
La procdure suivante permet de parcourir et afficher les lments dune
liste chanage double en commenant par la queue.
Procdure AffichListe(Queue : Liste )
Variables
P : Liste
Dbut
P Queue
TantQue (P # Nil) Faire
Ecrire(P^.Elem)
Leon 11 : St r uct ur es de donnes dynami ques
140
P P^.Pred
FinTQ
Fin
V. Les piles
V.1. Prsentation
Une pile est une suite de cellules alloues dynamiquement (liste chane)
o linsertion et la suppression dun lment se font toujours en tte de
liste.
Limage intuitive dune pile peut tre donne par une pile dassiettes, ou
une pile de dossiers condition de supposer quon prend un seul lment
la fois (celui du sommet). On peut rsumer les contraintes daccs par le
principe dernier arriv, premier sorti qui se traduit en anglais par :
Last In First Out (figure 21).
Figure 21. Structure dune pile
La structuration dun objet en pile simpose lorsquon mmorise des
informations qui devront tre traites dans lordre inverse de leur arrive.
Cest le cas, par exemple, de la gestion des adresses de retour dans
lexcution dun programme rcursif.
En supposant que les lments de la pile sont des entiers, celle-ci se
dclare de la faon suivante :
Types
Pile = ^Cellule
Cellule = Struct
Elem : Entier
Suiv : Pile
FinStruct
Var
P : Pile
V.2. Manipulation dune pile
e1 e2 e3
Sommet
Nil
Leon 11 : St r uct ur es de donnes dynami ques
141
Du point de vue manipulation, les contraintes daccs sont matrialises
par les procdures et les fonctions suivantes :
Procdure Initialiser(Var P : Pile) : cre une pile vide P
Fonction Pile_Vide (P : Pile) : Boolen : Renvoie la valeur vrai si
la pile est vide.
Procdure Empiler(x : Entier ; Var P : Pile) : ajoute llment x au
sommet de la pile
Procdure Dpiler (Var x : Entier ; Var P : Pile) : dpile le
sommet de la pile et le met dans la variable x
Procdure Initialiser(Var P : Pile)
Dbut
P Nil
Fin
Fonction Pile_Vide(P : Pile) : Boolen
Dbut
Pile_Vide (P = Nil)
Fin
Procdure Empiler(x : Entier ; Var P : Pile)
Variables
Q : Liste
Dbut
Allouer(Q)
Q^.Elem x
Q^.Suiv P
P Q
Fin
Leon 11 : St r uct ur es de donnes dynami ques
142
Procdure Dpiler(Var x : Entier ; Var P : Pile)
Dbut
Si NON(Pile_Vide(P)) Alors
x P^.Elem
Q P
P P^.Suiv
Librer(Q)
Sinon
Ecrire(impossible, la pile est vide)
FinSi
Fin
VI. Les files
VI.1. Prsentation
Une file est une suite de cellules alloues dynamiquement (liste chane)
dont les contraintes daccs sont dfinies comme suit :
- On ne peut ajouter un lment quen dernier rang de la suite
- On ne peut supprimer que le premier lment.
Limage intuitive dune file peut tre donne par la queue un guichet
lorsquil ny a pas de resquilleurs. On peut rsumer les contraintes
daccs par le principe premier arriv, premier sorti qui se traduit en
anglais par : Fast In First Out (figure 22).
Figure 22. Structure dune file
La structuration dun objet en file simpose en particulier lorsquune
ressource doit tre partage par plusieurs utilisateurs : il y a formation
dune file dattente. Un exemple est donn par le spooler dimpression
qui est un programme qui reoit, traite, planifie et distribue les documents
imprimer dans un systme multiprogramm.
e1 e2 e3
Sommet
Nil
Queue
Leon 11 : St r uct ur es de donnes dynami ques
143
En supposant que les lments de la file sont des entiers, celle-ci se
dclare de la faon suivante :
Types
Liste = ^Cellule
Cellule = Struct
Elem : Entier
Suiv : Liste
FinStruct
File = Struct
Tte : Liste
Queue : Liste
FinStruct
Variables
F : File
VI.2. Manipulation dune file
Du point de vue manipulation, les contraintes daccs sont matrialises
par les procdures et les fonctions suivantes :
Procdure Initialiser(Var F : File) : cre une file vide F
Procdure Ajouter(x : Entier ; Var F : File) : ajoute llment
x la fin de la file
Procdure Extraire (Var x : Entier ; Var F : File) : extrait le
sommet de la file et le met dans la variable x.
Procdure Initialiser(Var F : File)
Dbut
F.Tte Nil
F.Queue Nil
Fin
Procdure Ajouter(x : Entier ; Var F : File)
Variables
P : Liste
Dbut
Leon 11 : St r uct ur es de donnes dynami ques
144
Allouer(P)
P^.Elem x
P^.Suiv Nil
Si (F.Queue # Nil) Alors
F.Queue^.Suiv P
Sinon
F.Tte P
FinSi
F.Queue P
Fin
Dans le cas o la file est vide, comme la queue, la tte de la file doit
galement pointer vers le nouvel lment.
Procdure Extraire(Var x : Entier ; Var F : File)
Variables
P : Liste
Dbut
Si (F.Tte = Nil) Alors
Ecrire(impossible, la file est vide)
Sinon
P F.Tte
x F.Tte^.Elem
F.Tte F.Tte^.Suiv
Librer(P)
FinSi
Fin
Remarque
Dans les langages qui noffrent pas le type pointeur, les structures de
liste, pile ou file peuvent tre implantes sous forme de tableaux.
Ainsi, une liste chane dentiers peut tre dclare de la faon suivante :
Constantes
n = 100
Types
Indice : 1..n
Leon 11 : St r uct ur es de donnes dynami ques
145
Cellule = Struct
Elem : entier
Suiv : Indice
FinStruct
Liste = Tableau[Indice] de cellule
Variables
L : Liste
EXERCICES DAPPLICATION
Exercice 11.1 : Inversion dune liste chane
Ecrire une procdure qui permet dinverser une liste chane Ls dans une
liste Ls_Inv.
Exercice 11.2 : Tri par bulles dune liste chane
Ecrire une procdure qui permet de trier une liste chane Ls dans lordre
croissant des lments (utiliser la mthode de tri par bulles).
Exercice 11.3 : Nombres premiers
Ecrire un algorithme qui permet de construire la liste des nombres
premiers infrieurs un entier n donn.
Pour construire cette liste, on commence par y ajouter tous les nombres
entiers de 2 n dans lordre croissant. On utilise ensuite la mthode
classique du crible dEratosthne qui consiste parcourir successivement
les lments infrieurs n et supprimer tous leurs multiples stricts.
Leon 11 : St r uct ur es de donnes dynami ques
146
Exercice 11.4 : Matrices creuses
Les matrices creuses sont des matrices dentiers comprenant une majorit
de 0 comme dans lexemple suivant :
M =

,
_

0 6 0 0 0
0 0 0 0 0
0 0 3 0 1
0 0 0 2 0
Par souci dconomie, une matrice creuse peut tre reprsente par une
liste chane contenant uniquement les lments non nuls avec leurs
indices. Ainsi, la matrice M peut tre reprsente par la liste suivante :
M = [(2,(1,2)) ; (1,(2,1)) ; (3,(2,3)) ; (6,(4,4)) ; (0,(4,5))]
Les lments sont rangs par indice croissant (ligne puis colonne). Pour
connatre la dimension de la matrice, llment dindice maximal est
prcis dans la liste, mme si celui-ci est nul.
1- Dfinir le type Matrice_Creuse
2- Ecrire une fonction qui fait la somme de deux matrices creuses.
Leon 11 : St r uct ur es de donnes dynami ques
147
SOLUTIONS DES EXERCICES
Exercice 11.1 : inversion dune liste chane
Procdure InvertListe(Ls : Liste ; Var Ls_Inv : Liste)
Variables
P,Q : Liste
Dbut
Si (Ls = Nil) Alors
Ls_Inv Nil
Sinon
Allouer(Q)
Q^.Elem Ls^.Elem
Q^.Suiv Nil
Ls Ls^.Suiv
Si (Ls = Nil) Alors
Ls_Inv Q
Sinon
TantQue (Ls # Nil) Faire
Allouer(P)
P^.Elem Ls^.Elem
P^.Suiv Q
Q P
Ls Ls^.Suiv
FinTQ
Ls_Inv Q
FinSi
FinSi
Fin
Exercice 11.2 : tri par bulles dune liste chane
Procdure TriBul(Var Ls : Liste)
Variables
P,Q : Liste
x : Entier
change : Boolen
Dbut
Rpter
change Faux
Leon 11 : St r uct ur es de donnes dynami ques
148
P Ls
Q Ls^.Suiv
TantQue (Q # Nil) Faire
Si (P^.Elem > Q^.Elem) Alors
x P^.Elem
P^.Elem Q^.Elem
Q^.Elem x
change Vrai
FinSi
P Q
Q Q^.Suiv
FinTQ
Jusqu (change = Faux)
Fin
Exercice 11.3 : nombres premiers
Algorithme Premiers
Types
Liste = ^Cellue
Cellule = Struct
Elem : Entier
Suiv : Liste
FinStruct
Variables
Ls : Liste
P, Q, R : Liste
sup,i : Entier
Procdure CreatListe(n : Entier ; Var L : Liste)
Variables
Tte : Liste
Dbut
Allouer(Tte)
Tte^.Elem 2
Tte^.Suiv Nil
L Tte
Pour i de 3 n Faire
Allouer(P)
P^.Elem i
P^.Suiv Nil
Leon 11 : St r uct ur es de donnes dynami ques
149
L^.Suiv P
L P
FinPour
L Tte
Fin
Procdure Prem(n : Entier ; Var L : Liste)
Dbut
P L
TantQue (P^.Elem <= Racine(n)) Faire
Q P
TantQue (Q # Nil) ET (Q^.Suiv # Nil) Faire
R Q^.Suiv
Si (R^.Elem Mod P^.Elem = 0) Alors
Q^.Suiv R^.Suiv
Librer(R)
FinSi
Q Q^.Suiv
FinTQ
P P^.Suiv
FinTQ
Fin
Procdure AffichListe(L : Liste)
Dbut
P L
TantQue (P # Nil) Faire
Ecrire(P^.Elem)
P P^.Suiv
FinTQ
Fin
Dbut
Ecrire(Entrer la borne sup : ) Lire(sup)
CreatListe(sup,Ls)
Prem(sup,Ls)
AffichListe(Ls)
Fin.
Leon 12 : Les ar br es
150
Le on 12 : Les ar br es
O b j e c t i f
Connatre les concepts de base relatifs aux arbres binaires.
I. Introduction
La structure d'arbre est l'une des plus importantes et des plus spcifiques
de l'informatique. Elle est utilise par exemple pour lorganisation des
fichiers dans les systmes d'exploitation, la reprsentation d'une table des
matires, d'un arbre gnalogique, etc.
Dans cette leon, laccent sera mise sur les arbres binaires qui sont un
cas particulier des arbres gnraux.
Une proprit intrinsque de la structure darbre est la rcursivit.
II. Dfinitions
Un arbre binaire B est un ensemble de nuds qui est soit vide, soit
compos dune racine et de deux arbres binaires disjoints appels sous-
arbre droit et sous-arbre gauche (figure 23).
Figure 23. Structure dun arbre binaire
Le pre du sommet x est le sommet p tel qu'il existe un arc entre p et
x (seule la racine de larbre na pas de pre).
Le frre de x est un sommet qui a le mme pre.
Leon 12 : Les ar br es
151
Le sous-arbre droit (resp. gauche) d'un arbre binaire B est le sous-
arbre qui a pour racine le fils droit (resp. gauche) de B.
Un ud interne est un sommet qui a au moins un fils (gauche ou
droit ou les deux).
Une feuille est un sommet qui n'a pas de fils.
La hauteur d'un sommet x est la longueur (en nombre d'arcs) du
plus long chemin de x une feuille.
La hauteur d'un arbre est gale la hauteur de la racine.
III. Cration dun arbre binaire
Un arbre binaire peut tre cr en dfinissant un type correspondant un
ud de larbre. Soit par exemple :
Types
Arbre = ^Nud
ud = Struct
Valeur : Entier
Gauche : Arbre
Droite : Arbre
FinStruct
Une telle structure peut tre utilise pour ordonner des lments, en
considrant que le sous-arbre gauche dun nud de valeur n contient les
lments infrieurs n, tandis que le sous-arbre droit contient les
lments suprieurs n (figure 24).
Leon 12 : Les ar br es
152
Figure 24. Un arbre binaire ordonn
Une telle structure est pratique pour effectuer des tris rapides.
Lalgorithme suivant permet de construire un arbre dentiers partir
dune suite de nombres entrs par lutilisateur.
Algorithme ArbreBinaire
Types
Arbre = ^Nud
ud = Struct
Valeur : Entier
Gauche : Arbre
Droite : Arbre
FinStruct
Variables
racine : Arbre
x : Entier
Procdure Construire(Elt : Entier ; Var B : Arbre)
Dbut
Si (B = Nil) Alors
Allouer(B)
B^.valeur Elt
B^.gauche Nil
B^.droite Nil
Sinon
Si (Elt < B^.valeur) Alors
Construire(Elt,B^.gauche)
Sinon
Si (Elt > B^.valeur) Alors
12
15
20
6
1
4
23
18
Leon 12 : Les ar br es
153
Construire(Elt,B^.droite)
FinSi
FinSi
FinSi
Fin
Dbut
racine = Nil
Ecrire(Entrer un entier : ) Lire(x)
TantQue (x # 0) Faire
Construire(x,racine)
Ecrire(Entrer un entier :) Lire(x)
FinTQ
Fin.
IV. Parcours dun arbre binaire
On cherche parcourir un arbre binaire selon une stratgie dite en
profondeur dabord ou dans lordre prfixe illustr sur le diagramme ci-
dessous :
Figure 25. Parcours dun arbre binaire dans lordre prfixe
Les lments doivent tre affichs dans lordre suivant : 0 1 2 3 4 5
6.
Procdure ParcoursPrfixe(B : Arbre)
Dbut
Si (B # Nil) Alors
Afficher(B^.valeur)
ParcoursPrfixe(B^.gauche)
ParcoursPrfixe(B^.droite)
FinSi
Fin
0
4
6
3
2
1
5
Leon 12 : Les ar br es
154
Exercice
1- Ecrire une nouvelle version de la procdure prcdente qui fait le
parcours de larbre dans lordre infixe ou symtrique. Le rsultat doit tre
dans lordre suivant : 6 4 5 0 3 1 2.
2- Ecrire une autre version qui fait le parcours de larbre dans lordre
postfixe. Le rsultat doit tre dans lordre suivant : 6 5 4 3 2 1 0)
Solution
Procdure ParcoursInfixe(B : Arbre)
Dbut
Si (B # Nil) Alors
ParcoursInfixe(B^.droite)
Ecrire(B^.valeur)
ParcoursInfixe(B^.gauche)
FinSi
Fin
Procdure ParcoursPostfixe(B : Arbre)
Dbut
Si (B # Nil) Alors
ParcoursPostfixe (B^.droite)
ParcoursPostfixe (B^.gauche)
Ecrire(B^.valeur)
FinSi
Fin
Leon 12 : Les ar br es
155
V. Recherche dans un arbre binaire ordonn
Fonction Recherche(x : Entier ; B : Arbre) : Boolen
Dbut
Si (B = Nil) Alors
Recherche Faux
Sinon
Si (x = B^.valeur) Alors
Recherche Vrai
Sinon
Si (x < B^.valeur) Alors
Recherche(x, B^.gauche)
Sinon
Recherche(x, B^.droite)
FinSi
FinSi
FinSi
Fin
VI. Arbres binaires particuliers
On appelle arbre binaire complet un arbre binaire tel que chaque
sommet possde 0 ou 2 fils.
Un arbre binaire complet possde 2P+1 nuds (nombre impair) dont P
sommets internes et P+1 feuilles.
On appelle arbre binaire parfait un arbre binaire (complet) tel que
chaque sommet est le pre de deux sous-arbres de mme hauteur.
Un arbre binaire parfait possde 2
h+1
-1 sommets, o h est la hauteur de
l'arbre.
On appelle arbre binaire quasi-parfait un arbre binaire parfait
ventuellement grignot d'un tage en bas droite.
Leon 12 : Les ar br es
156
Exercice
1- Ecrire une procdure permettant dajouter un lment un arbre
binaire (on suppose que cet lment nexiste pas dans larbre).
2- Ecrire une procdure permettant de supprimer un lment dun arbre
binaire.
La suppression commence par la recherche de l'lment. Puis :
si c'est une feuille, on la vire sans problmes
si c'est un sommet qui n'a qu'un fils, on le remplace par ce fils
si c'est un sommet qui a deux fils, on a deux solutions :
- le remplacer par le sommet de plus grande valeur dans le sous-
arbre gauche
- le remplacer par le sommet de plus petite valeur dans le sous-
arbre droit.
157
Annexe 1 : Pr over bes de pr ogr ammat i on
Proverbe 1
Dfinissez le problme compltement.
Proverbe 2
Rflchissez dabord vous programmerez plus tard.
Proverbe 3
Utilisez lanalyse descendante.
Proverbe 4
Structurez vos programmes en units logiques.
Proverbe 5
Soignez la syntaxe tout de suite.
Proverbe 6
Employez les commentaires.
Proverbe 7
Choisissez bien vos identificateurs.
Proverbe 8
Utilisez proprement les variables intermdiaires.
Proverbe 9
Ne touchez pas aux paramtres dune boucle.
Proverbe 10
Evitez les astuces.
Proverbe 11
Ne supposez jamais que lordinateur suppose quelque chose.
Proverbe 12
Testez le programme la main avant de lexcuter.
158
Proverbe 13
Ne vous occupez pas dune belle prsentation des rsultats avant que le
programme soit correct.
Proverbe 14
Soignez la prsentation.
Proverbe 15
Nayez pas peur de tout recommencer.
159
Bi bl i ogr aphi e
C. et P. RICHARD
Initiation lalgorithmique
Editions Belin, 1981.
C. DELANNOY
Initiation la programmation
Eyrolles, 2000.
J. COURTIN et I. KOWARSKI
Initiation lalgorithmique et aux structures de donnes
Dunod informatique, 1987.
G. CHATY et J. VICARD
Programmation : cours et exercices
Ellipses, 1992.
C. DELANNOY
Programmer en Turbo Pascal 7
Eyrolles, 2000.
B. S. GOTTFRIED
Programmation Pascal : thorie et applications
McGraw-Hill, 1992.
M. SAHNOUN & F. BEN AMOR
Informatique de base
C.L.E, 1999.
Micro Application
Grand livre Visual C++ 5
dition 1998.
J. MAILLEFERT
Cours et T.P de langage C
IUT de Cachan, 1995.
M. GAFSI, A. ABIDI, M. JARRAYA, M. HASSEN et M.TOUAITI
Informatique, 7
me
anne de lenseignement secondaire
Orbis impression, 1996.
P. BRETON, G. DUFOURD et E. HEILMAN
Loption informatique au lyce
Editions Hachette.
M. MOLLARET
C/C++ et programmation objet
Armand Colin, 1989.
160
Tabl e des mat i r es
Pages
Avant-Propos
Leon 1 : Introduction la programmation
I. Notion de programme

1
II. Interprtation et compilation

2
III. Dmarche de programmation

3
IV. Notion de variable

4
V. Notion de constante
..
5
VI. Notion de type
..
5
VI.1. Le type entier
.
6
VI.2. Le type rel ou dcimal ... 6
VI.3. Le type caractre

7
VI.4. Le type logique ou boolen . 8
VII. Les expressions

8
VII.1. Les expressions arithmtiques .. 9
VII.2. Les expressions logiques 9
Exercices dapplication
..
10
Solutions des exercices
..
11
Leon 2 : Les instructions simples
I. Linstruction daffectation
.
12
II. Linstruction dcriture
...
14
III. Linstruction de lecture
..
15
161
IV. Structure gnrale dun algorithme . 15
Exercices dapplication
..
16
Solutions des exercices
..
18
Leon 3 : Les structures conditionnelles
I. Introduction
..
20
II. Structure de slection simple
..
20
II.1. Forme simple

20
II.2. Forme
alternative.
22
III. Structure de slection multiple . 24
Exercices dapplication
..
26
Solutions des exercices
..
27
Leon 4 : Les structures itratives
I. Introduction

29
II. La structure Pour Faire . 29
III. La structure Rpter Jusqu .. 32
IV. La structure Tant Que Faire ... 34
V. Synthse
..
36
V.1. Passage dune structure itrative
une autre 36
V.2. Choix de la structure itrative . 37
Exercices dapplication
..
37
Solutions des exercices
..
40
Leon 5 : Les chanes de caractres
I. Le type caractre
.
47
162
I.1. Dfinition

47
I.2. Fonctions standards sur les
caratres .. 47
II. Le type chane de caractres

50
II.1. Dclaration dune chane

50
II.2. Oprations sur les chanes de
caractres
.
50
III. Procdures et fonctions standards sur les
chanes

51
III.1. Procdures standards
.
51
III.2. Fonctions standards

52
Exercices dapplication
..
53
Solutions des exercices
..
55
Leon 6 : Procdures et fonctions
I. Introduction
..
58
II. Procdure simple
..
59
III. Procdure paramtre
.
60
IV. Modes de passage de paramres 61
V. Les fonctions
..
65
V.1. Dfinition
..
65
V.2. Structure dune fonction 65
V.3. Appel dune fonction . 66
Exercices dapplication
..
66
Solutions des exercices 68
163
..
Leon 7 : Les tableaux
I. Introduction
..
70
II. Les tableaux unidimentionnels

71
II.1. Dclaration dun tableau 71
II.2. Identification dun lement du
tableau

72
II.3. Remplissage dun tableau .. 72
II.4. Affichage des lments dun
tableau

73
II.5. Recherche squentielle dun
lment dans un tableau 74
II.6. Algorithmes de tri

75
II.7. Recherche dichotomique 78
III. Tableaux multidimentionnels
.
80
III.1. Remplissage dun tableau deux
dimensions .. 81
III.2. Transposition dune matrice
carre

82
III.3. Somme de deux matrices . 82
III.4. Produit de deux matrices . 83
Exercices dapplication
..
84
Solutions des exercices
..
91
Leon 8 : Les enregistrements
I. Notion denregistrement

100
II. Dclaration des variables de type
enregistrement

100
164
III. Manipulation des variables de type
enregistrement .. 101
Exercices dapplication
..
102
Solutions des exercices
..
104
Leon 9 : Les fichiers squentiels
I. Notion de fichier

106
I.1. Dfinition
...
106
I.2. Elments attachs un fichier 107
II. Dclaration dun fichier organisation
squentielle
.
108
III. Manipulation des fichiers organisation
squentielle

109
III.1. Cration dun fichier
organisation squentielle . 110
III.2. Parcours dun fichier
organisation squentielle . 111
IV. Les fichiers de type texte

111
Exercices dapplication
..
113
Solutions des exercices
..
114
Leon 10 : La rcursivit
I. Notion de rcursivit
..
118
II. Etude dun exemple : la fonction factorielle 119
III. Mcanisme de fonctionnement de la
rcursivit
.
120
IV. Performances de la rcursivit . 120
V. Rcursivit indirecte ou croise . 122
VI. Choix entre itration et rcursivit .. 122
165
Exercices dapplication
..
125
Solutions des exercices
..
127
Leon 11 : Structures de donnes dynamiques
I. Introduction
..
129
II. Les variables dynamiques

129
II.1. Variable pointeur et variable
pointe
..
130
II.2. Oprations sur les pointeurs . 131
III. Les listes chanes

132
III.1. Cration dune liste chane 132
III.2. Parcours dune liste chane 133
III.3. Insertion dun lmemt en tte de
liste .. 134
III.4. Recherche dun lment dans une
liste chane ... 134
III.5. Suppression dun lement dune
liste chane 135
IV. Les listes chanage double
..
138
IV.1. Cration dune liste chanage
double
..
139
IV.2. Parcours inverse dune liste
chanage double
.
139
V. Les piles
..
140
V.1. Prsentation
..
140
V.2. Manipulation dune pile 141
VI. Les files
.
142
VI.1. Prsentation 142
166
.
VI.2. Manipulation dune file 143
Exercices dapplication
..
145
Solutions des exercices
..
147
Leon 12 : Les arbres
I. Introduction
..
150
II. Dfinitions

150
III. Cration dun arbre binaire

151
IV. Parcours dun arbre binaire .. 153
V. Recherche dans un arbre binaire ordonn 155
VI. Arbres binaires particuliers

155
Annexe 1 : Proverbes de programmation
Annexe 2 : Tables des caractres ASCII 157
Bibliographie 159
Table des matires 160
167
Algorithmique et structures de donnes
Lobjectif de ce livre est dexpliquer en termes simples et travers
de nombreux exemples et exercices corrigs les lments
ncessaires lcriture dalgorithmes corrects et efficaces pour
traiter diverses structures de donnes (tableaux, enregistrements,
fichiers, listes chanes, etc.).
Ouvrage de base pour les tudiants du premier cycle universitaire
(ISET, coles dingnieurs, ISG, IHEC, ), ce livre constitue
galement une rfrence aux programmeurs dbutants et
expriments qui veulent rafrachir et complter leurs
connaissances dans le domaine.
N en 1968 Djrissa, Baghdadi ZITOUNI est un professeur
agrg en informatique. Il ocuupe le poste de technologue lISET
de Ksar-Hellal depuis 1997. Il a galement dispens des cours en
informatique et en GPAO lISET de Sousse et lcole
dingnieurs de Monastir. Outre lenseignement de linformatique,
et notamment la programmation, il a particip plusieurs projets
de dveloppement de logiciels qui ont abouti des produits utiliss
au niveau industriel. Il est galement lauteur de plusieurs articles
scientifiques publis dans des journaux spcialiss.

S-ar putea să vă placă și