Vous êtes sur la page 1sur 80

Travaux Dirigs :

Algorithmique et Structure de Donnes

Enseignant : Maher Helaoui

Maher Helaoui est assistant contractuel lInstitut Suprieur dInformatique de


Mahdia, Universit de Monastir, TUNISIE. Depuis 2007.
Il est aussi chercheur en Intelligence Artificielle, au Ple de Recherche en Informatique
du Centre (PRINCE), la Facult des Sciences de Monastir FSM.

Contact : maher.helaoui@gmail.com
Site : www.sites.google.com/site/maherhelaoui/Home/

(ISIMa 2011)

TABLE DES MATIERES

Introduction ..................................................................................................................... i
Les variables ................................................................................................................... 1
1.

Objectif .................................................................................................................... 1

2.

Dclaration ............................................................................................................... 1

3.

Type des variables.................................................................................................... 1

4.

Linstruction daffectation ....................................................................................... 1

Les variables .................................................................................................................... 3


Correction TD 1 ............................................................................................................... 5
Les structures de contrle .............................................................................................. 11
1.

Objectif .................................................................................................................. 11

2.

Les structures de contrle: ..................................................................................... 11

3.

Les structures itratives.......................................................................................... 13

Les structures de contrle .............................................................................................. 14


Correction TD 2 ............................................................................................................. 15
Les tableaux une dimension ........................................................................................ 19
1.

Objectif .................................................................................................................. 19

2.

Dfinition ............................................................................................................... 19

3.

Exemple ................................................................................................................. 19

4.

Algorithmes de tri .................................................................................................. 20

Les tableaux une dimension ..................................................................................... 21


Les tableaux deux dimensions .................................................................................... 24
1.

Objectif .................................................................................................................. 24

2.

Dfinition ............................................................................................................... 24

3.

Exemple ................................................................................................................. 24

Les tableaux deux dimensions .................................................................................... 25


Les fonctions .................................................................................................................. 29
Objectif .......................................................................................................................... 29
Les enregistrements ....................................................................................................... 31
Les fichiers squentiels .................................................................................................. 33
TD Algorithmique

1.

Objectif .................................................................................................................. 33

2.

Questions................................................................................................................ 33

3.

Exemples ................................................................................................................ 33

Les fichiers squentiels .................................................................................................. 35


La Rcursivit ................................................................................................................ 41
Les pointeurs .................................................................................................................. 48
1.

Objectifs ................................................................................................................. 48

2.

Dfinition: Pointeur ............................................................................................... 48

3.

Dclaration dun pointeur : .................................................................................... 48

Les pointeurs .................................................................................................................. 51


Les listes chaines .......................................................................................................... 56
1.

Objectifs ................................................................................................................. 56

Les piles et les files ........................................................................................................ 64


1.

Objectif .................................................................................................................. 64

2.

Dfinition des Piles ................................................................................................ 64

3.

Dfinition des Files ................................................................................................ 67

Les arbres ....................................................................................................................... 69


1.

Objectifs ................................................................................................................. 69

2.

Problme ................................................................................................................ 69

Exercices de rvisions .................................................................................................... 72


Rfrences de base ......................................................................................................... 74

TD Algorithmique

ii

INTRODUCTION

Lobjectif de ce document est de prsenter aux tudiants un rsum du cours


algorithmique et structures de donnes.
Par la suite, une slection dexercices sera propose. Les exercices sont choisis de sorte
aider les tudiants dvelopper une solution algorithmique qui rsout un problme
propos.
Le document propose la solution de quelques exercices. La solution est destine aux
tudiants qui nont pas pu assister une sance de Travaux Dirigs (TD), elle permet de les
aider pour se rattraper

TD Algorithmique

CHAPITRE 1

LES VARIABLES
1. Objectif

Maitriser les notions : variable, type et valeur.


2. Dclaration

Un programme a besoin de stocker provisoirement des valeurs (information). Ces


valeurs peuvent tre de plusieurs types : elles peuvent tre des nombres, du texte, etc.
Toujours est-il que ds que lon a besoin de stocker une information dans un programme,
on utilise une variable.
Pour la schmatiser, une variable est une bote, repre par une tiquette. Pour avoir
accs au contenu de la bote, il suffit de la dsigner par son tiquette.

Variable
tiquette

NB: Dans la mmoire vive de lordinateur, cette bote et cette tiquette colle dessus
nexistent pas. Il y a plutt un emplacement de mmoire, dsign par une adresse binaire.
La compilation dun langage informatique se charge de nous pargner la gestion
fastidieuse de ces emplacements mmoire et de leurs adresses. En affectant une tiquette
choisie par le programmeur pour chaque adresse binaire.
La premire chose faire avant de pouvoir utiliser une variable est de prparer son
emplacement mmoire : nous allons alors crer la bote et lui coller une tiquette. Ceci se
fait (pour les variables globales) au dbut de lalgorithme, avant mme les instructions
proprement dites. Cest ce quon appelle la dclaration des variables.
3. Type des variables

Pour crer une bote (rserver un emplacement mmoire) nous devons prciser sa taille.
Elle doit correspondre ce que lon voudra mettre dedans. a sera un gaspillage de
mmoire de crer une boite plus grande par rapport notre besoin. Et notre boite ne pourra
pas stocker linformation dont nous avons besoin si elle na pas une taille suffisante. Cest

TD Algorithmique

comme lexemple de construire un chteau pour stocker un oiseau ou construire une petite
cage pour stocker un lphant.

TD Algorithmique

Chapitre 1 : Les variables

Types numriques classiques


Type Numrique
Byte (octet)
Entier simple
Entier long
Rel simple
Rel double

Plage
0 255
-32 768 32 767
-2 147 483 648 2 147 483 647
-3,40E38 -1,40E-45 pour les valeurs ngatives
1,40E-45 3,40E38 pour les valeurs positives
1,79E308 -4,94E-324 pour les valeurs ngatives
4,94E-324 1,79E308 pour les valeurs positives

Question : Pourquoi ne pas dclarer toutes les variables numriques en rel double?
(Rponse : pour viter un gaspillage de mmoire rserve.)
Une dclaration algorithmique de variables aura ainsi cette forme :
Variable g en Entier Long
Variables PrixHT, TauxTVA, PrixTTC en Rel Simple
Types non numriques

Nos botes peuvent contenir une information autre que des nombres. Sans cela, on
serait un peu embt ds que lon devrait stocker un nom de famille, par exemple.
On dispose donc du type alphanumrique (galement appel type caractre) : dans
une variable de ce type, on stocke des caractres, quil sagisse de lettres, de signes de
ponctuation, despaces, ou de chiffres.
Une srie de caractres forme une chane de caractres. Et une telle chane de
caractres est toujours note entre guillemets. Comme 2010 peut reprsenter le nombre
2010, ou la suite de caractres 2, 0, 1 et 0.
Un autre type est le type boolen : on y stocke uniquement les valeurs logiques VRAI
et FAUX.
4. Linstruction daffectation

Comme nous lavons dj prsent une variable permet de stocker une information,
cette opration de stockage se fait travers laffectation, cest--dire lui attribuer une
valeur. En algorithmique, cette instruction se note avec le signe .
Exemple :
Variable Boite en Entier
//Cette ligne permet de rserver un espace mmoire suffisant pour contenir un entier au
//niveau de la dclaration notre boite est vide.

Boite

TD Algorithmique

Chapitre 1 : Les variables

Boite 12

12
Boite
//Cette instruction affecte la valeur 12 dans notre boite

Boite 20

20
Boite
//Cette nouvelle instruction crase lancienne valeur 12 et affecte la nouvelle valeur 20
//dans notre boite.

TD Algorithmique

Chapitre 1 : Les variables

TRAVAUX DIRIGES 1

LES VARIABLES

Exercice 1

Soit lalgorithme Test1 suivant :


Algorithme Test1
A 4
B 11
A B - A
B B - A
A A + B
Fin

1.

(1)
(2)
(3)
(4)
(5)

Que fait lalgorithme ci-dessus ?

2. Ce rsultat est-t-il toujours vrai ? Etablir la trace de cet algorithme (sous forme de
tableau) avec a et b pour valeurs initiales de A et B.
3. Ecrire un nouvel algorithme quivalant en nutilisant que des variables ? (Utiliser une
variable intermdiaire).
4. Que font les deux algorithmes ci-dessous ? (Trouver pour chacun ce quil fait grce
un exemple puis le prouver)
Algorithme Test2
Dbut
A A+B+C
B B+C
C A-C
A A-C
B C-B+A
C C-B
Fin

(1)
(2)
(3)
(4)
(5)
(6)

Algorithme Test3
Dbut
B B+C
C B-C
B B-C
A A+B
B A-B
A A-B
Fin

(1)
(2)
(3)
(4)
(5)
(6)

5. Ecrire un algorithme permettant de raliser la permutation circulaire de trois variables


dun mme type quelconque A, B et C en effectuant dabord la transposition des variables
A et B, ensuite celle des variable B et C. (NB : On utilisera une seule variable
intermdiaire.)

TD Algorithmique

Chapitre 1 : Les variables

6. Ecrire un algorithme qui ralise directement la permutation circulaire des trois


variables A, B et C en utilisant une variable intermdiaire et en ayant la dcomposition de
la permutation en transpositions.
7. Dnombrer les affectations et les oprations (additions et soustractions) effectues lors
de lexcution des 4 algorithmes ci-dessus (questions 4 6). Sachant quun ordinateur
prend une petite fraction de seconde pour effectuer chaque opration ou affectation,
8. Ecrire un algorithme ralisant la permutation circulaire des variables A, B, C et D.
Qui sera optimis au regard du temps dexcution. Combien comporte-t-il daffectations?
Gnraliser au cas de n variables.

Exercice 2

1.

Complter par le symbole de comparaison adquat (< ou >):


"AUTO"

..

"AVION"

1997

43

"1997"

"43"

"BAL"

"BALLON"

Exercice 3

2. Ecrire un algorithme complet pour calculer le primtre du rectangle, en utilisant au


mieux les instructions Saisir et Afficher, puis y ajouter le calcul de la surface.
3. Ecrire un algorithme qui demande le Prix Hors Taxes et la quantit dun article, puis
afficher une facture bien prsente (Taux de TVA est de 20,6%)

TD Algorithmique

Chapitre 1 : Les variables

TRAVAUX DIRIGES 1

CORRECTION TD 1

Exercice 1

Soit lalgorithme Test1 suivant :


Algorithme Test1
A 4
B 11
A B - A
B B - A
A A + B
Fin

1.

(1)
(2)
(3)
(4)
(5)

Que fait lalgorithme ci-dessus ?


Cet algorithme assure la permutation des valeurs des Variables A et B.
Instructions
1
2
3
4
5

