TDs Algorithmique ISIMa 2011
TDs Algorithmique ISIMa 2011
TDs Algorithmique ISIMa 2011
Contact : maher.helaoui@gmail.com
Site : www.sites.google.com/site/maherhelaoui/Home/
(ISIMa 2011)
Introduction ..................................................................................................................... i
Les variables ................................................................................................................... 1
1.
Objectif .................................................................................................................... 1
2.
Dclaration ............................................................................................................... 1
3.
4.
Objectif .................................................................................................................. 11
2.
3.
Objectif .................................................................................................................. 19
2.
Dfinition ............................................................................................................... 19
3.
Exemple ................................................................................................................. 19
4.
Objectif .................................................................................................................. 24
2.
Dfinition ............................................................................................................... 24
3.
Exemple ................................................................................................................. 24
1.
Objectif .................................................................................................................. 33
2.
Questions................................................................................................................ 33
3.
Exemples ................................................................................................................ 33
Objectifs ................................................................................................................. 48
2.
3.
Objectifs ................................................................................................................. 56
Objectif .................................................................................................................. 64
2.
3.
Objectifs ................................................................................................................. 69
2.
Problme ................................................................................................................ 69
TD Algorithmique
ii
INTRODUCTION
TD Algorithmique
CHAPITRE 1
LES VARIABLES
1. Objectif
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
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
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
TRAVAUX DIRIGES 1
LES VARIABLES
Exercice 1
1.
(1)
(2)
(3)
(4)
(5)
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)
TD Algorithmique
Exercice 2
1.
..
"AVION"
1997
43
"1997"
"43"
"BAL"
"BALLON"
Exercice 3
TD Algorithmique
TRAVAUX DIRIGES 1
CORRECTION TD 1
Exercice 1
1.
(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
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
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
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
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
TD Algorithmique
Exercice 2
TD Algorithmique
"AUTO"
..
"AVION"
1997
>
43
"1997"
"43"
"BAL"
"BALLON"
Exercice 3
TD Algorithmique
10
CHAPITRE 2
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
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
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
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
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 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
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
LIQUIDE
VAPEUR
TD Algorithmique
15
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.
TD Algorithmique
16
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
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
TD Algorithmique
18
CHAPITRE 3
1. Objectif
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
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
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.
4.
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.
6.
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
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
/ \
| 3 2 -4 | * | 2 -3 5 | = 3*2+2*(-3)+(-4)*5 = -20
/
\ /
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.
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.
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
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
TD Algorithmique
23
CHAPITRE 4
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]
TD Algorithmique
24
TRAVAUX DIRIGES 4
Ecrire un programme qui met zro les lments de la diagonale principale d'une
matrice carre A donne par lutilisateur.
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
c d|
X*d |
g h| =
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
Rappel:
|abc d |
| e+e' f+f'
g+g' h+h' |
|i j k l |
| i+i'
k+k'
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.
La multiplication de deux matrices se fait en multipliant les composantes des deux matrices
lignes par colonnes:
TD Algorithmique
26
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
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
TD Algorithmique
28
TRAVAUX DIRIGES 5
LES FONCTIONS
Objectif
TD Algorithmique
29
Exercice 2
Exercice 3
TD Algorithmique
30
TRAVAUX DIRIGES 6
LES ENREGISTREMENTS
Exercice1 :
//Pour dfinir le type nombre complexe nous pouvons faire recours aux
enregistrements :
Types
Complexe =
Struct
reel
imag
FinStruct
: Rel
: Rel
TD Algorithmique
31
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
1. Objectif
Struct
CIN
Nom
Prnom
Classe
FinStruct
: Entier
: Chaine[30]
: Chaine[30]
: Chaine[5]
Fetud = Fichier
TD Algorithmique
33
TD Algorithmique
34
TRAVAUX DIRIGES 7
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
TD Algorithmique
35
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
36
Lire(fe,em)
Si(em.matricule=MER)alors
Ecrire (em.nom,em.prnom,em.grade)
FinSi
FinTQ
Fermer(fe)
Fin
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
TD Algorithmique
37
8. Ecrire une fonction permettant dafficher les Salaires tris des employs partir de
Fi_Salaires.
Exercice 2
Exercice 3
TD Algorithmique
38
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
TD Algorithmique
39
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
Dfinition : Une procdure (ou une fonction) rcursive est une procdure (ou une
fonction) dont le corps contient un ou plusieurs appels elle-mme.
Exemple :
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
TD Algorithmique
41
TD Algorithmique
42
Chapitre 8 : La Rcursivit
Pour i de 1 N faire
P P*i
Fin Pour
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
TD Algorithmique
43
Chapitre 8 : La Rcursivit
Exercice 3
Transformer la procdure ci-dessous en sous-programme rcursif :
Exercice 4
TD Algorithmique
44
Chapitre 8 : La Rcursivit
Exercice 5
=n
=1
p
= C
n-1 +
n-1
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.
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 :
-
Exercice 8
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
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
/*le pointeur P prend ladresse dune autre variable A (P pointe sur A)*/
P
Adresse(A)
20
E001
A
Adresse : E001
Adresses :
E01
E02
En-2 En-1 En
E01
TD Algorithmique
49
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
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
Pour I de 1 N Faire
Ecrire((A+I)^)
Fin pour
Fin
Exercice 2
52
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
Exercice 5
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
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
1. Objectifs
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
56
FinPour
L Tte
Fin
(*Pour n =2*)
(*Pour n =3*)
TD Algorithmique
57
TD Algorithmique
58
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.)
TD Algorithmique
59
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
TD Algorithmique
60
(*Pour n =2*)
(*Pour n =3*)
TD Algorithmique
61
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
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
Dfinir et dterminer les primitives dune pile et dune file qui sont un cas particulier
dune liste chaine.
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
TD Algorithmique
65
: Entier
: Pile
: Pile
TD Algorithmique
66
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 .
Struct
Tte
Queue
FinStruct
Variables
F
TD Algorithmique
: Entier
: Pile
: Liste
: Liste
: File
67
TD Algorithmique
68
TRAVAUX DIRIGES 12
LES ARBRES
1. Objectifs
Algorithme ArbreBinaire
Types
Arbre = ^Nud
Nud =
Struct
Valeur
: Entier
Gauche : Arbre
Droite
: Arbre
FinStruct
Variables
Racine
x
: Arbre
: Entier
TD Algorithmique
69
TD Algorithmique
70
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
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
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
TD Algorithmique
74