4
4
7
7
11

-11
11
4
4

2. Ce rsultat est-t-il toujours vrai ? Etablir la trace de cet algorithme (sous forme de
tableau) avec a et b pour valeurs initiales de A et B.
Oui, cet algorithme assure la permutation des valeurs des variable A et B
quelque soit les valeurs initiaux a de la variable A et b de la variable B.

Instruction
1
2
3
4
5

TD Algorithmique

A
a
a
b-a
b-a
b

B
-b
b
a
a

Chapitre 1 : Les variables

3. Ecrire un nouvel algorithme quivalant en nutilisant que des variables ? (Utiliser


une variable intermdiaire).

Algorithme : Permuter2
// Permutation de deux variables
Variables A, B, Loulou : Entier
Dbut
Afficher (Veillez donner la valeur de la variable A )
Saisir(A)
Afficher (Veillez donner la valeur de la variable B)
Saisir(B)
Loulou A
AB
B Loulou
Afficher (Aprs excution de lalgorithme)
Afficher (La valeur de la variable A est de , A)
Afficher (La valeur de la variable B est de , B)
Fin

4. Que font les deux algorithmes ci-dessous ? (Trouver pour chacun ce quil fait grce
un exemple puis le prouver)
Algorithme Test2
Dbut
A A+B+C
B B+C
C A-C
A A-C
B C-B+A
C C-B
Fin

(1)
(2)
(3)
(4)
(5)
(6)

Algorithme Test3
Dbut
B B+C
C B-C
B B-C
A A+B
B A-B
A A-B
Fin

(1)
(2)
(3)
(4)
(5)
(6)

Algorithme Test2 :

Instruction
0
1
2
3
4
5
6

TD Algorithmique

A
a
a+b+c
a+b+c
a+b+c
c
c
c

B
b
b
b+c
b+c
b+c
a
a

C
c
c
c
a+b
a+b
a+b
b

Chapitre 1 : Les variables

Algorithme Test3 :
Instruction
0
1
2
3
4
5
6

A
a
a
a
a
a+c
a+c
c

B
b
b+c
b+c
c
c
a
a

C
c
c
b
b
b
b
b

Les algorithmes 2 et 3 font la permutation circulaire des variables A, B et C.

5. Ecrire un algorithme permettant de raliser la permutation circulaire de trois


variables dun mme type quelconque A, B et C en effectuant dabord la transposition
des variables A et B, ensuite celle des variable B et C. (NB : On utilisera une seule
variable intermdiaire.)

Algorithme 4 Permuter3_1
// Permutation circulaire de trois variables en effectuant dabord la transposition
des variables A et B, ensuite celle des variable B et C.
Variables A, B, C, Loulou : Entier
Dbut
Afficher (Veillez donner la valeur de la variable A )
Saisir(A)
Afficher (Veillez donner la valeur de la variable B)
Saisir(B)
Afficher (Veillez donner la valeur de la variable C)
Saisir(C)
Afficher (Au dbut)
Afficher (La valeur de la variable A est de , A)
Afficher (La valeur de la variable B est de , B)
Afficher (La valeur de la variable C est de , C)
Loulou A
AB
B Loulou
Loulou B
BC
C Loulou
Afficher (Aprs excution de notre algorithme)
Afficher (La valeur de la variable A est de , A)
Afficher (La valeur de la variable B est de , B)
Afficher (La valeur de la variable C est de , C)
Fin

TD Algorithmique

Chapitre 1 : Les variables

Ecrire un algorithme qui ralise directement la permutation circulaire des trois variables
A, B et C en utilisant une variable intermdiaire et en ayant la dcomposition de la
permutation en transpositions.

Algorithme 5 Permuter3_2
//Permutation circulaire de trois variables en utilisant une variable intermdiaire et
en ayant la dcomposition de la permutation en transpositions..
Variables A, B, C, Loulou : Entier
Dbut
Afficher (Veillez donner la valeur de la variable A )
Saisir(A)
Afficher (Veillez donner la valeur de la variable B)
Saisir(B)
Afficher (Veillez donner la valeur de la variable C)
Saisir(C)
Afficher (Au dbut)
Afficher (La valeur de la variable A est de , A)
Afficher (La valeur de la variable B est de , B)
Afficher (La valeur de la variable C est de , C)
Loulou A
AC
CB
B Loulou
Afficher (Aprs excution de notre algorithme)
Afficher (La valeur de la variable A est de , A)
Afficher (La valeur de la variable B est de , B)
Afficher (La valeur de la variable C est de , C)
Fin

6. Dnombrer les affectations et les oprations (additions et soustractions) effectues


lors de lexcution des 4 algorithmes ci-dessus (questions 4 6). Sachant quun
ordinateur prend une petite fraction de seconde pour effectuer chaque opration ou
affectation,
Algorithm 2 : 14 fractions de seconde
Algorithm 3 : 12 fractions de seconde
Algorithm 4 : 6 fractions de seconde
Algorithm 5 : 4 fractions de seconde
Lalgorithme 5 cote le moins en temps.

TD Algorithmique

Chapitre 1 : Les variables

7. Ecrire un algorithme ralisant la permutation circulaire des variables A, B, C et D.


Qui sera optimis au regard du temps dexcution. Combien comporte-t-il
daffectations? Gnraliser au cas de n variables.
Algorithme 6
// Permutation circulaire de trois variables en utilisant une variable intermdiaire
et en ayant la dcomposition de la permutation en transpositions..
Variables A, B, C, D, Loulou en Entier
Dbut
Afficher (Veillez donner la valeur de la variable A )
Saisir(A)
Afficher (Veillez donner la valeur de la variable B)
Saisir(B)
Afficher (Veillez donner la valeur de la variable C)
Saisir(C)
Afficher (Veillez donner la valeur de la variable D)
Saisir(D)
Afficher (Au dbut)
Afficher (La valeur de la variable A est de , A)
Afficher (La valeur de la variable B est de , B)
Afficher (La valeur de la variable C est de , C)
Afficher (La valeur de la variable D est de , D)
Loulou A
AD
DC
CB
B Loulou
Afficher (Aprs excution de notre algorithme)
Afficher (La valeur de la variable A est de , A)
Afficher (La valeur de la variable B est de , B)
Afficher (La valeur de la variable C est de , C)
Afficher (La valeur de la variable D est de , D)
Fin

Exercice 2

1. Complter par le symbole de comparaison adquat (< ou >):

TD Algorithmique

"AUTO"

..

"AVION"

1997

>

43

"1997"

"43"

"BAL"

"BALLON"

Chapitre 1 : Les variables

Exercice 3

1. Ecrire un algorithme complet pour calculer le primtre du rectangle, en utilisant au


mieux les instructions Saisir et Afficher, puis y ajouter le calcul de la surface.
2. Ecrire un algorithme qui demande le Prix Hors Taxes et la quantit dun article, puis
afficher une facture bien prsente (Taux de TVA est de 20,6%)

Algorithme Calcul du primtre du rectangle


Variables L, l, P en Entier
Dbut
Afficher (Veillez donner la longueur du rectangle )
Saisir(L)
Afficher (Veillez donner la largeur du rectangle)
Saisir(l)
P (L+l)*2
Afficher (Le primtre de votre rectangle est de : , P)
Fin

TD Algorithmique

10

CHAPITRE 2

LES STRUCTURES DE CONTROLE


1. Objectif

Dfinir, maitriser et manipuler les structures de contrle.


2. Les structures de contrle:

Il ny a que deux formes possibles pour un test ;


Linstruction conditionnelle Si :

Si expression logique Alors


Instructions
[Sinon
Instructions]
FinSi

Si lexpression logique (condition) prend la valeur vrai, le premier bloc dinstructions


est excut; si elle prend la valeur faux, le second bloc est excut (sil est prsent, sinon
rien).

Les conditionnelles embotes:

Si expression1(test1) Alors
Instructions 1
Sinon
Si expression2(test2) Alors
Instructions 2
Sinon
Instructions 3
FinSi
FinSi

On peut remplacer la suite de si par linstruction selon (permet une facilit dcriture)
Syntaxe:
selon <identificateur>
(liste de) valeur(s): instructions
(liste de) valeur(s): instructions
TD Algorithmique

11


[autres: instructions]

TD Algorithmique

12

Chapitre 2 : Les structures de contrle

3. Les structures itratives

La boucle pour:

Cest linstruction pour qui permet de faire des boucles dterministes. Il sagit de
rpter une suite dinstructions un certain nombre de fois.
Syntaxe:
pour <var> de valinit valfin [par <pas>] faire
Instructions excuter chaque boucle
Finpour

La boucle tant que:

Syntaxe:
initialisation des variables de condition
Tantque expression logique est vraie(test) faire
Instructions excuter chaque boucle
raffectation des variables de condition
FinTantque

Fonction: signifie rpter une suite dinstructions tant que la condition est remplie

La boucle rptertantque

Syntaxe:
rpter
(r)affectation des variables de condition
Instructions excuter chaque boucle
Tantque <expression logique est vraie>

Fonction: les instructions sont excutes au moins une fois et rptes tant que la
condition est remplie.

TD Algorithmique

13

TRAVAUX DIRIGES 2

LES STRUCTURES DE CONTROLE


Exercice 1

Ecrire un algorithme qui permet de saisir un nombre puis dtermine sil appartient un
intervalle donn, sachant que les extrmits de lintervalle sont fixes par lutilisateur.
Exercice 2

Ecrire un algorithme permettant de lire la valeur de la temprature de leau et dafficher


son tat :
GLACE
LIQUIDE
VAPEUR

si la temprature est infrieure 0,


si la temprature est strictement suprieure 0 et infrieure 100,
si la temprature est suprieure 100.

Exercice 3

Ecrire un algorithme qui demande une somme dargent comprise entre 1 et 100 et qui
affiche ensuite le nombre minimal de billets de 10, 5 et 1 qui la compose.
Exercice 4

Ecrire un algorithme qui permet de calculer an pour un nombre rel a et un entier


positif n.
Exercice 5

Ecrire un algorithme qui permet de calculer le factoriel dun nombre N positif, saisi au
clavier.
Exercice 6

Ecrire un algorithme qui dtermine si un entier N positif est parfait ou non. Un nombre
est dit parfait sil est gal la somme de ses diviseurs. Exemple : 6 = 1+2+3.
Exercice 7

Ecrire un algorithme qui permet de saisir un entier strictement positif N et dafficher


sil est premier ou non. Un nombre est dit premier sil est divisible uniquement par 1 et par
lui-mme.

TD Algorithmique

14

TRAVAUX DIRIGES 2

CORRECTION TD 2
Exercice 1

Ecrire un algorithme qui permet de saisir un nombre puis dtermine sil appartient un
intervalle donn, sachant que les extrmits de lintervalle sont fixes par lutilisateur.
Algorithme Test dappartenance un intervalle
Variable V, Bi, Bs: rels
Dbut
Rpter
afficher("Veuillez choisir une borne infrieure dun intervalle : ")
saisir(Bi)
afficher("Veuillez choisir une borne suprieure dun intervalle : ")
saisir(Bs)
Tant que(Bi>Bs)
afficher("Veuillez choisir une valeur : ")
saisir(V)
Si(V>=Bi et V<=Bs) Alors
afficher("La valeur ", V, "appartient lintervalle[", Bi, ",",Bs, "]" )
Sinon
afficher("La valeur ", V, "nappartient pas lintervalle[", Bi, ",",Bs, "]" )
Finsi
Fin

Exercice 2

Ecrire un algorithme permettant de lire la valeur de la temprature de leau et dafficher


son tat :
GLACE

si la temprature est infrieure 0,

LIQUIDE

si la temprature est strictement suprieure 0 et infrieure 100,

VAPEUR

si la temprature est suprieure 100.

TD Algorithmique

15

Chapitre 2 : Les structures de contrle

Algorithme tat de leau


Variable T: rel
Dbut
afficher("Veuillez donner la temprature de leau : ")
saisir(T)
Si(T<=0) Alors
afficher("Ltat de leau est GLACE " )
SinonSi(T>0 et T<100)Alors
afficher("Ltat de leau est LIQUIDE " )
Sinon
afficher("Ltat
de
leau
est
Finsi
Finsi
Fin

VAPEUR

")

Exercice 3

Ecrire un algorithme qui demande une somme dargent comprise entre 1 et 100 et qui
affiche ensuite le nombre minimal de billets de 10, 5 et 1 qui la compose.

Algorithme Composition de billets dune somme dargent


Variable Sa, B10,B5,B1: entiers
Dbut
Rpter
afficher("Veuillez donner la valeur dune somme dargent comprise entre 1 et 100
: ")
saisir(Sa)
Tant que(Sa<1 ou Sa>100)
B10
Sa Div 10
B5
(Sa Mod 10) Div 5
B1
Sa Mod 5
afficher("Le nombre de billets de 10 est : ", B10)
afficher("Le nombre de billets de 5 est : ", B5)
afficher("Le nombre de billets de 1 est : ", B1)
afficher("Le nombre minimal de billets est : ", B10+B5+B1)
Fin

TD Algorithmique

16

Chapitre 2 : Les structures de contrle


Exercice 4

On veut calculer an pour un nombre rel a et un entier positif n.


Algorithme a la puissance n
Variable n,i: entiers
a,ai: rels
Dbut
afficher("Veuillez donner un entier : ")
saisir(n)
afficher("Veuillez donner un rel : ")
saisir(a)
ai
a
pour (i de 2 n) faire
a
a*a
Finpour
Si( n=0) faire
a
1
FinSi
afficher(ai," la puissance", n, "est gale : ", a)
Fin

Exercice 5

Ecrire un algorithme qui permet de calculer le factoriel dun nombre N positif, saisi au
clavier.
Algorithme factoriel
Variable N,f: entiers
Dbut
Rpter
afficher("Veuillez donner un entier positif : ")
saisir(N)
Tant que(N<0)
f
1
pour (i de 2 N) faire
f
f*i
Finpour
afficher("Le factoriel du nombre ", N, "est gale : ", f)
Fin

TD Algorithmique

17

Chapitre 2 : Les structures de contrle


Exercice 6

Ecrire un algorithme qui dtermine si un entier N positif est parfait ou non. Un nombre
est dit parfait sil est gal la somme de ses diviseurs. Exemple : 6 = 1+2+3.
Algorithme Nombre parfait ?
Variable N,S: entiers
Dbut
Rpter
afficher("Veuillez donner un entier positif : ")
saisir(N)
Tant que(N<0)
S
0
pour (i de 1 N) faire
Si (N Mod i = 0) faire
S
S+ i
FinSi
Finpour
afficher("Le factoriel du nombre ", N, "est gale : ", f)
Fin
Exercice 7

Ecrire un algorithme qui permet de saisir un entier strictement positif N et dafficher


sil est premier ou non. Un nombre est dit premier sil est divisible uniquement par 1 et par
lui-mme.
Algorithme Nombre premier
Variable N: entiers
Premier : boolien
Dbut
Rpter
Afficher ("Veuillez donner un entier positif : ")
Saisir (N)
Tant que(N<=0)
Premier
vrai
i
2
Tant que (i < N et Premier) faire
Si (N Mod i ) faire
Premier
faux
FinSi
i
i+1
Fin Tant que
Si (Premier) faire
Afficher ("Le nombre ", N, "est premier")
Sinon
Afficher ("Le nombre ", N, "nest pas premier")
FinSi
Fin

TD Algorithmique

18

CHAPITRE 3

LES TABLEAUX A UNE DIMENSION

1. Objectif

Maitriser la dfinition et la manipulation des tableaux une dimension.


Maitriser les algorithmes de tri.

2. Dfinition

Un tableau est une variable de type complexe, elle peut tre dfinie comme un
ensemble de variables (de type simple) de mme types. Chaque cellule dans un tableau est
considre comme une variable (de type simple). On peut accder cette cellule travers
son indice.
3. Exemple

Soit un tableau Table de type entier et qui est compos de 10 lments.


Dclaration du tableau :

Types :
Tab : Tableau[1..50] dEntiers
Variables :
Table : Tab
//Pour affecter la valeur x la cellule de Table dindice k il suffit de faire
Table[k] x
//k est lindice de la kime cellule de Table.

TD Algorithmique

19

4. Algorithmes de tri

Trier un tableau c'est le fait d'organiser l'ensemble de ses lments selon un ordre
dtermin.
Les algorithmes de tri ne sont pas tous identiques. En effet, ils peuvent tre diffrencis
par la complexit algorithmique (fixer une borne suprieure du nombre d'oprations qui
seront ncessaires pour trier un ensemble de n lments), les ressources ncessaires
(notamment en termes d'espace mmoire utilis) et le caractre stable (garder l'ordre relatif
des quantits gales).

TD Algorithmique

20

TRAVAUX DIRIGES 3

LES TABLEAUX A UNE DIMENSION

Exercice 1 : Exemples d'algorithmes de tri

1.
Ecrire un programme qui lit la dimension N d'un tableau T du type entier
(dimension maximale: 50 composantes), remplit le tableau par des valeurs entres au
clavier et affiche le tableau.
2.
Ecrire un algorithme Tri__bulles qui permet de parcourir le tableau, et comparer
les couples d'lments successifs. Lorsque deux lments successifs ne sont pas dans
l'ordre croissant, les permuter. Aprs chaque parcours complet du tableau, recommencer
l'opration jusqu'aucune permutation n'a lieu pendant un parcours.
3.

Ecrire un algorithme Tri_par_slection dont le principe est de:


-

rechercher le plus petit lment du tableau, et l'changer avec l'lment d'indice 1 ;

rechercher le second plus petit lment du tableau, et l'changer avec l'lment


d'indice 2 ;

continuer de cette faon jusqu' ce que le tableau soit entirement tri.

4.

Ecrire un algorithme Tri_par_insertion dont le principe est de:


-

parcourir le tableau trier du dbut la fin.

au moment de considrer le i-me lment, les lments qui le prcdent doivent


tre dj tris

insrer le i-me lment sa place parmi ceux qui prcdent. Il faut pour cela
trouver o l'lment doit tre insr en le comparant aux autres, puis dcaler les
lments afin de pouvoir effectuer l'insertion.

5.

Dans le chapitre rcursivit nous allons traiter dautres exemples.

6.

Calculer et afficher ensuite la somme des lments du tableau.

7.
Ranger les lments du tableau T dans l'ordre inverse sans utiliser de tableau d'aide.
Afficher le tableau rsultant.
(Ide: Echanger les lments du tableau l'aide de deux indices qui parcourent le
tableau en commenant respectivement au dbut et la fin du tableau et qui se
rencontrent en son milieu.)

TD Algorithmique

21

Chapitre 3 : Les tableaux une dimension

Exercice 2

Ecrire un programme qui lit la dimension N d'un tableau T du type entier (dimension
maximale: 50 composantes), remplit le tableau par des valeurs entres au clavier et affiche
le tableau.
Copiez ensuite toutes les composantes strictement positives dans un deuxime tableau
TPOS et toutes les valeurs strictement ngatives dans un troisime tableau TNEG. Afficher
les tableaux TPOS et TNEG.
Exercice 3 : Produit scalaire de deux vecteurs

Ecrire un programme qui calcule le produit scalaire de deux vecteurs d'entiers U et V


(de mme dimension).
Exemple:
\

/ \

| 3 2 -4 | * | 2 -3 5 | = 3*2+2*(-3)+(-4)*5 = -20
/

\ /

Exercice 4 : Maximum et minimum des valeurs d'un tableau

Ecrire un programme qui dtermine la plus grande et la plus petite valeur dans un
tableau d'entiers A. Afficher ensuite la valeur et la position du maximum et du minimum.
Si le tableau contient plusieurs maxima ou minima, le programme retiendra la position du
premier maximum ou minimum rencontr.

Exercice 5 : Insrer une valeur dans un tableau tri

Un tableau A de dimension N+1 contient N valeurs entires tries par ordre croissant;
la
(N+1) ime valeur est indfinie. Insrer une valeur VAL donne au clavier dans le
tableau A de manire obtenir un tableau de N+1 valeurs tries.

Exercice 6 : Recherche d'une valeur dans un tableau

Problme: Rechercher dans un tableau d'entiers A une valeur VAL entre au clavier.
Afficher la position de VAL si elle se trouve dans le tableau, sinon afficher un message
correspondant.

TD Algorithmique

22

Chapitre 3 : Les tableaux une dimension

La valeur POS qui est utilise pour mmoriser la position de la valeur dans le tableau,
aura la valeur -1 aussi longtemps que VAL n'a pas t trouve.
Implmenter deux versions:
a) La recherche squentielle
Comparer successivement les valeurs du tableau avec la valeur donne.
b) La recherche dichotomique ('recherche binaire', 'binary search')
Condition: Le tableau A doit tre tri
Comparer le nombre recherch la valeur au milieu du tableau,
- s'il y a galit ou si le tableau est puis, arrter le traitement avec un message
correspondant.
- si la valeur recherche prcde la valeur actuelle du tableau, continuer la recherche
dans le demi-tableau gauche de la position actuelle.
- si la valeur recherche suit la valeur actuelle du tableau, continuer la recherche dans le
demi-tableau droite de la position actuelle.
Ecrire le programme pour le cas o le tableau A est tri par ordre croissant.
Question: Quel est l'avantage de la recherche dichotomique? Expliquer brivement.
Exercice 7 : Fusion de deux tableaux tris

Problme: On dispose de deux tableaux A et B (de dimensions respectives N et M),


tris par ordre croissant. Fusionner les lments de A et B dans un troisime tableau FUS
tri par ordre croissant.
Mthode: Utiliser trois indices IA, IB et IFUS. Comparer A(IA) et B(IB); remplacer
FUS(IFUS) par le plus petit des deux lments; avancer dans le tableau FUS et dans le
tableau qui a contribu son lment. Lorsque l'un des deux tableaux A ou B est puis, il
suffit de recopier les lments restants de l'autre tableau dans le tableau FUS.
Exercice 8 : Tri par slection du maximum

Problme: Classer les lments d'un tableau A par ordre dcroissant.


Mthode: Parcourir le tableau de gauche droite l'aide de l'indice I. Pour chaque
lment A(I) du tableau, dterminer la position PMAX du (premier) maximum droite de
A(I) et changer A(I) et A(PMAX).
Exercice 9 : Tri par propagation (bubble sort)

Problme: Classer les lments d'un tableau A par ordre croissant.


Mthode: En recommenant chaque fois au dbut du tableau, on effectue plusieurs
reprises le traitement suivant: On propage, par permutations successives, le plus grand
lment du tableau vers la fin du tableau (comme une bulle qui remonte la surface d'un
liquide).

TD Algorithmique

23

CHAPITRE 4

LES TABLEAUX A DEUX DIMENSIONS


1. Objectif

Maitriser la dfinition et la manipulation des tableaux deux dimensions.

2. Dfinition

Une matrice est un tableau deux dimensions. Chaque ligne dune matrice est un
tableau une dimension.

3. Exemple

Soit une matrice MaMatrice de type entier et qui est compos de 10 lignes et 10
colonnes.
Dclaration du tableau :
Types :
Tab : MaMatrice[1..50 ; 1..50] dEntiers
Variables :
Table : Tab
//Pour affecter la valeur x la cellule de la ligne l et la colonne c de la matrice
// il suffit de faire
Matrice[l][c]

//l est lindice de la lime ligne de MaMatrice.


////c est lindice de la cime colonne de MaMatrice.

TD Algorithmique

24

TRAVAUX DIRIGES 4

LES TABLEAUX A DEUX DIMENSIONS

Exercice 1. (Mise zro de la diagonale principale d'une matrice)

Ecrire un programme qui met zro les lments de la diagonale principale d'une
matrice carre A donne par lutilisateur.

Exercice 2. (Matrice unitaire)

Ecrire un programme qui construit et affiche une matrice carre unitaire U de


dimension N.
Une matrice unitaire est une matrice, telle que:
/ 1 si i=j
uij =
\ 0 si ij

Exercice 3. Transposition d'une matrice

Ecrire un Algorithme qui effectue la transposition tA d'une matrice A de dimensions N


et M en une matrice de dimensions M et N.
a) La matrice transpose sera mmorise dans une deuxime matrice B qui sera ensuite
affiche.
b) La matrice A sera transpose par permutation des lments.
Rappel:

tA = t | a b c d | =

| a e i|

|ef g h |

| b f j|

|i j k l

| c gk|

| d hl|

TD Algorithmique

25

Chapitre 4 : Les tableaux deux dimensions

Exercice 4. Multiplication d'une matrice par un rel

Ecrire un algorithme qui ralise la multiplication d'une matrice A par un rel X.


Rappel:
|a b
X* |e f
|i

c d|

| X*a X*b X*c

X*d |

g h| =

| X*e X*f X*g

X*h |

| X*i X*j

l|

X*k

X*l

a) Le rsultat de la multiplication sera mmoris dans une deuxime matrice A qui sera
ensuite affiche.
b) Les lments de la matrice A seront multiplis par X.
Exercice 5. Addition de deux matrices

Ecrire un algorithme qui ralise l'addition de deux matrices A et B de mmes


dimensions N et M.

Rappel:
|abc d |

| a' b' c' d' |

| a+a' b+b' c+c' d+d' |

| e f g h | + | e' f' g' h' | =

| e+e' f+f'

g+g' h+h' |

|i j k l |

| i+i'

k+k'

| i' j' k' l' |

j+j'

l+l' |

a) Le rsultat de l'addition sera mmoris dans une troisime matrice C qui sera ensuite
affiche.
b) La matrice B est ajoute A.

Exercice 6. Multiplication de deux matrices

En multipliant une matrice A de dimensions N et M avec une matrice B de dimensions M


et P on obtient une matrice C de dimensions N et P:
A(N,M) * B(M,P) = C(N,P)

La multiplication de deux matrices se fait en multipliant les composantes des deux matrices
lignes par colonnes:

TD Algorithmique

26

Chapitre 4 : Les tableaux deux dimensions

Ecrire un algorithme qui effectue la multiplication de deux matrices A et B. Le rsultat de


la multiplication sera mmoris dans une troisime matrice C qui sera ensuite affiche.

Exercice 7. Triangle de Pascal

Ecrire un algorithme qui construit le triangle de PASCAL de degr N et le mmorise dans


une matrice carre P de dimension N+1.
Exemple: Triangle de Pascal de degr 6:
n=1 1
n=2 1 1
n=3 1 2 1
n=4 1 3 3 1
n=5 1 4 6 4 1
n=6 1 5 10 10 5 1
n=7 1 6 15 20 15 5 1

Mthode:
Calculer et afficher seulement les valeurs jusqu' la diagonale principale (incluse). Limiter
le degr entrer par l'utilisateur 13.
Construire le triangle ligne par ligne:
- Initialiser le premier lment et l'lment de la diagonale 1.
- Calculer les valeurs entre les lments initialiss de gauche droite en utilisant la
relation:
Pi,j = Pi-1,j + Pi-1,j-1

Exercice 8. Recherche de 'points-cols'

Rechercher dans une matrice donne A les lments qui sont la fois un maximum sur leur
ligne et un minimum sur leur colonne. Ces lments sont appels des points-cols. Afficher les
positions et les valeurs de tous les points-cols trouvs.
TD Algorithmique

27

Chapitre 4 : Les tableaux deux dimensions

TD Algorithmique

28

TRAVAUX DIRIGES 5

LES FONCTIONS
Objectif

Maitriser la dfinition et la manipulation des tableaux deux dimensions.


Exercice 1

1. Ecrire un programme se servant d'une fonction MOYENNE pour afficher la


moyenne arithmtique de deux nombres rels entrs au clavier.
2. Ecrire une fonction MIN et une fonction MAX qui dterminent le minimum et le
maximum de deux nombres rels.
Ecrire un programme se servant des fonctions MIN et MAX pour dterminer le
minimum et le maximum de quatre nombres rels entrs au clavier.
3. Ecrire la fonction NCHIFFRES qui obtient une valeur entire N (positive ou
ngative) comme paramtre et qui fournit le nombre de chiffres de N comme rsultat.
Ecrire un petit programme qui teste la fonction NCHIFFRES:
Exemple:
Introduire un nombre entier : 6457392
Le nombre 6457392 a 7 chiffres.
4. En mathmatiques, on dfinit la fonction factorielle de la manire suivante:
0! = 1
n! = n*(n-1)*(n-2)* ... * 1 (pour n>0)
Ecrire une fonction FACT qui reoit la valeur de lentier N comme paramtre et qui
fournit la factorielle de N comme rsultat. Ecrire un petit programme qui teste la fonction
FACT.

TD Algorithmique

29

Chapitre 5 : Les fonctions

Exercice 2

N est un nombre entier positif donn par lutilisateur du programme.


Soit les trois fonctions suivantes:
SOMME_1 = 1+2++N ;
SOMME_2=12+22++N2 ;
PRODUIT_1 = 1*2*3*.*N
Ecrire un programme qui calcule:
SOMME= SOMME_1 + SOMME_2 + PRODUIT_1
MOYENNE = (SOMME_1 + SOMME_2 + PRODUIT_1)/3
Et
PRODUIT = SOMME_1 * SOMME_2 * PRODUIT_1

Exercice 3

Ecrire un programme de Test de code de la route.


Voici le test programmer :
Rpondez par O pour Oui et par N pour Non (lutilisateur doit obligatoirement
rpondre par O ou par N)
1. Peut-t-on passer au feu rouge ?
2. Doit-t-on marquer un arrt au stop ?
3. Doit-t-on ralentir au carrefour ?
4. Peut-t-on rouler 80 Km/H au centre ville ?
5. Le feu est vert et un piton est au milieu de la route, on doit sarrter et lattendre ?

TD Algorithmique

30

TRAVAUX DIRIGES 6

LES ENREGISTREMENTS

Exercice1 :

Quel est lapport des tableaux par rapport aux variables?


Un tableau est une extension dune variable. En effet, il est compos de
plusieurs variables de mme type appeles les lments du tableau.
Quel est lapport des enregistrements par rapport aux variables et aux tableaux que
nous avons utilis jusqu prsent ?
Un enregistrement est une extension dun tableau. En effet, il est compos de
plusieurs variables de types diffrents appeles les lments de
lenregistrement. Un enregistrement est donc un type compos.
Exemple :

//Pour dfinir le type nombre complexe nous pouvons faire recours aux
enregistrements :
Types
Complexe =

Struct
reel
imag
FinStruct

: Rel
: Rel

(*Pour manipuler des variables de type enregistrement il est ncessaire de prciser le


nom de lenregistrement, suivi dun point puis de lindicateur du champ concern.
Pour crer un nombre complexe C0= 2.5+3i*)
Variables
C0 : Complexe
Dbut
C0.reel
2.5
C0.imag
Fin

TD Algorithmique

31

Chapitre 6 : Les enregistrements

Exercice 2 :

Ecrire un algorithme qui lit deux nombres complexes C1 et C2 et qui affiche ensuite leur
somme et leur produit.
Sachant que :
(a+bi)+(c+di)=(a+c)+(b+d)i
(a+bi)*(c+di)=(ac-bd)+(ad+bc)i
Algorithme CalculComplexe
Types
Complexe =
Struct
reel
imag
FinStruct

: Rel
: Rel

Variables
S, P, C1, C2 : Complexe
Dbut
Ecrire(Veillez donner la partie relle du 1er nombre complexe : )
Lire(C1.reel)
Ecrire(Veillez donner la partie imaginaire du 1er nombre complexe : )
Lire(C1.imag)
Ecrire(Veillez donner la partie relle du 2eme nombre complexe : )
Lire(C12.reel)
Ecrire(Veillez donner la partie imaginaire du 2eme nombre complexe : )
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.reel (C1.reel * C2.imag)+( C1.imag * C2.reel)
Ecrire(Produit = , P.reel, + , P.imag, i )
Fin

TD Algorithmique

32

CHAPITRE 7

LES FICHIERS SEQUENTIELS

1. Objectif

Comprendre les concepts de base relatifs aux fichiers.


Manipuler des fichiers organisation squentielle.
2. Questions

Quel est lapport des fichiers pour un programmeur ?


Les algorithmes sur les fichiers permettent la sauvegarde permanente des donnes,
comme ils permettent aussi la lecture des donnes stockes dans des fichiers de donnes.
Ceci est trs utile pour le programmeur. Imaginez quun programme ncessite quelques
jours pour offrir un rsultat final et quil a besoin de lire des nouvelles donnes chaque 2H.
Les fichiers permettent de prvoir la lecture automatique de ces donnes en absence du
programmeur. Do un gain de temps et deffort.
Si on prend aussi lexemple dun jeu, la sauvegarde du jeu se fait automatiquement et
en temps rel. Cette sauvegarde se fait par les fichiers.
3. Exemples

(*Dclaration dune variable de type fichier*)


Types
Etudiant =

Struct
CIN
Nom
Prnom
Classe
FinStruct

: Entier
: Chaine[30]
: Chaine[30]
: Chaine[5]

Fetud = Fichier

TD Algorithmique

33

Chapitre 7 : Les fichiers squentiels

(*Procdure permettant de crer et remplir un fichier fe dtudiants*)


Procdure Cration(Var fe :Fetud)
Variables
et :Etudiant (*variable tampon*)
Dbut
Ouvrir(fe,E)
Ecrire( CIN de ltudiant : )
Lire(et.CIN)
TantQue(et.CIN0)Faire
Ecrire( Donner le nom de ltudiant : )
Lire(et.Nom)
Ecrire( Donner le prnom de ltudiant : )
Lire(et.Prnom)
Ecrire( Donner la classe de ltudiant : )
Lire(et.Classe)
Ecrire(fe,et)
Ecrire( CIN de ltudiant : )
Lire(et.CIN)
FinTQ
Fermer(fe)
Fin

(*Procdure qui assure le parcours dun fichier organisation squentielle*)


Procdure Consultation(Var fe :Fetud)
Variables
et :Etudiant (*variable tampon*)
Dbut
Ouvrir(fe,L)
Lire(fe,et)
TantQue(NON(FDF(fe)))Faire
Ecrire (et.CIN,et.Nom,et.Prnom,et.Classe)
Lire(fe,et)
FinTQ
Fermer(fe)
Fin

(*Procdure qui assure le parcours dun fichier de type texte organisation


squentielle*)
Procdure ParcoursFichText(Var ftext :Fetud)
Variables
ligne :Chaine (*variable tampon*)
Dbut
Ouvrir(ftext,L)
Lire_Lig(ftext,ligne)
TantQue(NON(FDF(ftext)))Faire
Ecrire (ligne)
Lire(ftext,ligne)
FinTQ
Fermer(ftext)
Fin

TD Algorithmique

34

TRAVAUX DIRIGES 7

LES FICHIERS SEQUENTIELS

Exercice 1

1. Ecrire une procdure permettant de crer et remplir le fichier (de type Fi_employs)
qui contient des informations sur les employs dune entreprise (matricule, nom, prnom,
grade, salaire).
(*Dclaration dune variable de type fichier*)
Types
Employ =

Struct

matricule
nom
prnom
grade
salaire
FinStruct
Fi_employs = Fichier

: Entier
: Chaine[30]
: Chaine[30]
: Chaine[10]
: Entier

(*Procdure permettant de crer et remplir un fichier de type Fi_employs*)


Procdure Cration(Var fe : Fi_employs)
Variables
em : Employ (*variable tampon*)
Dbut
Ouvrir(fe,E)
Ecrire( matricule de ltudiant : )
Lire(em.matricule)
TantQue(em.matricule0)Faire
Ecrire( Donner le nom de lemploy : )
Lire(em.nom)
Ecrire( Donner le prnom de lemploy : )
Lire(em.prnom)
Ecrire( Donner le grade de lemploy : )
Lire(em.grade)
Ecrire( Donner le salaire de lemploy : )
Lire(em.salaire)
Ecrire(fe,em)
Ecrire( matricule de lemploy : )
Lire(em.matricule)
FinTQ
Fermer(fe)
Fin

TD Algorithmique

35

Chapitre 7 : Les fichiers squentiels

2. Ecrire une procdure permettant dafficher la liste des employs partir du


fichier de type Fi_employs.
(*Procdure qui assure le parcours dun fichier organisation squentielle*)
Procdure Consultation(Var fe : Fi_employs)
Variables
em : Employ
Dbut
Ouvrir(fe,L)
Lire(fe,em)
TantQue(NON(FDF(fe)))Faire
Ecrire (em.matricule,em.nom,em.prnom,em.grade,em.salaire)
Lire(fe,em)
FinTQ
Fermer(fe)
Fin

3. Ecrire une fonction permettant dafficher la liste des employs dont le salaire est
compris entre 500 et 700 DT.
(*Procdure qui assure le parcours dun fichier organisation squentielle*)
Procdure Consultationbis(Var fe : Fi_employs)
Variables
em : Employ
Dbut
Ouvrir(fe,L)
Lire(fe,em)
TantQue(NON(FDF(fe)))Faire
Si(em.salaire>=500 ET em.salaire<=700)alors
Ecrire (em.matricule,em.nom,em.prnom,em.grade,em.salaire)
FinSi
Lire(fe,em)
FinTQ
Fermer(fe)
Fin

4. Ecrire une procdure permettant de rechercher un employ dans le fichier


Fi_employs partir de son matricule. Si lemploy est trouv, lalgorithme doit afficher
son nom, son prnom et son grade, sinon il doit afficher ce message Ce matricule ne
figure pas dans le fichier

Procdure Recherchemat(Var fe : Fi_employs, MER : Entier)


Variables
em : Employ
Dbut
Ouvrir(fe,L)
Lire(fe,em)
Si(em.matricule=MER)alors
Ecrire (em.nom,em.prnom,em.grade)
FinSi
TantQue(NON(FDF(fe)) ET em.matricule MER )Faire
TD Algorithmique

36

Chapitre 7 : Les fichiers squentiels

Lire(fe,em)
Si(em.matricule=MER)alors
Ecrire (em.nom,em.prnom,em.grade)
FinSi
FinTQ
Fermer(fe)
Fin

5. Copier les salaires des employs dans un tableau T_Salaire

Type
Tab :Tableau[1..50] :Entier
Procdure CopieSalaires(Var fe : Fi_employs, T_Salaire :Tab)
Variables
em : Employ
i : Entier
Dbut
i 1
Ouvrir(fe,L)
Lire(fe,em)
TantQue(NON(FDF(fe)))Faire
T_Salaire[i] em.salaire
i i+1
Lire(fe,em)
FinTQ
Fermer(fe)
Fin

6. Trier le tableau T_Salaire dans lordre dcroissant.

Procdure Trie(Var T_Salaire :Tab)


Variables
i,x : Entier
change : Boolen
Dbut
Rpter
Echange Faux
Pour i de 1 50 Faire
Si(T_Salaire[i]< T_Salaire[i+1])alors
x T_Salaire[i]
T_Salaire[i] T_Salaire[i+1]
T_Salaire[i+1] x
change Vrai
FinSi
FinPour
Jusqu(change = Faux)
Fin

TD Algorithmique

37

Chapitre 7 : Les fichiers squentiels

7. Copier les Salaires tris dans un nouveau fichier Fi_Salaires


Types
Fi_Salaire = Fichier dentiers
Procdure CrationFiSalaire(Var fs : Fi_Salaire, T_Salaire :Tab)
Variables
i
: Entier
Dbut
Ouvrir(fs,E)
Pour i de 1 50Faire
Ecrire(fs,T_Salaire[i])
FinPour
Fermer(fs)
Fin

8. Ecrire une fonction permettant dafficher les Salaires tris des employs partir de
Fi_Salaires.

Procdure Consultationbis(Var fs : Fi_Salaire)


Variables
Salaire : Entier
Dbut
Ouvrir(fs,L)
Lire(fs,Salaire)
TantQue(NON(FDF(fs)))Faire
Ecrire (Salaire)
Lire(fs,Salaire)
FinTQ
Fermer(fs)
Fin

Exercice 2

Ecrire un algorithme permettant de :


1. Crer et remplir un fichier Fnote qui contient les notes de 30 tudiants (CIN, nom,
prnom, note).
2. Copier les notes dans un tableau Tnote.
3. Trier le tableau Tnote dans lordre croissant.
4. Copier les notes tries du tableau vers le fichier fnotes.

Exercice 3

TD Algorithmique

38

Chapitre 7 : Les fichiers squentiels

1. Quelles sont les spcificits dun fichier de type Texte.


2. Ecrire une fonction permettant de lire et dafficher le contenu dun fichier de
type texte.

Exercice 4

Crer sur disquette puis afficher l'cran le fichier INFORM.TXT dont les
informations sont structures de la manire suivante:
Numro de matricule (entier)
Nom (chane de caractres)
Prnom (chane de caractres)
Le nombre d'enregistrements crer est entrer au clavier par l'utilisateur.
Exercice 5

Ecrire un programme qui cre sur disquette un fichier INFBIS.TXT qui est la copie
exacte (enregistrement par enregistrement) du fichier INFORM.TXT.
Exercice 6

Ajouter un nouvel enregistrement (entr au clavier) la fin de INFORM.TXT et sauver


le nouveau fichier sous le nom INFBIS.TXT.
Exercice 7

Insrer un nouvel enregistrement dans INFORM.TXT en supposant que le fichier est


tri relativement la rubrique NOM et sauver le nouveau fichier sous le nom
INFBIS.TXT.
Exercice 8

Supprimer dans INFORM.TXT tous les enregistrements:


a) dont le numro de matricule se termine par 8
b) dont le prnom est "Paul"
c) dont le nom est un palindrome. Dfinir une fonction d'aide PALI qui fournit le
rsultat 1 si la chane transmise comme paramtre est un palindrome, sinon la valeur zro.

TD Algorithmique

39

Chapitre 7 : Les fichiers squentiels

Sauver le nouveau fichier chaque fois sous le nom INFBIS.TXT.


Exercice 9

Crer sur disquette puis afficher l'cran le fichier FAMILLE.TXT dont les
informations sont structures de la manire suivante:
Nom de famille
Prnom du pre
Prnom de la mre
Nombre d'enfants
Prnoms des enfants
Le nombre d'enregistrements crer est entr au clavier.
Attention: Le nombre de rubriques des enregistrements varie avec le nombre d'enfants!

TD Algorithmique

40

TRAVAUX DIRIGES 8

LA RECURSIVITE

Objectifs

Rsoudre les problmes rcursifs

Comparer les approches de programmation itrative et rcursive.

Dfinition : Une procdure (ou une fonction) rcursive est une procdure (ou une
fonction) dont le corps contient un ou plusieurs appels elle-mme.

Exemple :

1. Ecrire un algorithme Tri_par_fusion dont le principe est dcrit rcursivement comme


suit:
-

Dcouper en deux parties peu prs gales les donnes trier

Trier les donnes de chaque partie

Fusionner les deux parties

2. Ecrire un algorithme Tri_rapide dont le principe est rcursivement dcrit comme suit:
Placer un lment du tableau (appel pivot) sa place dfinitive, en permutant
tous les lments de telle sorte que tous ceux qui sont infrieurs au pivot soient sa
gauche et que tous ceux qui sont suprieurs au pivot soient sa droite. Cette opration
s'appelle le partitionnement. Pour chacun des sous-tableaux, dfinir un nouveau pivot
et rpter l'opration de partitionnement. Ce processus est rpt rcursivement,
jusqu' ce que l'ensemble des lments soit tri.

Exercice 1

Transformer la procdure suivante en une fonction (ou une procdure) rcursive:


Procdure Factoriel (N : Entier, P : Rel)
Variables :
i : Entier
Dbut

TD Algorithmique

41

TD Algorithmique

42

Chapitre 8 : La Rcursivit

Pour i de 1 N faire
P P*i
Fin Pour
Fin

Fonction Factoriel (n:Entier)


Dbut
Si (n<=1) alors
Factoriel 1
Sinon
Factoriel n * Factoriel (n-1)
Finsi
Fin

Procdure Factoriel (i:Entier,n:Entier, p: Entier)


Dbut
Si (i<=n) alors
p
p * i;
Factoriel (i+1,n,p)
FinSi
Fin

Exercice 2
Ecrire une procdure itrative et une procdure rcursif qui affiche tout le contenu d'un
tableau T de taille n.
Pour i de 1 n faire
Ecrire(T[i])
FinPour

Procdure Afficher (i: Entier; T:Tab; n:Entier)


Dbut
Si (i <= n) alors
ECRIRE(T[i])
Afficher(i+1, T, n)
FinSi
Fin

Procdure Afficher (T:Tab; n:Entier)


Dbut
Si (n>=1) alors
Ecrire (T[n])
Afficher(T, n-1)
FinSi
Fin

TD Algorithmique

43

Chapitre 8 : La Rcursivit

Exercice 3
Transformer la procdure ci-dessous en sous-programme rcursif :

Procdure F( T: Tab, N: Entier)


Variables :
i, m : Entier
Dbut
m 1
POUR i de 2 n FAIRE
SI (T[m] < T[i]) ALORS
m i
FINSI
FINPOUR
F m
Fin

Procdure Recherche (i: Entier; T:Tab; n:Entier; m: Entier)


Dbut
Si (i <= n) alors
Si (T[m]<T[i]) alors
m <-- i
FinSi
Recherche (i+1, T, n, m)
FinSi
Fin

Exercice 4

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.
Fonction PGCD_Eu (a:Entier, b:Entier) :Entier
Dbut
Si (a mod b = 0) alors
PGCD_Eu b
Sinon
PGCD_Eu PGCD_Eu (b, a mod b)
finsi
Fin

TD Algorithmique

44

Chapitre 8 : La Rcursivit
Exercice 5

Calcul du nombre de combinaisons de p lments parmi n.


Ecrire une fonction rcursive CNP qui calcule le nombre de combinaison de p lments
parmi n lments diffrents par la formule suivante

=n

=1
p

= C

n-1 +

n-1

Fonction CNP (n:Entier, p:Entier) :Entier


Dbut
Si (p = 1) alors
CNP n
sinonsi(p=n)alors
CNP 1
Sinon
CNP CNP(n-1,p)+ CNP(n-1,p-1)
finsi
Fin

Exercice 6

Ecrire une fonction rcursive Palind qui vrifie si une chaine de caractres est un
palindrome ou non.
Formellement une chaine S de n caractres est un palindrome si et seulement si :
Pour tout i, 1 i n div 2, S[i]= S[n-i+1]
Une condition ncessaire est que les caractres extrmes soient identiques et que la
sous chaine prive des caractres extrmes soit galement un palindrome.

Fonction Palindrome (s:Chaine) :Boolen


Dbut
Si (Long(s)<2) alors
Palindrome Vrai
sinon
Palindrome (s[1]=s[Long(s)] ET Palindrome(copie(s,2,Long(s)-2)))
finsi
Fin

Exercice 7

TD Algorithmique

45

Chapitre 8 : La Rcursivit

Fonction 91 de MacCarty
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


Fonction F91 (n:Entier) :Entier
Dbut
Si (n>100) alors
F91 n-10
Sinon
F91 F91(F91(n+11))
finsi
Fin

Exercice 8

Transformer en sous-programme rcursif :


Module de calcul de l'occurrence (nombre d'apparitions) dun entier X dans un tableau
T de taille n.
Version itrative
Fonction Occurrence(T:Tab, n:Entier, X:Entier): Entier
Variables :
i : Entier
Dbut
p 0
Pour i de 1 n Faire
Si (T[i] = X) Alors
p p+1
FINSI
FinPour
Occurrence p
Fin

Procdure Occurrence (i: ENTIER, T:TAB, n:ENTIER, X:ENTIER, VAR p:


ENTIER)
Dbut
Si ( i <= n) alors
Si (T[i] = X) alors
p <-- p + 1
FinSi
Occurrence(i+1, T, n, X, p)
FinSi
Fin

Fonction Occurrence (i: ENTIER, T:TAB, n:ENTIER, X:ENTIER):Entier


TD Algorithmique

46

Chapitre 8 : La Rcursivit

Dbut
Si (i<=n) alors
Si (T[i]=X) alors
Occurrence <-- 1 + Occurrence(i+1,T,n,X)
Sinon
Occurrence <-- Occurrence(i+1,T,n,X)
FinSi
FinSi
Fin

TD Algorithmique

47

CHAPITRE 9

LES POINTEURS

1. Objectifs

Accder aux donnes dans la mmoire de l'ordinateur l'aide de pointeurs, c.--d.


l'aide de variables auxquelles on peut attribuer les adresses d'autres variables.
Les pointeurs nous permettent d'crire des programmes plus compacts et plus efficients
et fournissent souvent la seule solution raisonnable un problme.

2. Dfinition: Pointeur

Un pointeur est une variable spciale qui peut contenir l'adresse d'une autre variable.
Si un pointeur P contient l'adresse d'une variable A, on dit que 'P pointe sur A'.
Remarques

Les pointeurs et les noms de variables ont le mme rle: Ils donnent accs un
emplacement dans la mmoire interne de l'ordinateur. Il faut quand mme bien faire la
diffrence:
* Un pointeur est une variable qui peut 'pointer' sur diffrentes adresses.
* Le nom d'une variable reste toujours li la mme adresse.
3. Dclaration dun pointeur :
Types :
Pointeur : ^Entier
Variables
A : Entier
P : Pointeur

TD Algorithmique

48

Chapitre 9 : Les pointeurs

/*le pointeur P prend ladresse dune autre variable A (P pointe sur A)*/
P

Adresse(A)

20

E001

A
Adresse : E001

Le nom d'un tableau reprsente l'adresse de son premier lment.


Types :
Tab : Tableau[1..50] de Entiers
Pointeur : ^Entier
Variables
A : Tab
P : Pointeur

Adresses :

E01

E02

En-2 En-1 En

/*le ponteur P prend ladresse de la premire cellule du tableau A (P pointe sur le


premier lment de A)*/

E01

TD Algorithmique

49

Chapitre 9 : Les pointeurs

1
9

adresses E01

E02

E03

P P+1
P^

En

E02

12

/*Le contenu de llment de A dont ladresse est E02 (Le contenu de P) prend la valeur
12.*/
A
3

2
adresses E01

TD Algorithmique

9
E02

E03

En

50

TRAVAUX DIRIGES 9

LES POINTEURS
Exercice 1

Ecrire un programme qui lit deux tableaux d'entiers A et B et leurs dimensions N et M


au clavier et qui ajoute les lments de B la fin de A. Utiliser le formalisme pointeur.

Algorithme Ajoutdetab
Variables
A : Tableau[1..100] de Entiers
B : Tableau[1..50] de Entiers
N, M : Entiers /* dimensions des tableaux */
I : Entier /* indice courant */
Dbut
/* Saisie des donnes */
Ecrire("Dimension du tableau A (max.50) : ")
Lire(N)
Pour I de 1 N Faire
Ecrire("Elment", I, " : ")
Lire(A[I])
Fin pour
Ecrire("Dimension du tableau B (max.50) : ");
Lire(M)
Pour I de 1 M Faire
Ecrire("Elment", I, " : ")
Lire(B[I])
Fin pour
/* Affichage des tableaux */
Ecrire("Tableau donn A :")
Pour I de 1 N Faire
Ecrire((A+I)^)
Fin pour
Ecrire("Tableau donn B :")
Pour I de 1 M Faire
Ecrire((B+I)^)
Fin pour
/* Copie de B la fin de A */
Pour I de 1 M Faire
(A+N+I)^ (B+I)^
Fin pour
/* Nouvelle dimension de A */
N N+M;
/* Edition du rsultat */
Ecrire("Tableau rsultat A :")
TD Algorithmique

51

Chapitre 9 : Les pointeurs

Pour I de 1 N Faire
Ecrire((A+I)^)
Fin pour
Fin

Exercice 2

Ecrire un programme qui lit un entier X et un tableau A du type Entier au clavier et


limine toutes les occurrences de X dans A en tassant les lments restants. Le
programme utilisera les pointeurs P1 et P2 pour parcourir le tableau.
Algorithme EliminerXdeA
Types :
Tab : Tableau[1..100] de Entiers
Pointeur : ^Entier
Variables
A : tab
N : Entier /* dimension du tableau */
X : Entier
P1,P2 : Pointeurs
Dbut
/* Saisie des donnes */
Ecrire("Dimension du tableau A (max.100) : ")
Lire(N)
Pour P1 de A A+N Faire
Ecrire("Elment", P1-A, " : ")
Lire(P1^)
Fin pour
Ecrire("Valeur supprimer du tableau ")
Lire(X)
/* Affichage des tableaux */
Ecrire("Tableau donn A :")
Pour P1 de A A+N Faire
Ecrire((P1)^)
Fin pour
/* Effacer toutes les occurrences de X et comprimer : */
/* Copier tous les lments de P1 vers P2 et augmenter */
/* P2 pour tous les lments diffrents de X.
*/
P2
A
Pour P1 de A A+N Faire
P2^ = P1^;
si (P2^ X)alors
P2 P2+1
Fin si
Fin pour
/* Nouvelle dimension de A */
N P2-A;
/* Edition du rsultat */
Pour P1 de A A+N Faire
Ecrire((P1)^);
Fin pour
TD Algorithmique

52

Chapitre 9 : Les pointeurs

Fin

Exercice 3

Ecrire un programme qui range les lments d'un tableau A du type Entier dans
l'ordre inverse. Le programme utilisera des pointeurs P1 et P2 et une variable numrique
AIDE pour la permutation des lments.

Algorithme RangeInverse
Types :
Tab : Tableau[1..100] de Entiers
Pointeur : ^Entier
Variables
A : tab
N : Entier /* dimension du tableau */
AIDE : Entier
P1,P2 : Pointeurs
Dbut
/* Saisie des donnes */
Ecrire("Dimension du tableau A (max.100) : ")
Lire(N)
Pour P1 de A A+N Faire
Ecrire("Elment", P1-A, " : ")
Lire(P1^)
Fin pour
/* Affichage du tableau */
Ecrire("Tableau donn A :")
Pour P1 de A A+N Faire
Ecrire((P1)^)
Fin pour
/* Inverser la tableau */
P1 A
P2 A+(N-1)
Tant que P1<P2 Faire
AIDE
(P1)^
(P1)^
(P2)^
(P2)^
AIDE
P1
P1+1
P2
P2-1
Fin Tq
/* Edition du rsultat */
Pour P1 de A A+N Faire
Ecrire((P1)^);
Fin pour
Fin

Exercice 4

TD Algorithmique

53

Chapitre 9 : Les pointeurs

Ecrire un programme qui lit deux tableaux d'entiers A et B et leurs dimensions N et M


au clavier et qui ajoute les lments de B la fin de A. Utiliser deux pointeurs PA et PB
pour le transfert et afficher le tableau rsultant A.

Exercice 5

Ecrire un programme qui lit une chane de caractres CH et dtermine la longueur de la


chane l'aide d'un pointeur P. Le programme n'utilisera pas de variables numriques.
/* Placer P la fin de la chane */
P CH
Tant que P^ Faire
P P+1
Fin Tq
/* Affichage du rsultat */
Ecrire("La chane \", CH, "\ est forme de", P-CH, "caractres.")

Exercice 6

Ecrire un programme qui lit une chane de caractres CH au clavier et qui compte les
occurrences des lettres de l'alphabet en ne distinguant pas les majuscules et les minuscules.
Utiliser un tableau ABC de dimension 26 pour mmoriser le rsultat et un pointeur
PCH pour parcourir la chane CH et un pointeur PABC pour parcourir ABC. Afficher
seulement le nombre des lettres qui apparaissent au mois une fois dans le texte.
Exemple:
Entrez une ligne de texte (max. 100 caractres) :
Jeanne
La chane "Jeanne" contient :
1 fois la lettre 'A'
2 fois la lettre 'E'
1 fois la lettre 'J'
3 fois la lettre 'N'

TD Algorithmique

54

Chapitre 9 : Les pointeurs

/* Initialiser le tableau ABC */


Pour PABC de ABC ABC+26 Faire
PABC^ 0
Fin pour
/* Compter les lettres */
PCH CH
Tant que PCH^ Faire
si PCH^>='A' ET PCH^<='Z' alors
((ABC+(PCH^-'A'))^) ((ABC+(PCH^-'A'))^)+1
Finsi
si (PCH^>='a' && PCH^<='z')alors
((ABC+(PCH^-'a'))^) ((ABC+(PCH^-'a'))^)+1
Finsi
PCH PCH+1
Fin Tq
/* Affichage des rsultats */
/* (PABC-ABC) est le numro de la lettre de l'alphabet. */
Ecrire("La chane contient :")
Pour PABC de ABC ABC+26 Faire
Si (PABC^) alors
Ecrire(PABC^, " fois la lettre ", 'A'+(PABC-ABC))
Finsi
Fin pour
Exercice 7

Ecrire un programme qui lit une matrice A de dimensions N et M au clavier et qui


affiche les donnes suivantes en utilisant le formalisme pointeur chaque fois que cela est
possible:
a) la matrice A
b) la transpose de A
c) la matrice A interprte comme tableau unidimensionnel
Exercice 8

Ecrire un programme qui lit deux matrices A et B de dimensions N et M


respectivement M et P au clavier et qui effectue la multiplication des deux matrices. Le
rsultat de la multiplication sera affect la matrice C, qui sera ensuite affiche. Utiliser le
formalisme pointeur chaque fois que cela est possible.
Exercice 9

Ecrire un programme qui lit 5 mots d'une longueur maximale de 50 caractres et les
mmorise dans un tableau de chanes de caractres TABCH. Inverser l'ordre des caractres
l'intrieur des 5 mots l'aide de deux pointeurs P1 et P2. Afficher les mots.

TD Algorithmique

55

TRAVAUX DIRIGES 10

LES LISTES CHAINEES

1. Objectifs

Maitriser la dfinition et la manipulation des listes chaines simples.

Reprsenter un ensemble dlments contenus chacun dans une cellule. Celle-ci


contient en plus de llment, ladresse de llment suivant appel pointeur.

Problme A

1. Ecrire une procdure CratListe permettant de crer une liste chaine simple de n
lments de type entier.

Types
Liste = ^Cellule
Cellule =
Struct
Elem
Suiv
FinStruct
Variables
L

: Entier
: Liste

: Liste

Procdure CratListe(n :entier, L :Liste)


Variables
Tte,P
: Liste
i
: Entier
Dbut
Allouer(Tte)
Ecrire( Entrer llment de tte : )
Lire(Tte^.Elem)
Tte^.Suiv Nil
L Tte
Pour i de 2 n Faire
Allouer(P)
Ecrire( Entrer un lment : )
Lire(P^.Elem)
P^.Suiv Nil
L^.Suiv P
L P
TD Algorithmique

56

Chapitre 10 : Les listes chaines

FinPour
L Tte
Fin

(*Pour n =2*)

(*Pour n =3*)

TD Algorithmique

57

Chapitre 10 : Les listes chaines

2. Ecrire une procdure AffichListe permettant de parcourir et afficher les lments


dune liste chaine simple L.

Procdure AffichListe(L :Liste)


Variables
P
: Liste
Dbut
P L
TantQue(PNil)Faire
Ecrire(P^.Elem)
P P^.Suiv
FinTQ
Fin

3. Ecrire une procdure InsertTete permettant dinsrer un lment en tte dune


liste chaine simple L.

Procdure InsertTte(L :Liste)


Variables
P
: Liste
Dbut
Allouer(P)
Ecrire( Entrer un lment : )
Lire(P^.Elem)
P^.Suiv L
L P
Fin

TD Algorithmique

58

Chapitre 10 : Les listes chaines

4. Ecrire une fonction Recherche qui vrifie si un entier x figure dans une liste
chaine simple L.

Fonction Recherche(x : Entier, L :Liste) :Boolen


Variables
P
: Liste
Trouve
:Boolen
Dbut
Trouve Faux
P L
TantQue(PNil)ET(Trouve=Faux)Faire
Trouve (P^.Elem=x)
P P^.Suiv
FinTQ
Recherche Trouve
Fin

5. En supposant quune valeur x existe une seule fois dans une liste chaine simple L.
Ecrire une procdure supprimer permettant de supprimer cet lment x de la liste
L. (Notez que : supprimer x revient mettre jour les liens de faon que le
successeur du prdcesseur de x devient le successeur de x. En plus, un traitement
particulier doit tre fait si llment supprimer est le premier lment de la liste.)

Procdure Supprimer(x : Entier, L :Liste)


Variables
P ,Q
: Liste
Dbut
Si(LNil)Alors
P L
Si(L^.Elem=x)Alors
L L^.Suiv
Librer(P)
Sinon
Q L^.Suiv
TantQue(QNil)ET(Q^.Elemx)Faire
P Q
Q Q^.Suiv
FinTQ
Si(QNil)Alors
P^.Suiv Q^.Suiv
Librer(Q)
FinSi
FinSi
FinSi
Fin

TD Algorithmique

59

Chapitre 10 : Les listes chaines

6. Ecrire une procdure qui permet dinverser une liste chaine simple L en une liste
chaine simple L_inv.
7. Ecrire une procdure qui permet de trier les lments dune liste chaine simple L
dans lordre croissant.

Problme B

1. Ecrire une procdure CratListe permettant de crer une liste chainage double
de n lments de type entier.
Types
Liste = ^Cellule
Cellule =
Struct
Prec
Elem
Suiv
FinStruct
Variables
L

: Liste
: Entier
: Liste

: Liste

Procdure CratListe(n :entier, L :Liste, Queue :Liste)


Variables
Tte,P
: Liste
i
: Entier
Dbut
Allouer(Tte)
Ecrire( Entrer llment de tte : )
Lire(Tte^.Elem)
Tte^.Suiv Nil
Tte^.Prec Nil
L Tte
Pour i de 2 n Faire
Allouer(P)
Ecrire( Entrer un lment : )
Lire(P^.Elem)
P^.Suiv Nil
P^.Prec L
L^.Suiv P
L P
FinPour
Queue P
L Tte
Fin

TD Algorithmique

60

Chapitre 10 : Les listes chaines

(*Pour n =2*)

(*Pour n =3*)

TD Algorithmique

61

Chapitre 10 : Les listes chaines

2. Ecrire une procdure AffichListe permettant de parcourir et afficher les lments


dune liste chainage double L.

Procdure AffichListe(L :Liste)


Variables
P
: Liste
Dbut
P L
TantQue(PNil)Faire
Ecrire(P^.Elem)
P P^.Suiv
FinTQ
Fin

ou
Procdure AffichListe(Queue :Liste)
Variables
P
: Liste
Dbut
P Queue
TantQue(PNil)Faire
Ecrire(P^.Elem)
P P^.Prec
FinTQ
Fin

TD Algorithmique

62

Chapitre 10 : Les listes chaines

3. Ecrire une procdure InsertTete permettant dinsrer un lment en tte dune


liste chainage double L et une procdure InsertQueue permettant dinsrer un
lment en queue dune liste chainage double L

Procdure InsertTte(L :Liste)


Variables
P
: Liste
Dbut
Allouer(P)
Ecrire( Entrer un lment : )
Lire(P^.Elem)
P^.Suiv L
P^.Prec Nil
L^.Prec P
L P
Fin

Procdure InsertQueue(Queue :Liste)


Variables
P
: Liste
Dbut
Allouer(P)
Ecrire( Entrer un lment : )
Lire(P^.Elem)
P^.Suiv Nil
P^.Prec Queue
Queue^.Suiv P
Queue P
Fin

4. Ecrire une fonction Recherche qui vrifie si un entier x figure dans une liste
chainage double L.
5. En supposant quune valeur x existe une seule fois dans une liste chainage double
L. Ecrire une procdure supprimer permettant de supprimer cet lment x de la
liste L. (Notez que : supprimer x revient mettre jour les liens de faon que le
successeur du prdcesseur de x devient le successeur de x. En plus, un traitement
particulier doit tre fait si llment supprimer est le premier lment de la liste.)
6. Ecrire une procdure qui permet dinverser une liste chainage double L en une liste
chainage double L_inv.
7. Ecrire une procdure qui permet de trier les lments dune liste chainage double L
dans lordre croissant.

TD Algorithmique

63

TRAVAUX DIRIGES 11

LES PILES ET LES FILES


1. Objectif

Dfinir et dterminer les primitives dune pile et dune file qui sont un cas particulier
dune liste chaine.

2. Dfinition des Piles

Une pile est une liste chaine o linsertion et la suppression dun lment se font
toujours en tte de liste.

Limage intuitive dune pile peut tre donne par une pile dassiette ou une pile de
dossiers condition de supposer quon prend un seul lment la fois celui du sommet.
On peut rsumer les contraintes daccs dune pile par le principe Dernier entr,
premier sorti

TD Algorithmique

64

Quand on fait recours une pile ?


Lorsquon mmorise des informations qui devront tre traites dans lordre
inverse de leur entre.

TD Algorithmique

65

Chapitre 11 : Les piles et les files

Dclaration dune pile :


Types
Pile = ^Cellule
Cellule =
Struct
Elem
Suiv
FinStruct
Variables
P

: Entier
: Pile

: Pile

Procdure Initialiser(P : Pile) (*crer une Pile P vide.*)


Fonction Pile_Vide(P :Pile) : Boolen (*renvoyer la valeur vrai si la Pile est vide.*)
Procdure Empiler(x :Entier, P :Pile) (*ajouter llment x au sommet de la Pile*)
Procdure Dpiler(x :Entier, P :Pile) (* supprimer le sommet de la Pile aprs de
lavoir sauvegarder dans une variable x.

Procdure Initialiser(P :Pile)


Dbut
P Nil
Fin

Fonction Pile_Vide(P :Pile) :Boolen


Dbut
Pile_Vide (P=Nil)
Fin

Procdure Empiler(x :entier, P :Pile)


Variables
Q
: Pile
Dbut
Allouer(Q)
Q^.Elem x
Q^.Suiv P
P Q
Fin

Procdure Dpiler(x :entier, P :Pile)


Variables
Q
: Pile
Dbut
Si NON(Pile_Vide(P)) alors
x P^.Elem
Q P
P P^.Suiv
Librer(Q)

TD Algorithmique

66

Chapitre 11 : Les piles et les files

Sinon
Ecrire( Impossible la pile est vide )
Fin
3. Dfinition des Files

Une File est une liste chaine dont les contraintes daccs sont dfinies comme suit :
On ne peut ajouter un lment quen dernier rang de la liste.
On ne peut supprimer que le premier lment.
On peut rsumer les contraintes daccs par le principe premier entr premier sorti .

Quand on fait recours une File ?


Lorsquon mmorise des informations qui devront tre traites dans le mme
ordre de leur entre.
Dclaration dune file :
Types
Liste = ^Cellule
Cellule =
Struct
Elem
Suiv
FinStruct
File =

Struct
Tte
Queue
FinStruct

Variables
F

TD Algorithmique

: Entier
: Pile

: Liste
: Liste

: File

67

Chapitre 11 : Les piles et les files

Procdure Initialiser(F : File) (*crer une File F vide.*)


Procdure Ajouter(x :Entier, F :File) (*ajouter llment x la fin de la File*)
Procdure Extraire(x :Entier, F :File) (* extraire le sommet de la File aprs de
lavoir sauvegarder dans une variable x.

Procdure Initialiser(F :File)


Dbut
F.Tte
Nil
F.Queue Nil
Fin

Procdure Ajouter(x :entier, F :File)


Variables
P
: Liste
Dbut
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

Procdure Extraire(x :entier, F :File)


Variables
P
: Liste
Dbut
Si (F.Tte=Nil) alors
Ecrire( Impossible la pile est vide )
Sinon
P F.Tte
x F.Tte^.Elem
F.Tte F.Tte^.Suiv
Librer(P)
FinSi
Fin

TD Algorithmique

68

TRAVAUX DIRIGES 12

LES ARBRES

1. Objectifs

Connaitre les concepts de base relatifs aux arbres binaires.


2. Problme

1. Ecrire un algorithme et une procdure Construire permettant de construire un


arbre dentiers partir dune suite de nombres entrs par lutilisateur. Il faut que le
sous arbre gauche dun nud de valeur n contient les lments < n, tandis que le
sous arbre droit contient les lments suprieurs n.

Algorithme ArbreBinaire
Types
Arbre = ^Nud
Nud =
Struct
Valeur
: Entier
Gauche : Arbre
Droite
: Arbre
FinStruct
Variables
Racine
x

: Arbre
: Entier

Procdure Construire(Elt :Entier, 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
Construire(Elt, B^.Droite)
FinSi
Fin

TD Algorithmique

69

Chapitre 12 : Les arbres

Dbut Programme principal


Racine Nil
Ecrire(Entrer un entier :)
Lire(x)
Tant que(x)faire
Construire(x,racine)
Ecrire(Entrer un entier :)
Lire(x)
FinTQ
Fin

2. On cherche parcourir un arbre binaire selon une stratgie dite en profondeur


dabord ou dans lordre prfixe. Ecrire la procdure ParcoursPrfixe.
Procdure ParcoursPrfixe(B :Arbre)
Dbut
Si(BNil)alors
Ecrire(B^.Valeur)
ParcoursPrfixe(B^.Gauche)
ParcoursPrfixe(B^.Droite)
FinSi
Fin

3. On cherche parcourir un arbre binaire dans lordre infixe. Ecrire la procdure


ParcoursInfixe.

Procdure ParcoursInfixe(B :Arbre)


Dbut
Si(BNil)alors
ParcoursInfixe(B^.Gauche)
Ecrire(B^.Valeur)
ParcoursInfixe(B^.Droite)
FinSi
Fin

4. On cherche parcourir un arbre binaire dans lordre postfixe. Ecrire la procdure


ParcoursPostfixe.

Procdure ParcoursPostfixe(B :Arbre)


Dbut
Si(BNil)alors
ParcoursPostfixe(B^.Gauche)
ParcoursPostfixe(B^.Droite)
Ecrire(B^.Valeur)
FinSi
Fin

TD Algorithmique

70

Chapitre 12 : Les arbres

5. Ecrire une fonction Recherche permettant de chercher un lment x dans un arbre


binaire ordonn B.

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
Fin

6. Ecrire une procdure qui permet dajouter un lment un arbre binaire (on suppose
que cet lment nexiste pas dans larbre).
7. Ecrire une procdure qui permet de supprimer un lment dun arbre binaire.

TD Algorithmique

71

TRAVAUX DIRIGES 13

EXERCICES DE REVISIONS

Exercice : Pointeur

Ecrire un programme qui lit une chane de caractres CH au clavier et qui compte les
occurrences des lettres de l'alphabet en ne distinguant pas les majuscules et les minuscules.
Utiliser un tableau ABC de dimension 26 pour mmoriser le rsultat et un pointeur
PCH pour parcourir la chane CH et un pointeur PABC pour parcourir ABC. Afficher
seulement le nombre des lettres qui apparaissent au mois une fois dans le texte.
Exemple:
Entrez une ligne de texte (max. 100 caractres) :
Jeanne
La chane "Jeanne" contient :
1 fois la lettre 'A'
2 fois la lettre 'E'
1 fois la lettre 'J'
3 fois la lettre 'N'

Exercice : Rcursivit

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.

TD Algorithmique

72

Exercice : Fichier

1. Ecrire une procdure permettant de crer et remplir le fichier (de type Fi_employs)
qui contient des informations sur les employs dune entreprise (matricule, nom, prnom,
grade, salaire).
2. Ecrire une procdure permettant dafficher la liste des employs partir du fichier de
type Fi_employs.
3. Ecrire une fonction permettant dafficher la liste des employs dont le salaire est
compris entre 500 et 700 DT.

Exercice : Enregistrement

Ecrire un algorithme qui lit deux nombres complexes C1 et C2 et qui affiche ensuite leur
somme et leur produit.
Sachant que :
(a+bi)+(c+di)=(a+c)+(b+d)i
(a+bi)*(c+di)=(ac-bd)+(ad+bc)i

Exercice : liste chaines simples

1. Ecrire une procdure CratListe permettant de crer une liste chaine simple de n
lments de type entier.
2. Ecrire une procdure AffichListe permettant de parcourir et afficher les lments
dune liste chaine simple L.
3. Ecrire une procdure InsertTete permettant dinsrer un lment en tte dune
liste chaine simple L.
4. Ecrire une fonction Recherche qui vrifie si un entier x figure dans une liste
chaine simple L.
5. En supposant quune valeur x existe une seule fois dans une liste chaine simple L.
Ecrire une procdure supprimer permettant de supprimer cet lment x de la liste
L. (Notez que : supprimer x revient mettre jour les liens de faon que le
successeur du prdcesseur de x devient le successeur de x. En plus, un traitement
particulier doit tre fait si llment supprimer est le premier lment de la liste.)
6. Ecrire une procdure qui permet dinverser une liste chaine simple L en une liste
chaine simple L_inv.
7. Ecrire une procdure qui permet de trier les lments dune liste chaine simple L dans
lordre croissant.

TD Algorithmique

73

REFERENCES

DE BASE

1. Baghdadi Zitouni. Algorithme & Structure de Donnes, Centre de Publication


Universitaire, 2003.
2. Christophe Darmangeat. Cours d'algorithmique et de programmation, enseign
l'Universit Paris 7, dans la spcialit PISE du Master SSAMECI (ancien DESS
A.I.G.E.S.), http://www.pise.info/algo/introduction.htm , 2011.
3. Faber Frdric. INTRODUCTION A LA PROGRAMMATION EN ANSI-C, un
manuel pour tudes d'autodidacte comprenant exercices et solutions,
http://www.ltam.lu/cours-c/ , 1993-1997.

TD Algorithmique

74