You are on page 1of 99

Adama MBODJI

Tableaux & vecteurs


Algorithmes de tris
Chanes de caractres
Listes linaires
Piles & Files
Arbres
Fichiers












MBODJ.SYSTEM





Adama MBODJI Les secrets de la programmation
2









Je ddie cet ouvrage mon pre

Souleymane MBODJI





































Adama MBODJI Les secrets de la programmation
3






Ddicace ......................................................................................... 2
Sommaire ....................................................................................... 3
Avant-propos .................................................................................. 5
Prface ........................................................................................... 6

1. Introduction gnrale ...................................... 7
1.1 Notions d'algorithme et de programme .................................................... 7
1.2 Structure gnrale d'un algorithme ........................................................... 8
1.3 Les outils .................................................................................................. 9

2. Prsentation de MSAlgoPascal ....................... 19
2.1 Configuration requise ............................................................................... 19
2.2 Installation de MSAlgoPascal .................................................................. 19
2.3 Pas pas sur MSAlgoPascal .................................................................... 21

3. Tableaux et vecteurs ....................................... 31
3.1 Tableaux simples (une dimension) ........................................................... 31
3.2 Tableaux plusieurs dimensions .............................................................. 32
3.3 Oprations classiques sur les tableaux ..................................................... 32
Exercices ........................................................................................................ 38

4. Les algorithmes de tri ..................................... 40
4.1 Dfinition .................................................................................................. 40
4.2 Tri par slection ........................................................................................ 40
4.3 Tri par insertion simple ............................................................................ 42
4.4 Tri bulles ................................................................................................ 42

5. Les chanes de caractres .............................. 44
5.1 Dfinition .................................................................................................. 44
5.2 Accs un caractre ................................................................................. 44
5.3 Concatnation de chanes ......................................................................... 44
5.4 Fonctions utiles pour le traitement des chanes ........................................ 45
Exercices ........................................................................................................ 46

6. Les enregistrements ........................................ 47


Adama MBODJI Les secrets de la programmation
4
6.1 Dclaration dune structure ....................................................................... 47
6.2 Affection de valeurs ................................................................................. 48
Projets ............................................................................................................ 50

7. L'allocation dynamique : listes, piles, files ..... 51
7.1 Dfinition .................................................................................................. 51
7.2 Dclaration d'une variable de type pointeur ............................................. 51
7.3 Allocation et Dsallocation ...................................................................... 52
7.4 Les listes ................................................................................................... 53
Projets ............................................................................................................ 67

8. Les arbres ........................................................ 72
8.1 Dfinition de quelques concepts .............................................................. 73
8.2 Dclaration d'un arbre binaire .................................................................. 74
8.3 Oprations classiques sur les arbres binaires ........................................... 74
Exercices ........................................................................................................ 85

9. Les fichiers ...................................................... 86
9.1 Le concept de fichier ................................................................................ 86
9.2 Laccs aux fichiers .................................................................................. 86
9.3 La cration dun fichier typ .................................................................... 87
9.4 La cration dun fichier texte ................................................................... 88
9.5 La lecture d'un fichier typ ....................................................................... 88
9.6 La lecture d'un fichier texte ...................................................................... 88
9.7 Les types d'organisations .......................................................................... 89
9.8 Les oprations classiques dans un fichier ................................................ 90
9.9 La mise jour d'un fichier ........................................................................ 92
Exercices ........................................................................................................ 95

Projet final ........................................................... 96

Bibliographie ........................................................ 99















Adama MBODJI Les secrets de la programmation
5



e guide de ltudiant est un ouvrage destin aux tudiants du premier cycle dinformatique,
aux dbutants et tous ceux qui veulent connatre les notions de bases de la programmation.

Il aborde brivement les thmes les plus classiques et les plus utiliss en informatique : les tableaux,
les algorithmes de tri, les chanes de caractres, les enregistrements, les listes linaires, les piles, les
files, les arbres et les fichiers. De nombreux exercices et projets y sont disponibles et les corrigs
sont au niveau du CD-Rom.

Nous avons remarqu que les comptences des dbutants se limitent lanalyse des problmes et
lcriture des algorithmes ; ds lors, il leur semble fastidieux de codifier, de corriger les syntaxes et
de dboguer leurs programmes. La difficult majeure quils rencontrent le plus souvent est
deffectuer correctement le passage dun algorithme au code correspondant dans un langage de
programmation donn, en particulier le Pascal.

Cest dans cet optique que nous avons inclus dans ce guide un compilateur du nom de
MSAlgoPascal

qui a la possibilit de :

vrifier les expressions parenthses.
vrifier les clauses arborescentes.
vrifier la dclaration des variables, des types, des procdures et des fonctions.
envoyer des messages derreur lutilisateur si ncessaire.
effectuer la traduction automatique de lalgorithme vers le langage Pascal.

Les tudiants auront la possibilit dexcuter tous les algorithmes tudis en classe en passant par le
gnrateur de codes.

MSAlgoPascal

a t largement expriment en 2004 au niveau des tudiants de premire anne de


lInstitut de Formation Professionnelle (I.F.P) et les rsultats obtenus sont dignes dintrt.

Je remercie vivement Gervais MENDY, Ousmane DIENE, Emmanuel KABOU, Samuel OUYA,
M. ALAOUI pour la relecture et la correction de ce guide.

Que M. Moussa BA professeur du langage Pascal lI.F.P, qui aprs avoir mis en pratique le
logiciel MSAlgoPascal

avec ses tudiants de premire anne et qui a largement particip son


dboguage, trouve ici lexpression de ma profonde gratitude.

Mille mercis ma sur Sourouro Belly MBODJ et mon oncle Abou NDIANOR pour le soutien et
les critiques quils ont apport.

Pour finir, je ne citerai pas de noms, au risque den omettre certains, pour exprimer mes sincres
remerciements tous ceux qui, de prs ou de loin, ont contribu la ralisation de MSAlgoPascal

.



Adama MBODJI, Janvier 2005

C


Adama MBODJI Les secrets de la programmation
6




















































Adama MBODJI Les secrets de la programmation
7







1.1 Notion dalgorithme et de programme


ujourdhui avec le dveloppement des sciences et des technologies, nous sommes parvenus
au monde de la programmation la 4
me
gnration. Nous sommes passs du binaire
lassembleur puis des langages procduraux aux langages vnementiels et objets.

Derrire toutes ces innovations, aussi complexes quelles soient, nous rptons toujours le mme
processus pour rsoudre un problme en informatique. Cette rsolution peut tre schmatise ainsi
quil suit :








Figure 1. Cycle de vie de la rsolution dun problme en informatique.

Nous pouvons retenir que la rsolution dun problme en informatique passe par la production dun
texte appel algorithme. Ce dernier dcrit lensemble des oprations lmentaires qui seront
excutes par un ordinateur via un langage de programmation pour obtenir la solution informatique.

Lalgorithme est la description dun ensemble fini dactions et dinformations lmentaires
destines tre excutes par un ordinateur pour rsoudre un problme.
Lalgorithme est une suite dactions ordonnes sur un ensemble fini dobjets. Il doit tre dfini sans
ambigut, et son excution doit sarrter aprs un nombre fini doprations lmentaires . DIOP,
Kba.- Algorithmique et Structures de donnes Tome 1.- Presse de luniversit de lUNIS page
8.

Supposons que lon veuille automatiser la rsolution dune quation du second degr. Pour ce faire,
il faut la mettre dans un modle gnral qui est le suivant : AX + BX + C = 0 (avec A 0).
Rsoudre ce problme via lordinateur revient lui faire comprendre les diffrentes tapes quil
doit suivre pour aboutir un rsultat. Ce phnomne logique est appel Algorithme. Ce dernier une
fois traduit dans un langage de programmation demeure toujours incomprhensible par
lordinateur. Il faut cependant passer une autre traduction qui convertit le code crit en langage
machine : cest la compilation.

Ce prsent manuel (guide de ltudiant) prsente les algorithmes classiques les plus utiliss en
informatique. Il nous permet dcrire correctement des algorithmes et de les traduire en langage
Pascal. Le passage de lalgorithme vers le langage de programmation sera automatique grce au
gnrateur de code MSAlgoPascal.


A
C Problme
+ Donnes
C Analyse
CExcution
C Compilation
Rsultat
C Algorithme C Langage
Edition
des liens


Adama MBODJI Les secrets de la programmation
8
1.2 Structure gnrale dun algorithme


Algo ou Algorithme ou Programme Nom_Algo
Constante ou Const nom_constante = Valeur
Type
% dfinition de type de donnes %
Variable ou Var
% liste des variables %

Procdure Nom_Procdure1 (donne Nom_Var1 : Type1 ; Rsultat Nom_Var2 : Type2)
Dbut
% Instruction %
FinProcdure

Fonction Nom_Fonction (donne Nom_var i : Type i) : Type de rsultat
Dbut
% Instruction %
Nom_Fonction = Valeur retour
FinFonction

% PROGRAMME PRINCIPAL %
Dbut
% Instruction %
FinAlgo ou FinAlgorithme ou FinProgramme

Donc la structure gnrale dun algorithme se prsente ainsi :

en-tte de lalgorithme.
corps encore appel bloc.

Un algorithme commence toujours par les mots rservs suivants : Algo, Algorithme ou
Programme suivi de son Nom. Son nom est un identificateur ; il permet de nommer lalgorithme.

Un bloc est toujours constitu dune partie dclarative et dune partie instruction. Il est subdivis en
quatre (04) sous parties :

dclaration de constantes.
dclaration de types.
dclaration de variables.
dclaration de procdures et de fonctions.

Tous les algorithmes doivent se terminer par :

FinAlgo sils dbutent par Algo.
FinProgramme sils dbutent par Programme.
FinAlgorithme sils dbutent par Algorithme.

1.2.1 Les identificateurs

Les identificateurs sont des mots qui servent dsigner, nommer et identifier les entits, les
objets, les actions, les procdures et les fonctions manipuls dans un programme.

Les identificateurs ne se crent pas nimporte comment car ils doivent respecter lordre des
diagrammes syntaxiques encore appels diagrammes de CONWAY : un identificateur dbute


Adama MBODJI Les secrets de la programmation
9
toujours par une lettre ou un caractre de soulignement qui peut tre suivi de lettres, de chiffres ou
de caractres de soulignement de faon optionnelle.








Figure 2. Diagramme syntaxique dun identificateur NOUATIN, Thophile.- Les bases de
la PROGRAMMATION avec C++.- ITSS SOFT page 34.

1.2.2 Les expressions

Elles sont formes par une combinaison doprateurs et doprandes. Les oprandes peuvent tre
des constantes, variables, chanes de caractres. Les oprateurs sont arithmtiques, logiques et
boolens, de chanes de caractres, densemblistes, etc.

1.2.3 Les constantes

Ce sont des identificateurs qui gardent toujours la valeur quon leur a attribu durant tout
lalgorithme. Leur valeur ne peut tre modifie. Une constante se dclare de la manire suivante :

Const ou Constante Identificateur = Valeur ou expression

1.2.4 Les variables

Une variable est une zone mmoire o lon peut stocker des informations identifies par
lidentificateur. Elle peut tre modifie dans le corps de lalgorithme. Une variable est dclare via
linstruction Var ou Variable suivi de lidentificateur et du type de la variable.

1.2.5 Les commentaires

Dans lalgorithme, pour claircir certains passages, lutilisateur (le programmeur) peut y glisser
des commentaires. Les commentaires dbutent et se terminent par le symbole spcial %.
Remarque : Pour afficher le symbole % au niveau de lalgorithme en tant que caractre, il faut
ncessairement le faire prcder de lesperluette &. Exemple : Afficher "10 &%"


1.3 Les outils

1.3.1 Les oprateurs arithmtiques

Oprateur Signification
+ Addition
- Soustraction
* Multiplication
/ Division
Div Division entire
Mod ou Modulo Modulo (Reste de la division entire)
Lettre
-
-
Lettre
Chiffre
Identificateur
Dpart
Arrive


Adama MBODJI Les secrets de la programmation
10
1.3.2 Les oprateurs logiques et binaires

Oprateur Signification
Pas Ngation
Et Et logique
Ou Ou logique
OuExclusif Ou Exclusif logique

Les oprandes associs ces oprateurs peuvent tre des entiers (on parle alors doprateurs
binaires) ou des boolens (on parle doprateurs logiques).

1.3.3 Les oprateurs de chanes de caractres

Oprateur Signification
+ Concatnation de deux chanes de caractres.

Pour concatner deux chanes de caractres, nous utilisons loprateur + . Le rsultat est du type
chane.

1.3.4 Les oprateurs relationnels

Oprateur Signification
= Egal
<> Diffrent
< Infrieur
> Suprieur
<= Infrieur ou gal
>= Suprieur ou gal

Ces oprateurs fournissent toujours un rsultat boolen (Vrai ou Faux).


1.3.5 Les oprateurs sur les pointeurs

Oprateur Signification
^ ou Cre un pointeur sur une variable

La notion fondamentale de pointeur est de nommer une entit (une variable) dont le contenu nest
pas une donne de lapplication, mais une adresse mmoire. A cette adresse est stocke la donne.
Cest donc un accs direct. . BINZINGER, Thomas.- Borland DELPHI 6.- CampusPress page
258.

Les pointeurs permettent de crer des structures dynamiques comme les listes chanes, les arbres,
etc. Le mot rserv NIL (Not In List) est utilis pour marquer la fin de la liste.







Adama MBODJI Les secrets de la programmation
11












Figure 3. Arbre binaire et structure chane (bidirectionnelle) formes grce aux pointeurs

Les lments dun arbre se nomment nuds et ceux dune liste cellules.
Pour larbre, le nud A reprsente la tte, les nuds B , C , D , H et K sont
intermdiaires et les nuds E , G , I , J et F se nomment feuilles.

Pour la liste chane, les cellules A et F reprsentent la fois la tte et la queue. Les autres
cellules sont appeles cellules intermdiaires.

1.3.6 Les types de donnes

1.3.6.1 Les entiers

En algorithme, nous utiliserons ces cinq types de donnes.

Type Domaine de dfinition Taille mmoire
EntierCourt [-128, 127] 1 octet
Entier [-32768, 327667] 2 octets
EntierLong [-2147483648, 2147483647] 8 octets
Mot [0, 65535] 2 octets
Octet [0, 255] 1 octet

1.3.6.2 Les caractres

Le type caractre correspond lensemble des caractres de la table ASCII.

Variable
Touche : Caractre

La variable Touche peut recevoir nimporte quel caractre appartenant la table ASCII.

Nous pouvons par exemple crire : Touche = "A" ; Touche = ASCII (65)

1.3.6.3 Les boolens

Les variables du type boolen ne peuvent recevoir que deux valeurs (Vrai ou Faux).
NB : Gnralement, Faux peut tre codifi par 0 et Vrai par 1.


A
B C
D
E
H
K
F
G
J
I
A B D
E F
C
NIL


Adama MBODJI Les secrets de la programmation
12
1.3.6.4 Les numrs

Un type numr permet de dfinir une donne correspondant un ensemble ordonn dlments ou
de valeurs. Chaque lment est dfini au moyen dun identificateur.

Exemple : Type Sexe = (Masculin, Fminin)

1.3.6.5 Les intervalles

Un type intervalle permet de dfinir des donnes en fournissant simplement la borne infrieure et la
borne suprieure dun ensemble dentiers, de chanes de caractres ou dlments dfinis de type
numr.

Exemple : Type Chiffre = 0. . 9

1.3.6.6 Les rels

Le langage Pascal met notre disposition cinq types de rels diffrents. En algorithmique, nous
nutiliserons que le type rel standard.

Type Domaine de dfinition Taille mmoire
Rel [10
-38
, 10
38
] 6 octets

1.3.6.7 Les chanes de caractres

Un type chane de caractres permet de dfinir des donnes correspondant une suite de caractres
(appele chane de caractres) dont la longueur peut tre spcifie dans la dfinition. Si elle nest
pas spcifie, le systme lui attribue une longueur gale 255 caractres.

Exemple : Variable Expression = Chane [15]

Dans cet exemple, la variable Expression a t spcifie comme tant un type chane pouvant
contenir au maximum 15 caractres.

1.3.6.8 Les tableaux

Un type tableau permet de dfinir des donnes composes dun nombre fixe dlments ayant tous
le mme type.

Syntaxe Gnrale : NomDuTableau : Tableau [Min .. Max] de Type avec (min >0)

Dfinition dun tableau

Tab1 : Tableau [1...10] de Entier
Tab2 : Tableau [1...3,1...8] de Rel
Tab3 : Tableau [1...5,1...5] de Caractre

Dans cet exemple, Tab1 est un vecteur de 1 10 lments de type entier. Tab2 est une matrice
contenant des rels et Tab3 contient des caractres. Pour se positionner une cellule du tableau, il
suffit dindiquer le numro de cellule. Ce numro commence par lindice 1.



Adama MBODJI Les secrets de la programmation
13
Exemple : Tab1 [1] = 3
Tab2 [1,1] = 3.1415
Tab3 [5,1] = "A"

Reprsentation physique dun tableau de caractres

Indice sur le tableau 1 2 3 4 5 6 7 8 9 10 11
M B O D J S Y S T E M

Tab [1] = "M"
Tab [11] = "M"
Tab [3] = "O"
Tab [25] = Erreur ! Dpassement de capacit

NB : Si lindice dun tableau dpasse la borne maximale de sa dclaration, un message derreur est
envoy lutilisateur par le compilateur pour lui signifier que cette zone nappartient pas au tableau.
Ce phnomne peut provoquer un blocage de lordinateur.

1.3.6.9 Les enregistrements

Le type enregistrement permet de dfinir des donnes composes dun nombre fixe ou variable
dlments pouvant tre de types diffrents. Chaque lment dun enregistrement est appel un
CHAMP.

Exemple : Type SClient = Structure
Nom : Chane [15]
Prnom : Chane [20]
FinStructure

A partir de ce type, nous pouvons dfinir une variable enregistrement ainsi :

Variable Client : SClient

Pour accder une valeur dun champ, il suffit de faire prcder le nom de ce champ par
lidentificateur du type enregistrement suivi dun point.
Exemple :

Client.Nom "MBODJI"
Client.Prnom "Oumar Soul"

1.3.6.10 Les ensembles

Le type ensemble permet de dfinir des donnes reprsentant une collection dobjets de mme type
(entier, boolen, caractre, numr ou intervalle). Nous pouvons spcifier un ensemble vide en
utilisant [].

Exemple de dclaration : Variable
Chiffre : Ensemble De 0..9
Lettre : Ensemble De "A" .. "Z"

Lensemble Lettre peut recevoir les valeurs suivantes : Lettre = ["I", "U", "O", "A", "E",
"Y"]




Adama MBODJI Les secrets de la programmation
14
1.3.6.11 Les fichiers

Les fichiers reprsentent une collection de donnes de mme type. Celles-ci peuvent tre par
exemple des enregistrements (structures), des entiers, des rels, etc. Les informations sont
gnralement stockes sur disque.
On distingue 3 types de fichiers :

1. Les fichiers typs qui sont gnralement des fichiers denregistrement. Pour dclarer un
fichier de ce type, il suffit de spcifier les mots rservs FICHIER DE suivis du type
denregistrement.

Exemple : Type SClient = Structure
Nom : Chane [15]
Prnom : Chane [20]
FinStructure
FichClient = Fichier de SClient

Le fichier est une collection denregistrements de type SClient.

2. Les fichiers non typs, dclars simplement en utilisant le mot rserv FICHIER, se
distinguent par un accs direct aux informations stockes sur le disque.

Exemple : Type Fich = FICHIER

3. Les fichiers Texte permettent de stocker des informations de taille variable. Elles sont
spares les unes des autres par des identificateurs de fin de ligne (caractre retour chariot).
Pour dclarer un fichier texte, il suffit de spcifier le mot rserv TEXTE.

Exemple : FichText : Fichier de TEXTE

Le fichier FichText est un fichier de type Texte.

1.3.6.12 Les pointeurs

Un type pointeur permet de dfinir une variable dont la valeur est ladresse en mmoire dune autre
variable. Pour dclarer un type pointeur, il suffit dutiliser le symbole ^ ou suivi du type de la
variable pointe. Dans lexemple suivant, le type pointeur permet de crer des variables dont le
contenu correspond une adresse pointant sur un enregistrement ARTICLE.

Exemple : Type Pointeur = Article
Article = Structure
Information : Entier
Precedent : Pointeur
Suivant : Pointeur
FinStructure
Variable
Point : Pointeur

La variable Point contiendra une adresse en mmoire pointant sur un enregistrement de type
Article. Dans cet enregistrement, les champs Precedent et Suivant sont galement du type
Pointeur. Leurs contenus respectifs seront galement une adresse dun enregistrement de type
Article.


Adama MBODJI Les secrets de la programmation
15
Une telle dfinition de structure permet de crer des listes dlments comme ci-dessous :



Adresse prcdente Information Adresse suivante

Figure 4. Dfinition dune structure chane

1.3.7 Les instructions

1.3.7.1 Introduction

Un algorithme se compose dun certain nombre dinstructions. Ces dernires sont classes par
catgories. Nous tudierons tout dabord les instructions standard traitant linformation :
lassignation, la lecture et lcriture. Ensuite, celles dfinissant lordre dexcution dun
programme : la squence, le choix et la boucle. Nous terminerons par les sous programmes
(fonctions et procdures).

1.3.7.2 Lassignation

Lassignation est une instruction qui permet dattribuer une valeur une variable ou un
identificateur de fonction afin den renvoyer le rsultat. Cette valeur retourne, doit tre du mme
type que la variable. La syntaxe est la suivante :

<Variable> / <identificateur de fonction> = (Expression)
ou <variable> / <identificateur de fonction> := (Expression)

Exemple : A := A+1 ; ou A = A+1
Delta = B*B 4 *A*C


1.3.7.3 Les instructions dEntre/Sortie

Les instructions dentre

Linstruction dentre Saisir : elle offre lutilisateur la possibilit dentrer plusieurs valeurs
(donnes) dans des variables.

La syntaxe gnrale est la suivante : SAISIR (<Nom_Var1>, <Nom_Var2>,... <Nom_VarN>)

Les instructions de sortie

Nous avons deux types dinstructions de sortie : Afficher et AfficherLigne.

Linstruction Afficher affiche les donnes et reste sur la mme ligne ; tandis que
AfficherLigne place le curseur aprs laffichage la ligne suivante (retour chariot).

Syntaxe gnrale :

Afficher ou AfficherLigne (<Nom_Var1>, . . ., <Nom_Var2>)



Adama MBODJI Les secrets de la programmation
16
1.3.7.4 Les instructions conditionnelles

Les instructions conditionnelles permettent de modifier lordre de la squence dun algorithme.
Dans une squence, les instructions sont excutes les unes la suite des autres sans interruption.
Nous disposons de deux instructions conditionnelles : SI ... ALORS et SELON ... DE

Linstruction SI Alors (structure alternative)

La structure alternative correspond un choix entre deux possibilits. Suivant la valeur issue de la
condition spcifie dans linstruction, lordinateur excute une suite dinstructions A ou une suite
dinstructions B. En aucun cas, lordinateur nexcute la fois les instructions A et B.

Syntaxe gnrale :

SI <Condition> ALORS SI Moyenne < 10 ALORS
Instruction Afficher Redouble
FINSI FINSI

Ou Ou

SI <Condition> ALORS SI Moyenne < 10 ALORS
Instruction A Afficher Redouble
SINON SINON
Instruction B Afficher Passe
FINSI FINSI

Exemple : <Condition> est une expression logique.

Le choix multiple

Linstruction se prsente comme une alternative ; en effet, elle noffre que deux choix possibles
dpendant de la valeur dune condition (valeur vraie ou fausse). En algorithme, nous disposons
aussi dune instruction permettant deffectuer un choix entre plusieurs dcisions.

Linstruction SELON ... DE
Syntaxe Gnrale

SELON <Expression> DE
Cas <Constante 1>, <Constante 2>, <Constante 3> : Instruction A
Cas <Constante 4>
Dbut
Instruction 1

Instruction N
FIN
CASSINON
Instruction B
FINSELON

<Instruction> peut tre : soit une instruction, soit un bloc dinstructions. Les comparaisons
sont effectues au fur et mesure en commenant par la premire ; ds quune comparaison savre
vraie, les instructions correspondantes sont excutes et le programme se branche linstruction qui
suit FINSELON (les autres comparaisons ne sont donc pas effectues) ; si aucune comparaison ne
savre vraie, les instructions correspondant CASSINON sont effectues (si la clause CASSINON
existe).



Adama MBODJI Les secrets de la programmation
17
1.3.7.5 Les instructions rptitives

Dans un programme plusieurs instructions peuvent se rpter ; il est alors plus intressant dcrire
les instructions une seule fois et de les excuter plusieurs fois. Cette action est ce que lon appelle
BOUCLE.

En algorithmique, nous possdons trois Boucles.

La boucle REPETER JUSQUA

Cette boucle permet dexcuter les instructions comprises entre REPETER et JUSQUA jusqu' ce
que la condition du JUSQUA soit vrifie.

Syntaxe gnrale :

REPETER
Instruction 1
Instruction 2
Instruction N
JUSQUA <Condition>

Les instructions allant de 1 N vont sexcuter jusqu ce que <Condition> soit vrifie. Mais il
faut noter que cette boucle excute au moins une fois ces instructions avant de tester la condition.

La boucle TANTQUE

Cest la boucle la plus utilise en informatique. Son fonctionnement est simple. Elle excute toutes
les instructions comprises entre les mots rservs TANTQUE et FINTANTQUE tant que la condition
de dpart reste vrifie.

La syntaxe gnrale est la suivante :

TANTQUE <Condition> FAIRE
Action(s)
FINTANTQUE

Lordinateur commence par vrifier si la condition est vraie. Si cest le cas, il excute les
instructions de la boucle. Si ce nest pas le cas les instructions suivant le FINTANTQUE sont
excutes.

NB : Pour viter une boucle infinie, il faut modifier la variable du test lintrieur de la boucle.

La boucle POUR

Cette boucle permet dexcuter un certain nombre de fois une suite dinstructions.

Syntaxe gnrale :

POUR <Nom_Var> = <Borne minimale> <Borne maximale> FAIRE
<Action>
FINPOUR

Lordinateur excute linstruction <Action> Borne maximale Borne minimale +1 fois.


Adama MBODJI Les secrets de la programmation
18
1.3.8 Les sous programmes

1.3.8.1 Dfinition

Un sous-programme est rdig de faon telle que son excution puisse tre commande par un
programme. Celui-ci est appel programme appelant. Il fournit des donnes au sous-programme et
rcupre les rsultats de ce dernier.
On distingue deux types de sous programmes : les procdures et les fonctions.
La diffrence est quune fonction renvoie une valeur alors quune procdure ne renvoie pas de
valeur.

1.3.8.2 Les procdures

Les procdures sont composes dun en-tte de procdure et dun bloc dinstructions : cest la partie
dclarative et le corps de la procdure. La syntaxe gnrale est la suivante :

Procdure <identificateur> (<liste de paramtres>)
Dbut
Instruction(s)
FinProcdure

Lappel dune procdure se fait au sein du programme principal avec une instruction compose de
lidentificateur de la procdure suivi des paramtres effectifs. Les paramtres permettent un
programme appelant de transmettre un sous-programme des donnes lors de lappel de ce dernier.

Un sous-programme est rdig de faon pouvoir recevoir des donnes du programme appelant ;
cela est possible grce aux paramtres. Ils sont appels formels lors de la dfinition et effectifs lors
de lappel. Il existe deux types de paramtres : les paramtres transmis par valeur et les paramtres
transmis par adresse.

1.3.8.3 Les fonctions

Les fonctions sont constitues dun en-tte de fonction (partie dclaration) et dun bloc
dinstructions (corps de la fonction). Les fonctions effectuent certaines oprations avant de renvoyer
un rsultat ; elles sont donc appeles dans une expression.

La syntaxe gnrale dune fonction est la suivante :

Fonction <identificateur> (<liste de paramtres>) : <Type
rsultat>
Dbut
Instruction(s)
<Identificateur> = Valeur retour
FinFonction








Adama MBODJI Les secrets de la programmation
19





es diffrents algorithmes que nous verrons par la suite pourront directement tre mis en
application au niveau du logiciel MSAlgoPascal

.
MSAlgoPascal

est un gnrateur de codes. Il traduit automatiquement un algorithme vers


un langage volu : le Pascal.
Suivez pas pas les notes qui sont signales pour en tirer profit.


2.1 Configuration requise

Pour une meilleure utilisation du logiciel MSAlgoPascal

, vous devez disposer de :



Processeur : PC Pentium 100 MHz au minimum

Systme dexploitation : Parfaitement compatible sur toutes les versions de Windows

sous
32 Bits (Windows 95, Windows 98, Windows NT, Windows Millenium, Windows 2000 et
Windows XP).

Ram (mmoire vive ou centrale) : 32 Mo.

Dfinition de lcran : minimum 256 couleurs.

Espace disque : 3.5 Mo espace disque.

Priphrique : Carte son et un lecteur de cd-rom.


2.2 Installation de MSAlgoPascal

Le logiciel MSAlgoPascal

est livr sur cd-rom. Insrez le cd-rom dinstallation dans votre lecteur,
puis patientez un moment. Cette fentre saffiche en premier lieu.



Cliquez sur le bouton Installer, pour dmarrer linstallation du logiciel MSAlgoPascal

.
L


Adama MBODJI Les secrets de la programmation
20
Au clic, voici la fentre qui saffiche.



Cliquer sur le bouton OK

Une nouvelle fentre se prsente et vous demande de choisir votre rpertoire dinstallation. Pour
son bon fonctionnement, MSAlgoPascal

doit tre install dans le rpertoire C:\ALGOPAS.




Validez toutes ces oprations en cliquant sur le bouton suivant :

Vous tes prsent au bout ; la copie des fichiers se lance automatiquement. Patientez jusqu ce
que la barre des pourcentages soit 100 %.



Tous les fichiers sont dsormais sur votre disque dur, vous pouvez maintenant retirer le cd-rom
dinstallation de MSAlgoPascal

de votre lecteur.

Cliquez sur le bouton Dmarrer de Windows, ensuite sur Tous les programmes (pour les autres
versions de Windows (Win9x, WinNT, 2000) vous avez programmes au lieu de Tous les
programmes ) puis sur le groupe de Travail MSAlgoPascal et enfin MSAlgoPascal.




Adama MBODJI Les secrets de la programmation
21



Lancement de MSAlgoPascal

depuis le menu dmarrer




2.3 Pas pas sur MSAlgoPascal



Vous avez enfin install MSAlgoPascal

. Vous pouvez lancer MSAlgoPascal

tout moment ;
depuis le menu dmarrer de Windows. Cette fentre saffiche en premier lieu :



Chargement de la base de donnes en mmoire centrale

Cette fentre danimation saffiche pour une petite dure, elle charge la base de donnes
(dictionnaire) en mmoire.





Adama MBODJI Les secrets de la programmation
22
A la fin du traitement, la fentre principale saffichera lcran.



Interface de MSAlgoPascal



Cette fentre prsente lenvironnement gnral. Elle contient une barre doutils avec des boutons
sur la partie suprieure de la fentre et une zone de texte sur la partie gauche. Cest partir de cette
zone de texte (diteur de texte) que lutilisateur saisit son algorithme.

2.3.1 Comment crire un algorithme ?

Lcriture dun algorithme est trs simple. MSAlgoPascal

dispose dun diteur de texte standard


que lutilisateur utilise pour saisir ses algorithmes. Cette zone de texte est similaire Bloc-notes de
Windows.

Par dfaut, un bout de code est affich pour prparer lalgorithme venir.

ALGO Nom_Algo

DBUT

FINALGO

Pour saisir un algorithme, lutilisateur peut changer le nom Nom_Algo par le nouveau nom quil
introduit, ensuite dclarer les variables, types, constantes si ncessaire. Puis entre Dbut et
FinAlgo, il introduit les instructions de lalgorithme principal.

2.3.2 Prsentation des objets de lenvironnement

2.3.2.1 La barre doutils






Adama MBODJI Les secrets de la programmation
23
Le logiciel MSAlgoPascal

dispose dune barre doutils complte qui permet lutilisateur de


dialoguer avec le systme.

Le bouton Nouveau

Il sert crer de nouveaux algorithmes. Lordinateur affiche une page vierge et invite
lutilisateur saisir son nouvel algorithme.

Le bouton Ouvrir

Ce bouton nous permet daccder au rpertoire des fichiers dalgorithme sauvegards sur le
disque dur et de les ouvrir.

A son clic, voici la fentre qui saffiche.



Lutilisateur peut slectionner lun des algorithmes prcdemment sauvegards pour lditer
nouveau.

Aprs slection, voici lapparence de la fentre principale.




Adama MBODJI Les secrets de la programmation
24
Le bouton Enregistrer

Le bouton Enregistrer sert sauvegarder lalgorithme courant sur le disque dur.

Si lalgorithme porte dj un nom, le fichier source est automatiquement mis jour selon les
modifications effectues. Mais sil sagit dun nouvel algorithme, une fentre denregistrement
saffiche et invite nouveau lutilisateur donner un nom lalgorithme.

Cette fentre denregistrement se prsente ainsi :



Lutilisateur est appel donner un nom de fichier nayant pas plus de 8 caractres ( cause du
systme de gestion de fichier sur MS-DOS). Ce fichier ne doit comporter ni de caractres spciaux
ni despaces. Une fois saisi, on clique sur le bouton Enregistrer pour valider cette opration.

Le bouton Imprimer

Ce bouton permet lutilisateur dimprimer ses codes sources (aussi bien lalgorithme que
sa traduction en langage Pascal). A son clic, une fentre saffiche et linvite choisir le code
imprimer. La fentre dinvite se prsente ainsi :




Le bouton Dictionnaire

Il est trs important et permet daccder la base de donnes du systme. A son clic, la
fentre de relation saffiche. Les donnes sont tries sur lalgorithme par dfaut.



Adama MBODJI Les secrets de la programmation
25


A chaque clic sur un enregistrement (occurrence), le systme pointe automatiquement sur
lenregistrement auquel il correspond. Par exemple, en cliquant sur "ALGO", lordinateur
slectionne parmi les mots lists en Pascal "PROGRAM" et un vide sur la liste des Librairies. Cela
veut simplement dire que "ALGO" en algorithme signifie "PROGRAM" en Pascal et son utilisation
ne ncessite pas de "librairie".

Le bouton Zoom

Il permet dagrandir lalgorithme ou la traduction en plein cran et facilite lcriture de
lalgorithme.



Zoom sur lalgorithme

Le bouton Gestion de linterface de lenvironnement

La gestion de linterface de lenvironnement permet lutilisateur de personnaliser
linterface gnrale. Cette fentre saffiche par la suite :


Adama MBODJI Les secrets de la programmation
26


Gestionnaire des couleurs de lenvironnement

Grce cette fentre lutilisateur peut changer la couleur de la police, la couleur de fond et de
lenvironnement. Cette fentre permet aussi de changer le type de police et la taille de tabulation.
Pour conserver ces modifications, il suffit de cliquer sur le bouton Mmoriser.
A chaque redmarrage du logiciel, MSAlgoPascal

conserve les dernires modifications de la


gestion de linterface de lenvironnement.


Le bouton Traduire en langage Pascal

Pour traduire notre algorithme en langage Pascal, il suffit de cliquer sur ce bouton. Cest ce
dernier qui dclenche lensemble des procdures et des fonctions vues antrieurement pour avoir
une traduction correcte. Plusieurs messages derreur peuvent tre envoys lutilisateur pour quil
les corrige. En voici quelques exemples :


Exemple 1

Algo exemple1
Var
A, b : entier
Dbut
Saisir (a1)
Saisir (b)
FinAlgo


La variable a1 na pas t dfinie.

Exemple 2

Algo exemple2
Var
A : entier
Dbut
A = 20
TantQue A > 0 Faire
Afficher ( A= , A)
A = A 1
FinAlgo



Adama MBODJI Les secrets de la programmation
27
La clause ouvrante TantQue na pas t ferme.
Exemple 3

Algo exemple3
Var
K : entier
Dbut
A1 = 0
TantQue A <= 20 Faire
Afficher (K) ;
K = K +1
FinTantque
FinAlgo

A1 est non identifi.


Exemple 4

Algo Exemple4
Var
1A : entier
Dbut
Saisir (1A)
Si 1A = 0 alors
Afficher un nombre nul
FinSi
FinAlgo

Une variable ne doit pas dbuter par 1 2 3 4 5 6 7 8 9 0 + - * / ^ ( )



Exemple 5

Algo Exemple5
Var a, b, c : entier
Dbut
Saisir (a, b, c)
Afficher ( (a+b) / c = , (a+b/c)
FinAlgo


Expression mal parenthse

Une fois que lalgorithme est correct, le systme affiche sa traduction en langage Pascal dans la
zone de texte situe droite de votre algorithme de sorte que vous puissiez mieux voir la traduction.
















Adama MBODJI Les secrets de la programmation
28


Traduction dun exemple dalgorithme en langage Pascal

Le bouton Excuter en langage Pascal

MSAlgoPascal

est muni du compilateur de Borland Turbo Pascal 7.0. Celui-ci nous


permet dditer et dexcuter nos algorithmes traduits en langage Pascal. Au clic de ce bouton, la
fentre du compilateur Turbo Pascal 7.0 saffiche.




Traduction de lalgorithme dite partir de lditeur de Borland Turbo Pascal 7.0

A partir de Turbo Pascal 7.0, lutilisateur peut excuter ses programmes en appuyant simultanment
sur les touches CTRL + F9. Voici ce que nous avons lors de lexcution dun algorithme par Turbo
Pascal.


Adama MBODJI Les secrets de la programmation
29


Excution du programme

Le bouton Aide

Pour savoir comment crire un algorithme correct, il suffit de cliquer sur ce bouton. Une
aide saffiche et explique comment faire.



Fentre daide


2.3.2.2 Autres options du logiciel MSAlgoPascal


Opration dajout

Il peut arriver quun mot ne soit pas traduit par MSAlgoPascal

, il faut donc ajouter ce dernier dans


le dictionnaire et donner son quivalence en Pascal ; ainsi que la librairie associe. Pour ce faire,
cliquer sur le menu "Dictionnaire" puis sur "ajouter un mot cl"




Adama MBODJI Les secrets de la programmation
30
Ainsi la fentre dajout saffiche.



Fentre dajout dun mot dans le dictionnaire

Dans cet exemple, le mot "EffacerMoniteur" a t ajout et son quivalence en Pascal nest
rien dautre que "CLRSCR". Or la procdure "CLRSCR" se trouve dans la librairie standard "CRT".

Opration de suppression

Pour supprimer un mot au sein de la base de donnes, il suffit daller au menu Dictionnaire , puis
sur Supprimer un mot cl .




A son clic, voici la fentre qui saffiche.



Le systme nous invite saisir le mot supprimer en algorithme et sa signification en langage
Pascal.




Adama MBODJI Les secrets de la programmation
31




ans un tableau, toutes les donnes lmentaires qui le constituent doivent tre du mme
type. De plus, laccs un lment du tableau ne se fait que par son approche numrique,
en indiquant entre crochets le rang de llment lire ou crire ; cest--dire son indice.

3.1 Tableaux simples (une dimension)

Un tableau permet de regrouper une quantit importante dlments (valeurs) de mme type. Voici
comment dclarer un tableau appel TAB en algorithme et en langage Pascal.

Dclaration en algorithme

Variable
TAB : Tableau [1..10] de entier

Dclaration en langage Pascal

Var
TAB : Array [1.. 10] of integer ;

De ce fait, pour dclarer un tableau, il faut donner ses bornes (minimale et maximale).

TAB : TABLEAU [min .. max]

Indice minimal indice maximal

Dans lexemple, nous avons dclar dun seul coup 10 variables de type entier. Pour accder la
6
me
variable, il suffit dcrire

TAB [6]

Cet indice appartient naturellement lintervalle des bornes (min et max).

Faciliter la programmation

Imaginez que lon veuille attribuer 15 valeurs 15 personnes. Pour ce faire, nous dclarons 15
variables de type entier et nous passons la saisie des valeurs.

Variable
Val1, val2, val3, val4, val5,
val6, val7, val8, val9, val10,
val11, val12, val13, val14, val15 : Entier
Dbut
Saisir (val1)
(...)
Saisir (val15)
FinAlgo
D


Adama MBODJI Les secrets de la programmation
32
Pour la mthode tableau, il suffit dcrire :

Variable TAB : Tableau [1..15] de Entier
i : Entier
Dbut
Pour i=1 15 faire
Saisir (TAB [i]) ;
FinPour
% simple non ! %

Pour sen convaincre, essayons pour 1000 valeurs.

TAB : TABLEAU [1..1000] de entier % cest tout %

3.2 Tableau plusieurs dimensions

Dclaration en algorithme

Variable
TAB : TABLEAU [1..5, 1..5] de entier

Dclaration en Pascal

Var
TAB : Array [1..5, 1..5] of integer;

Nous avons dclar un tableau de 5 x 5 lments.

Reprsentation graphique







Plusieurs oprations et structures de donnes peuvent tre ralises grce aux tableaux. Ces
oprations peuvent tre entre autres :

les tris, les recherches, les compressions de donnes
les piles, les files, les arbres, etc.

3.3 Oprations classiques sur les tableaux

3.3.1 Affichage des donnes dun tableau

Il suffit de parcourir toutes les cellules du tableau et dafficher les donnes qui sy trouvent.

Exemple 1 : soit un tableau x 1 de taille N, le sous-programme suivant nous affiche alors tous les
lments de ce dernier.


Adama MBODJI Les secrets de la programmation
33
Procdure AfficheTab (donne TabR : TAB ; N : entier)
Variable
i : entier
Dbut
Pour i = 1 N Faire
AfficherLigne (TabR [i])
FinPour
FinProcdure

NB : sil sagit dun tableau dont les lments sont des enregistrements, linstruction daffichage
devient alors

AfficherLigne (TabR[i].NomChamp)

Exemple : Soit la structure suivante

Type Etudiant = Structure
Matricule : Chane [3]
Nom : Chane [10]
Prenom : Chane [15]
FinStructure

Pour afficher le matricule, le nom et le prnom de ltudiant dindice 5, il suffit dcrire

1
er
cas
AfficherLigne (TabR [5].Matricule)
AfficherLigne (TabR [5].Nom)
AfficherLigne (TabR [5].Prenom)

2
me
cas
Avec TabR [5] Faire
AfficherLigne (Matricule)
AfficherLigne (Nom)
AfficherLigne (Prenom)
FinAvec

3.3.2 Opration dajout

Cette opration ne peut se faire quau cas o il y a de lespace libre dans le vecteur. Il faut au moins
une cellule non utilise pour la raliser.

Cas 1

Soit un tableau x 1 (1 dimension) de taille n. Ecrire lalgorithme qui ajoute n valeurs VAL au
tableau.

Algorithme AjoutValeur
Constante n = 10
TYPE TAB = Tableau [1..10] de Entier
Variable
Nbr, ValeurLue : Entier
TabR : TAB


Adama MBODJI Les secrets de la programmation
34
Procdure Ajout (Donne Val, Nbr : Entier ; Rsultat TabR : TAB)
Dbut
Si (Nbr = n) alors
AfficherLigne "Ajout impossible"
Sinon
Nbr = Nbr + 1
TabR [Nbr] = Val
FinSi
FinProcdure
DBUT
Nbr 0
Repeter
Saisir (ValeurLue)
Ajout (ValeurLue, Nbr, TabR)
Jusqua (Nbr = Max)
FinAlgorithme

NB : nous remarquons que le cas ci-dessus ne sintresse pas lordre ; notre souci tait simplement
dajouter un lment donn. Or, dans la pratique, pour la plupart du temps, lordre est trs
important.

Cas 2

Ecrire le sous-programme qui ajoute la valeur VAL si possible la position POS du tableau tout en
respectant lordre de tri.

Procdure Ajout (Donne Val, Nbr, Pos : Entier ; Rsultat TabR :
TAB)
Variable
i : Entier
Dbut
Si (Nbr = max) Alors
Afficherligne "Ajout impossible"
Sinon
Si (Pos > Max) Alors
Afficherligne "Position incorrecte"
Sinon
Pour i=Nbr Pos Faire
TabR [i+1] = TAB [i]
FinPour

TabR [Pos] = Val
Nbr = Nbr +1
FinSi
FinSi
FinProcdure

Note : Nbr est le nombre dlments prsents dans le vecteur (tableau). Le principe consiste
dplacer tous les lments en partant de la position Nbr Pos vers Nbr+1 Pos+1.

Autrement dit, il faut faire lapplication F (x) F (x+1) tel que x appartient
[Nbr-1, Pos] ; puis attribuer F (Pos) la valeur ajouter : F (Pos) Val.


Adama MBODJI Les secrets de la programmation
35
Nous verrons par la suite que Pos est dtermin par un algorithme de recherche.

3.3.3 Opration de suppression

Ayant compris lopration dajout, celle de suppression devient facile raliser. Cette dernire est
son inverse.

Ecrire la Procdure SupprimeVal (donne TabR : TAB, Pos, Nbr :
entier ; Rsultat TabR : TAB) qui supprime llment dindice Pos.

Procdure SupprimeVal (donne TabR : TAB, Pos, Nbr : entier ;
Rsultat TabR : TAB)

Var i : entier
Dbut
Si (Pos > Max) Alors
Afficherligne "Position incorrecte"
Sinon
Si (Nbr = 0) Alors
AfficherLigne "Tableau vide"
Sinon
Pour i=Pos nbr-1 faire
TabR [i] TabR [i+1]
FinPour
Nbr (Nbr 1)
FinSi
FinSi
FinProcdure

NB : Dans la pratique, si nous avons affaire des tables de taille importante, lopration de
suppression est souvent optimise car la rorganisation de la table ncessite un temps norme. Il est
prfrable de rcuprer les enregistrements (cellules) supprims lors de la cration de nouveaux
enregistrements. Cette opration se fait laide dun marqueur de prsence.

3.3.4 Oprations de recherche

Elles font partie des oprations les plus utilises en informatique. Les plus frquentes sont : la
recherche squentielle et la recherche dichotomique.

3.3.4.1 La recherche squentielle

La recherche consiste partir du dbut dun tableau, comparer llment rencontr celui que
lon cherche. Si ce dernier est diffrent alors on passe lindice suivant ; sinon on arrte lopration
car linformation recherche est trouve.

Ecrire la Fonction RechercheValeur (donne Val, Nbr : entier, TabR :
TAB) : Boolen qui cherche la valeur Val dans le tableau TabR.






Adama MBODJI Les secrets de la programmation
36
Fonction RechercheValeur (donne Val, Nbr : entier ; TabR : TAB) :
Boolen
Variable
Trouver : Boolen
i : entier
Dbut
Trouver faux
i 1
TantQue (i <= Nbr) ET (Trouver = FAUX) FAIRE
Si TabR [i] = Val Alors
Trouver Vrai
Sinon
i (i + 1)
FinSi
FinTantQue
RechercheValeur Trouver
FinFonction

Remarque : Cette recherche est relativement lente. Imaginons que llment que nous cherchons se
trouve la position 150000. Nous sommes obligs de parcourir 150000 lments pour le trouver. Si
linformation recherche ne se trouve pas au niveau du vecteur, lalgorithme le parcourt du dbut
la fin pour tre sr que linformation ne sy trouve pas.

Ce problme nous amne optimiser lalgorithme tout en utilisant un autre beaucoup plus rapide.

3.3.4.2 La recherche dichotomique

Le principe de la recherche dichotomique rside dans la division successive de lespace de
recherche en deux dans un vecteur ordonn sur le critre de recherche.

Ecrire la Fonction RechercheValeur (donne Val, Nbr : entier, TabR :
TAB) : Boolen qui cherche dichotomiquement la valeur Val dans le tableau TabR.

Fonction RechercheValeur (donne Val, Nbr : entier, TabR : TAB) : Boolen
Variable
Trouver : Boolen
BorneInferieur, BorneSuperieur, Milieu : entier
Dbut
BorneInferieur 1 ; BorneSuperieur Nbr ; Trouver Faux
TantQue (Trouver = Faux) ET (BorneInferieur <= BorneSuperieur) Faire
Milieu (BorneInferieur + BorneSuperieur) / 2
Si TabR [Milieu] < Val Alors
BorneInferieur (Milieu + 1)
Sinon
Si TabR [Milieu] > Val Alors
BorneSuperieur (Milieu 1)
Sinon
Trouver Vrai
FinSi
FinSi
FinTantQue
FinFonction



Adama MBODJI Les secrets de la programmation
37
3.3.4.3 La recherche de la position dune information

La recherche squentielle et la recherche dichotomique peuvent nous permettre de dterminer la
position o il faut insrer linformation.

Ainsi pour la recherche squentielle nous aurons :

Procdure RecherchePosition (donne Val, Nbr : entier ; TabR :
TAB ; Rsultat Position : Entier)
Variable
Trouver : Boolen
i : entier
Dbut
Trouver faux
i 1 ; Position 1
TantQue (i <= Nbr) ET (Trouver = FAUX) FAIRE
Si TabR [i] <= Val Alors
i (i + 1)
Sinon
Trouver Vrai
Position i
FinSi
FinTantQue
FinFonction

Et pour la recherche dichotomique, lalgorithme devient :

Procdure RecherchePosition (donne Val, Nbr : entier, TabR : TAB ; Rsultat
Position : entier)
Variable
Arret : Boolen
BorneInferieur, BorneSuperieur, Milieu : entier
Dbut
BorneInferieur 1
BorneSuperieur Nbr
Arret Faux
Position 1
TantQue (Arret = Faux) ET (BorneInferieur <= BorneSuperieur) Faire
Milieu (BorneInferieur + BorneSuperieur) / 2
Si TabR [Milieu] < Val Alors
BorneInferieur (Milieu + 1)
Sinon
Si TabR [Milieu] > Val Alors
BorneSuperieur (Milieu 1)
Sinon
Arret Vrai
FinSi
FinSi
FinTantQue
Position Milieu
FinFonction




Adama MBODJI Les secrets de la programmation
38




Exercice 1 : Ecrire la fonction Palindrome (donne Mot : Chane) : Boolen
qui vrifie si un mot est palindrome ou pas. Nous rappelons quun palindrome est une suite de
caractres qui se lit indiffremment de gauche droite ou de droite gauche en donnant le mme
texte ou un texte diffrent. Exemple : "radar", "matam", "sexes","Laval"

Exercice 2 : Ecrire la Procdure TransposeMatrice (donne Rsultat T1) qui
cre la transpose de la matrice carre T1.

Exercice 3 : Ecrire la Procdure Symtrie (donne T1, Rsultat T2) qui cre la
symtrie de la matrice carre T1.

Exercice 4 : Ecrire le sous-programme qui transforme un tableau deux dimensions en un vecteur
(tableau une dimension).

Exemple : lexemple ci-dessous transforme le tableau TAB en un vecteur appel VECT.

TAB
0 10 1 5 3
4 7 8 0 0
0 4 2 8 3
4 9 9 0 0
1 0 0 1 0

VECT
0 10 1 5 3 4 7 8 0 0 0 4 2 8 3 4 9 9 0 0 1 0 0 1 0

Exercice 5 : Faites la rciproque de lexercice prcdant (quitter VECT vers TAB).

Exercice 6 : Ecrire un programme en Pascal qui vrifie si un tableau x 2 est symtrique ou
antisymtrique. Nous rappelons que ce tableau doit tre carr.

Exemple de matrice carre symtrique :
2 4 0 9
4 4 1 0
0 1 -5 8
9 0 8 7

Remarque : Quelque soit a
ij
avec i j on a a
ij
= a
ji


Exemple de matrice carre antisymtrique :

0 1 0 9
-1 0 -7 -4
0 7 0 8
-9 4 -8 0
Remarque : Quelque soit a
ij
avec i j on a a
ij
= -a
ji
. Et nous remarquons que les
valeurs situes sur la diagonale principale sont nulles.


Adama MBODJI Les secrets de la programmation
39
Exercice 7 : Ecrire un programme en Pascal qui mmorise ladresse des valeurs non nulles dune
matrice par les couples (i, j, a
ij
) dans un vecteur VECT ou i reprsente la ligne, j la
colonne et a
ij
linformation.

Exemple

TAB
0 0 0 9
0 8 0 -4
0 0 0 0
0 4 0 0

VECT devient alors

1 4 9 2 2 8 2 4 -4 4 2 4

Exercice 8 : Ecrire la rciproque de lexercice prcdent. Nous quitterons le vecteur VECT pour
construire le tableau TAB.

Exercice 9 : Ecrire un programme qui fait la somme et le produit des nombres dun tableau deux
dimensions.

Exercice 10 : Ecrire un programme qui calcule les totaux par ligne et par colonne dun tableau
deux dimensions.

Exemple









Exercice 11 : Soit un vecteur de taille N (avec N un multiple de 3) form par les chiffres suivants :
{1, 2,3} dans le dsordre. Ecrire la procdure qui rorganise ce vecteur dans lordre de
{1 2 3 1 2 3 1 2 3 ... 1 2 3}.

NB : il y a autant de 1 de 2 que de 3 .

Exemple :

Vecteur initial
1 3 1 2 3 2 3 1 3 2 2 1

Vecteur final
1 2 3 1 2 3 1 2 3 1 2 3


0 0 0 9
0 8 0 -4
0 0 0 0
0 4 0 0
Total par ligne
9
4
0
4
Total par colonne
0 12 0 5


Adama MBODJI Les secrets de la programmation
40




4.1 Dfinition

e tri est une opration qui consiste classer des informations, des donnes selon un ou
plusieurs critres ou selon un certain ordre. Lopration de tri est trs importante et trs
utilise dans les programmes informatiques utilisant les algorithmes de recherche. Imaginez
que lon dispose dun dictionnaire non tri, comme il serait fastidieux de trouver un mot. Combien
de temps nous faudra-t-il pour retrouver le mot que lon cherche ?

Il existe plusieurs algorithmes de tri. Les plus courants sont :

tri par slection
tri par insertion
tri bulles

Au niveau des algorithmes qui vont suivre, nous supposerons que nous disposons dun vecteur de
Nbr lments (de type entier).

4.2 Le tri par slection

Le principe des mthodes de tri par slection est de rechercher le minimum dans le vecteur donn,
de le placer en tte et de recommencer sur le reste de la liste. A la i
me
tape, le sous-vecteur [1.. i-1]
est tri. Llment de cl minimale, trouve entre le rang i et le rang n, est plac au rang i, et le tri se
poursuit ltape i+1.

Exemple : Soit le vecteur VECT [1..5].

Premire itration

11 26 45 3 68
i j
i = 1
j = i + 1
Le plus petit lment du sous-vecteur (sous-matrice) [2,5] est 3. Alors nous le permutons avec
llment dindice
i = 1.

Le vecteur devient alors

Deuxime itration

3 26 45 11 68
i j
i = 2
j = i + 1
L
3 26 45 68 11


Adama MBODJI Les secrets de la programmation
41
Le plus petit lment du sous-vecteur [3 ,5] est 11. Ce dernier sera permut avec llment dindice
i=2.
Le vecteur devient alors

Troisime itration

3 11 45 26 68
i j
i = 3
j = i + 1 % j = 4 %
Le plus petit lment du sous-vecteur [4,5] est 26. Ce dernier sera permut avec llment dindice
i= 3.

Le vecteur devient alors

Quatrime et dernire itration

i = 4
j = i + 1

Aucune permutation ne sera effectue car 26 < 68.



Nous utiliserons le sous-programme qui ralise la permutation de deux entits de mme type.

Procdure Permute (donne Rsultat Valeur1, Valeur2 : entier)
Variable Tampon : entier
Dbut
Tampon Valeur1
Valeur1 Valeur2
Valeur2 Tampon
FinProcdure

Lalgorithme de tri par slection est le suivant :

Procdure TriSelection (Donne Nbr : entier; Rsultat TabR : TAB)
Variable
i, j : entier
Dbut
Pour i=1 Nbr-1 Faire
Pour j = i+1 Nbr Faire
Si TabR [i] > TabR [j] Alors
Permute (TabR [i], TabR [j])
FinSi
FinPour
FinPour
FinProcdure



3 11 45 68 26
3 11 45 26 68
3 11 45 26 68


Adama MBODJI Les secrets de la programmation
42
4.3 Le tri par insertion simple

On choisit un lment du vecteur, on trie les autres et on insre llment initialement choisi la
bonne place en parcourant le tableau. Chaque lment sera insr sa place.

Procdure TriInsertion (Donne Nbr : entier, TabR : TAB ; Rsultat
TabR : TAB)
Variable
i, j, Tampon : entier
Dbut
i 2
TantQue (i <= Nbr) Faire
Tampon TabR [i]
j i 1
TantQue (j > 0) ET (Tampon < TabR [j]) Faire
TabR [j+1] TabR [j]
j j 1
FinTantQue
TabR [j + 1] Tampon
i i + 1
FinTantQue
FinProcdure

Exercice : Utilisez le vecteur suivant :

et laide de votre crayon droulez lalgorithme. (ici Nbr = 5)

4.4 Le tri bulles

On parcourt le tableau en comparant deux lments conscutifs ; sils sont mal placs, on les
permute. Cela revient faire remonter le plus grand lment chaque parcours. Comme une bulle
dair qui remonte la surface de leau, do le nom de tri bulles. (Il est aussi appel tri par
permutation ou tri par changes).

4.4.1 La premire mthode

Procdure TriInsertion (Donne Nbr : entier ; Rsultat TabR : TAB)
Var
i, Dernier : entier
Dbut
Dernier Nbr 1
Repeter
Pour i=1 dernier Faire
Si TabR [i] > TabR [i+1] Alors
Permute (TabR [i], TabR [i+1])
FinSi
FinPour
Dernier dernier 1
Jusqua (dernier = 1)
FinProcdure
45 33 5 26 7


Adama MBODJI Les secrets de la programmation
43
Parfois les dernires itrations sont inutiles, elles ne dclent aucune inversion et neffectuent donc
aucune permutation. Ce phnomne peut tre vit en arrtant lalgorithme ds quil nest plus
possible deffectuer une inversion.

4.4.2 La deuxime mthode

Procdure TriInsertion (Donne Nbr : entier ; Rsultat TabR : TAB)
Var
i, Dernier : entier
Echange : boolen
Dbut
Dernier Nbr 1
Repeter
Echange faux
Pour i=1 dernier Faire
Si TabR [i] > TabR [i+1] Alors
Permute (TabR [i], TabR [i+1])
Echange vrai
FinSi
FinPour
Dernier dernier 1
Jusqua (Echange = faux)
FinProcdure





























Adama MBODJI Les secrets de la programmation
44




5.1 Dfinition

ne chane de caractres nest rien dautre quun vecteur de caractres. Auparavant elle tait
dclare :

NomChaine : Tableau [1..N] de caractere

Son utilisation accrue a permis au concepteur de compilateurs tel que le Pascal de lui donner un
type part : String. Pour dclarer une chane de 50 enregistrements en Pascal, il suffit de dire
NomChaine : String [Taille] o Taille est un entier positif infrieur ou gal 255.

En algorithmique, la dclaration est la suivante : NomChaine : Chane [Taille].
Si le programmeur ne prcise pas lors de la dclaration la taille de la chane, le compilateur lui
rserve directement la taille maximale (255). Il faut noter quen cours dexcution la longueur dune
chane peut varier.

Nous verrons au chapitre consacr lallocation dynamique comment faire pour disposer des
chanes suprieures 255 caractres.

5.2 Accs un caractre

Tous les traitements effectus sur les vecteurs sont possibles sur les chanes de caractres. Ainsi
pour accder au i
me
caractre suppos existant, il suffit de dire NomChaine [i].

Exemple

Variable Nom : Chane [10]
Dbut
Nom "NDIANOR"
AfficherLigne "Le premier caractre de votre nom est", Nom [1]

Exercice :

Ecrire la fonction qui compte le nombre de syllabes contenues dans une chane donne.

NB : La fonction Longueur (NomChaine) renvoie la longueur dune chane donne. Cette
fonction est Length en Pascal.

Fonction NombreSyllabe (Donne Ligne : Chane) : entier
Variable
i, Nbr : entier ; % i est lindice de parcours %
Dbut
Nbr 0
Pour i=1 Longueur (Ligne) Faire
Selon Ligne [i] Faire
U


Adama MBODJI Les secrets de la programmation
45
Cas "i", "u", "o", "a", "e", "y" :
Nbr Nbr + 1
FinSelon
FinPour
NombreSyllabe Nbr
FinFonction


5.3 Concatnation de chanes

La concatnation ou laddition de deux ou plusieurs chanes donne comme rsultat la juxtaposition
de ces chanes. Loprateur de concatnation est le + .

Exemple : Soit A, B, C et R quatre chanes de caractres, on a :

A "Bonjour"
B "mes"
C "amis"
R A + " " + B + " " + C

A la fin de cette opration, R donne la valeur suivante : "Bonjour mes amis"

NB : une chane peut tre vide. (R ""). Ceci est trs utilis en informatique surtout lors de
linitialisation des variables de type chane. La longueur dune chane vide vaut zro.


5.4 Les fonctions utiles pour le traitement des chanes


Longueur (NomChaine : Chane) : entier renvoie la longueur dune chane.
CVNombre (NomChaine) : entier convertit une chane en valeur numrique.
CVChaine (ValeurNumerique) : chane convertit une valeur numrique en
chane de caractres.
ToucheAppuie lit une touche saisie au clavier.
LireTouche renvoie la touche saisie au clavier.
Pos (Chaine1, Chaine2 : chane) : entier retourne la position de la
premire occurrence dune sous-chane de caractres dans une chane de caractres.
InsertChaine (chaine1, chaine2 : chane, Posit : entier) insre
la sous-chane (chaine1) dans une chane de caractres (chaine2) partir de la position
Posit.











Adama MBODJI Les secrets de la programmation
46





Exercice 1 : Ecrire la fonction Pos (chaine1, chaine2 : chane) : entier qui
retourne la position de la premire occurrence dune sous-chane de caractres dans une chane de
caractres.

Exercice 2 : Ecrire la Procdure InsertChaine (Donne chaine1 : chane ;
Posit : entier ; rsultat chaine2 : chane) qui insre la sous-chane (chane1)
dans la chane de caractres (chaine2) partir de la position Posit.

Exercice 3 : Ecrire la Procdure OccurenceAlphabet (donne Ligne : chane,
Rsultat Alphabet : Tableau [1..26] de Entier) qui compte le nombre
doccurrences du caractre Alphabet [i] de la ligne Ligne.

NB : Alphabet [1] = "A", Alphabet [2] = "B",..., Alphabet [26] = "Z"

Exemple : Ligne = "je suis un informaticien"

Reprsentation du vecteur Alphabet aprs le droulement de lalgorithme.

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
2 0 1 0 2 1 0 0 4 1 0 0 0 2 1 0 0 1 2 1 2 0 0 0 0 0

Exercice 4 : Ecrire la Fonction RechercheMot (donne Ligne : chane,
Posit : entier) : Chane qui affiche le premier mot rencontr de la ligne Ligne en
partant de la position Posit.

Exemple :

Ligne = "je suis un dbutant en informatique"
Posit = 12
RechercheMot (ligne, Posit) = "dbutant"

Exercice 5 : Lors de la conception du gnrateur de codes MSAlgoC

, il arrive de transformer des


instructions de lalgorithme en langage C. Par exemple : linstruction (boucle Pour) suivante :
Pour i = 1 15 Faire donne en C for (i = 1 ; i <= 15 ; i++).



Analyser attentivement le schma ci-dessus puis crire la Procedure (donne
BouclePourAlgo : chaine, Rsultat BouclePourC : chaine) qui transforme
une boucle Pour en boucle for.


Adama MBODJI Les secrets de la programmation
47




l est souvent intressant de pouvoir manipuler dans un tableau plusieurs types diffrents.
Par exemple pour grer les 50 tudiants dune cole comprenant les informations suivantes :

(Matricule : entier ; Nom : Chane [10] ; Prnom : Chane [15] ;
Adresse : Chane [35] ; etc.)

Etant donn les types forms par ces informations sont diffrents, la premire ide qui nous vient
lesprit est dutiliser quatre (4) tableaux :

Constante Max = 50
Type TabMatri = Tableau [1..Max] de entier
TabNom = Tableau [1..Max] de Chane [10]
TabPrenom = Tableau [1..Max] de Chane [15]
TabAdress = Tableau [1..Max] de Chane [35]
Variable % Puis dclarer les variables tableaux%
TMatricule : TabMatri
TNom : TabNom
TPrenom : TabPrenom
TAdresse : TabAdress
% ouf ! Difficile crire %

Quels sont les inconvnients dune telle dfinition ?

La dclaration est fastidieuse. Imaginez pour des informations qui ncessitent 15
tableaux combien de lignes nous faudrait-il ?
Au niveau des algorithmes de recherche, de suppression, dajout, de modification et de
tri, tous les tableaux doivent avoir le mme indice. Sinon il y aurait des informations
incohrentes.
Toute modification apporte sur lun de ces tableaux doit imprativement tre effectue
sur les autres.

6.1 Dclaration dune structure

Pour raliser ces oprations laide dun tableau, nous utiliserons un nouveau type de donnes
appel enregistrement ou structure.

La structure gnrale de la dclaration dun enregistrement est la suivante :

Type NomEnregistrement = Structure
Champ1 : Type1
Champ2 : Type2
(...)
Champ
n
: Type
n

FinStructure
Variable NomTableau : Tableau [1..Limite] de NomEnregistrement.

I


Adama MBODJI Les secrets de la programmation
48
Ainsi la dclaration ci-dessus devient alors

Constante Max = 50
Type Etudiant = Structure
Matricule : entier
Nom : Chane [10]
Prenom : Chane [15]
Adresse : Chane [35]
FinStructure
Variable
TabEtudiant : Tableau [1..Max] de Etudiant

% simple non par rapport au prcdant ! %

Dsormais, tous les champs sont logs au niveau dun seul tableau. Pour accder un champ
voir le chapitre 1.3.6.9.

Reprsentation graphique

Valeur des indices 1 2
Nom champs Matricule Nom Prnom Adresse Matricule Nom Prnom Adresse
Exemple A001 AW Mamadou Hamo3 A002 BA Ada Sicap


6.2 Affection de valeurs

Si deux enregistrements ont la mme structure (Enreg1 et Enreg2) pour effectuer laffection de
Enreg2 Enreg1, nous pouvons utiliser linstruction suivante :

Enreg1 Enreg2

Si ces derniers sont diffrents alors laffection se fera champs par champs.

Exemple :

Type Enreg1 = Structure
Nom : Chaine [10]
Prenom : Chaine [15]
Sexe : Caractere
FinStructure

Type Enreg2 = Structure
Nom : Chaine [10]
Prenom : Chaine [15]
FinStructure

Laffectation prcdente se fera de la manire suivante :

Enreg1.Nom Enreg2.Nom
Enreg1.Prenom Enreg2.Prenom




Adama MBODJI Les secrets de la programmation
49
Application

Voici prsent une opration de tri par slection sur le tableau prcdemment dfini. Les
enregistrements sont tris sur le matricule de ltudiant.

Procdure Permute (donne Rsultat Valeur1, Valeur2 : Etudiant)
Variable Tampon : Etudiant
Dbut
Tampon Valeur1
Valeur1 Valeur2
Valeur2 Tampon
FinProcdure

Lalgorithme de tri par slection est le suivant :

Procdure TriSelection (Donne Nbr : entier; Rsultat TabR : TAB)
Variable
i, j : entier
Dbut
Pour i=1 Nbr-1 Faire
Pour j = i+1 Nbr Faire
Si TabR [i].Matricule > TabR [j].Matricule Alors
Permute (TabR [i], TabR [j])
FinSi
FinPour
FinPour
FinProcdure


























Adama MBODJI Les secrets de la programmation
50



Projet n1

Nous dcidons de raliser un agenda numrique portant les informations suivantes :

(N ordre, Nom, Prnom, Adresse, Tlphone Domicile, Tlphone Cellulaire et
Tlphone Bureau)

Les oprations faire sont les suivantes :

affichage de toutes les personnes.
affichage des personnes commenant par les 3 premiers caractres que nous saisirons.
recherche dune personne.
ajout dune personne.
suppression dune personne.

Correction : Pour la correction, voir au niveau de MSAlgoPascal le projet du nom de Agenda.ALG


Projet n2

Il nous est soumis de grer une salle de classe de 30 tudiants. Chaque tudiant dispose des
informations suivantes : nom (15 caractres), prnom (20 car.), et les matires suivantes : Physique,
Math et Informatique variant entre 0 et 20.

1. Donnez la structure de la table tudiant.
2. Raliser les procdures suivantes :
a. saisir les noms, prnoms des tudiants.
b. saisir les notes des tudiants pour chaque matire.
c. afficher les noms et prnoms des tudiants.
d. rechercher et afficher les notes dun tudiant.
e. calculer la moyenne de tous les tudiants en les affichant.
f. trier la table en ordre croissant selon la moyenne obtenue.
g. supprimer au niveau de la table tous les tudiants nayant pas la moyenne suprieure
ou gale 10.

Correction : Pour la correction, voir au niveau de MSAlgoPascal le projet du nom de Classe.ALG












Adama MBODJI Les secrets de la programmation
51




u chapitre 3, nous avons dcouvert les structures de type tableau. Ces structures souffrent
dun gros handicap (inconvnient) : ils sont statiques. Leurs tailles ne peuvent tre
modifies. Le programmeur doit connatre ds lcriture du programme la taille exacte du
tableau (le nombre de cellules que doit contenir le tableau). Or dans certains cas cela est quasi
impossible.

Les oprations dajout sur une table ordonne et de suppression ncessitent la juxtaposition de n
cellules pour en librer ou en craser une. Par consquent ces oprations sont trs coteuses en
temps machines.

Pour contourner ces problmes, on utilise le concept de pointeur et dallocation dynamique.

7.1 Dfinition

Un pointeur est une variable dont le contenu est une adresse mmoire dune autre variable.

7.2 Dclaration dune variable de type pointeur

Variable VarPointeur : TypePoint

Exemple : Variable PEntier : Entier

PEntier ne peut contenir que des adresses mmoires des variables de type entier.

La fonction Adresse (Var) renvoie ladresse mmoire de la variable Var.
Pour accder au contenu de la variable pointeur, il suffit dcrire VarPointeur (variable
pointeur suivi de laccent circonflexe).

Application 1

1. Algo App1
2. Variable
3. PEntier : Entier
4. A : Entier
5. Dbut
6. A 10
7. PEntier Adresse (A)
8. AfficherLigne (A)
9. AfficherLigne (PEntier)
10. FinAlgo

Explication de lapplication 1

PEntier est une variable pointeur sur le type entier. La variable A est du type entier.
A


Adama MBODJI Les secrets de la programmation
52
A la ligne 6, nous affectons la valeur 10 la variable A.
A la ligne 7, nous affectons la variable pointeur PEntier ladresse en mmoire de la variable A
contenant la valeur 10.
Aux lignes 8 et 9, nous affichons la valeur de la variable A.

Application 2

1. Algo App2
2. Variable
3. PEntier : Entier
4. A : Entier
5. Dbut
6. A 10
7. AfficherLigne (A)
8. PEntier Adresse (A)
9. PEntier A + PEntier
10. AfficherLigne (A)
11. FinAlgo

Exercice : Analyser ce que produit lapplication 2


7.3 Allocation et Dsallocation

Le systme dexploitation met la disposition du programmeur une zone mmoire suffisante
appele TAS ou HEAP (en anglais). Cette zone nest accessible quavec les variables de type
pointeur. La variable pointe est une variable dynamique car elle sera cre pendant lexcution du
programme.

7.3.1 Allocation

Le programmeur peut faire une demande de rservation dun espace mmoire au niveau du HEAP
grce la procdure CREER (VariablePointeur). Si la demande est satisfaite, une zone
mmoire est rserve pour la variable pointeur sinon la variable pointeur aura comme valeur NIL
(Not In List). NIL signifie que le pointeur ne pointe sur aucune variable.

7.3.2 Dsallocation

Lopration de dsallocation est aussi appele libration. Pour librer (supprimer) une zone
mmoire occupe par une variable pointeur, nous utilisons la procdure LIBERER (variable
pointeur).

Grce ces oprations plusieurs structures de donnes prennent naissance :

Liste linaire (monodirectionnelle, bidirectionnelle)
Pile dynamique
File dynamique
Arbre dynamique




Adama MBODJI Les secrets de la programmation
53
7.4 Les listes

Les structures linaires sont un des modles de donnes les plus lmentaires utiliss dans les
programmes informatiques. Elles organisent les donnes sous forme de squence non ordonne
dlments accessibles de faon squentielle. Tout lment dune squence, sauf le dernier, possde
un successeur.

Les oprations dajout et de suppression sont des oprations de bases sur les listes. Selon la
mthode utilise, on distingue plusieurs sortes de listes : piles, files, etc.

7.4.1 Reprsentation graphique






Information Adresse suivante


7.4.2 Les listes linaires




Une liste linaire nest rien dautre quune succession de cellules relies entre elles par des
pointeurs.

7.4.3 Dclaration dune structure linaire

Type Pointeur = NomEnregistrement
NomEnregistrement = Structure
Champ : Type
Suivant : Pointeur
FinStructure

7.4.4 Oprations sur les listes linaires monodirectionnelles

Soit la liste ci-dessous.




TETE
TETE est ladresse de la premire cellule de la liste. Elle ne doit jamais tre dplace en cours
dapplication.

7.4.4.1 Affichage dinformations

Pour afficher la valeur contenue dune cellule, il suffit dcrire

AfficherLigne (VariablePointeur.Champ)
A B E C D
NIL
A D B C
NIL
xxxxxxx


Adama MBODJI Les secrets de la programmation
54
7.4.4.2 Passage dune adresse la suivante

Le passage dune cellule une autre se fait de la manire suivante :

(VariablePointeur) VariablePointeur.Suivant

7.4.4.3 Opration de parcours

Pour parcourir la liste, il suffit dinitialiser la variable P partir de la tte de liste (TETE) et de
passer au suivant jusqu NIL.

Ecrire la fonction LongListe (donne Liste : Pointeur) : entier qui calcule le
nombre dlments dune liste linaire.

Fonction LongListe (donne TETE : Pointeur) : entier
Variable
P : Pointeur
NbrElement : Entier
Dbut
P TETE
NbrElement 0
TantQue (P <> Nil) Faire
NbrElement NbrElement + 1
P P.Suivant
FinTantQue
LongListe NbrElement
FinFonction

Ecrire la fonction qui donne le nombre doccurrence de la valeur Val de la liste TETE.

Fonction NombreOcc (donne TETE : Pointeur; Val : entier) : Entier
Variable
P : Pointeur
Nbr : Entier
Dbut
Nbr 0
P TETE
TantQue (P <> Nil) Faire
Si (P.valeur = val) Alors
Nbr Nbr + 1
Finsi
P P.Suivant
FinTantQue
NombreOcc Nbr
FinFonction






Adama MBODJI Les secrets de la programmation
55
Ecrire la Fonction RapportHommeFemme (Donne TETE : Pointeur) : Rel qui
calcule le rapport des hommes par rapport aux femmes de la liste TETE.

Voici la structure de la liste

Type Pointeur = NomEnregistrement
NomEnregistrement = Structure
Sexe : Caractere % "F " = Fminin, "M " = Masculin %
Suivant : Pointeur
FinStructure

Fonction RapportHommeFemme (Donne TETE : Pointeur) : Rel
Variable
P : Pointeur
NbrH, NbrF : Entier
Dbut
NbrH 0 ; NbrF 0
P TETE
TantQue (P <> Nil) Faire
Si P.Sexe = "H" Alors
NbrH NbrH + 1
Sinon
NbrF NbrF + 1
FinSi
FinTantQue
Si NbrF = 0 Alors
AfficherLigne "la liste nest constitue que dhommes"
RapportHommeFemme (-1)
Sinon
RapportHommeFemme NbrH / NbrF
FinSi
FinFonction


7.4.4.4 Opration dajout

Supposons que lon ait une liste forme en ordre par les cellules nommes : {A, B et C}
Il nous est demand dajouter lintersection de A et B la cellule de valeur D.

Le schma suivant montre comment ajouter cette cellule dans une liste.







Processus : il faut dabord crer la cellule D. Se positionner sur la cellule A.
C : crer le lien entre D et B.
C : modifier le lien entre A et B par le nouveau lien A, D
A C B
D
C C


Adama MBODJI Les secrets de la programmation
56
Ecrire la Procdure Chanage (Donne A, B, D : Pointeur) qui dessine le
schma ci-dessus.

Procdure chanage (Donne Rsultat A, B, D : Pointeur)
Dbut
D.Suivant B
A.Suivant D
FinProcdure

Ecrire la Procdure AjoutCellule (Donne TETE, Pnt : Pointeur; Posit : entier; Rsultat TETE :
Pointeur) qui ajoute le pointeur Pnt la position Posit sur la liste.

Plusieurs cas peuvent tre possible. Nous utiliserons la fonction LongListe prcdemment vue.

Cas 1 : Posit = 1 ; alors Pnt devient la tte de liste.
Cas 2 : 1< Posit < LongListe (TETE) ; alors nous appliquons le schma prcdent.
Cas 3 : Posit > LongListe (TETE) ; opration impossible


Procdure AjoutCellule (Donne TETE, Pnt : Pointeur, Posit, N :
entier ; Rsultat TETE : Pointeur)
Variable
P, Precedent : Pointeur
Nbr : entier % le nombre de cellules parcourus %
Dbut
Si Posit = 1 Alors % ajout sur la tte de liste %
Pnt.Suivant TETE
TETE Pnt
Sinon
Si Posit > LongListe (TETE) Alors
AfficherLigne "Opration impossible"
Sinon
P TETE
Nbr 1
TantQue (Nbr < Posit) Faire
Nbr Nbr + 1
Precedent P
P P.Suivant
FinTantQue
Chanage (Precedent, P, Pnt)
FinSi
FinSi
FinProcdure

7.4.4.5 Opration de suppression

Le schma suivant illustre comment supprimer un lment dune liste. La suppression peut se faire
de deux manires :
la suppression physique : la cellule supprimer est physiquement supprime dans le
support.


Adama MBODJI Les secrets de la programmation
57
la suppression logique : la cellule supprimer est ignore. Mais elle existe au niveau du
HEAP.

Le schma suivant montre comment procder pour la suppression logique. Supprimons la cellule
portant la valeur 7.

TETE





La suppression logique est une opration trs facile, il suffit de faire un bond dune cellule une
autre.

Ecrire la Procdure SupprimeChainage (Donnes Rsultat A, B : Pointeur)
qui supprime logiquement la cellule B.

Processus :

C : Il faut dabord se positionner sur la cellule B tout en mmorisant la cellule A.
C : Crer le lien entre A et le suivant de B.

Procdure SupprimeChainage (Donne Rsultat A, B : Pointeur)
Dbut
A.Suivant B.Suivant
FinProcdure

Ecrire la Procdure SupprimeCellule (donnes TETE : Pointeur ; Val :
entier; Rsultat TETE : Pointeur) qui supprime la premire occurrence de la valeur
VAL de la liste TETE.

Deux cas peuvent tre possibles :

Cas 1. Val = TETE.Valeur ; Alors TETE devient son suivant :(TETE TETE.Suivant)
Cas 2. Val entre TETE et la fin de la liste, ainsi il faut alors chercher cette valeur puis utiliser la
procdure SupprimeChaine.

Procdure SupprimeCellule (Donne TETE : Pointeur ; Val : entier ;
Rsultat TETE : Pointeur)
Variable
P, Precedent : Pointeur
Trouver : Boolen; % Permet darrter le parcours si
llment est trouv %
Dbut
Si TETE.Valeur = Val Alors
TETE TETE.Suivant
Sinon
Trouver Faux
P TETE
20
10 3 12 7


Adama MBODJI Les secrets de la programmation
58
TantQue (Trouver = Faux) ET (P <>Nil) Faire
Precedent P
P P.Suivant
Si P <> Nil Alors
Si P.Valeur = Val Alors
SupprimeChainage (Precedent, P)
Trouver Vrai
FinSi
FinSi
FinTantQue
FinSi
FinProcdure


7.4.4.6 La cration dune liste

Nous utiliserons la Procdure CREER (VariablePointeur) pour crer dynamiquement
une cellule au niveau du HEAP.

Ecrire la Procdure CreerListe (TETE : Pointeur ; N : entier) qui cre une
liste de N cellules.

Procdure CreerListe (Donne TETE : Pointeur; N : entier; Rsultat
TETE : Pointeur)
Variable
P, Precedent : Pointeur
i : Entier
Dbut
Pour i=1 N Faire
Si i=1 Alors
CREER (TETE)
Si TETE <> Nil Alors
Saisir (TETE.Valeur)
TETE.Suivant NIL
Precedent TETE
Sinon
AfficherLigne "Mmoire insuffisante"
FinSi
Sinon
CREER (P)
Si P <> NIL Alors
Saisir (P.Valeur)
Chanage (Precedent, NIL, P)
Precedent P
Sinon
AfficherLigne "Mmoire insuffisante"
FinSi
FinSi
FinPour
FinProcdure



Adama MBODJI Les secrets de la programmation
59
7.4.4.7 La suppression physique

Nous utiliserons la Procdure LIBERER (VariablePointeur) pour supprimer, au niveau
du TAS, une variable pointeur.

Ecrire la Procdure SupprimOccurrence (Donne TETE : Pointeur ; VAL :
Entier ; Rsultat TETE : Pointeur) qui supprime physiquement toutes les
occurrences de valeur VAL au niveau de la liste TETE.

Procdure SupprimOccurrence (Donne TETE : Pointeur ; VAL :
Entier ; Rsultat TETE : Pointeur)
Variable
P, Precedant, Pnt : Pointeur
Dbut
% suppression de toutes les valeurs Val de tte. %
TantQue (TETE.Valeur = VAL) ET (TETE <> NIL) Faire
Precedant TETE
TETE TETE.Suivant
Liberer (Precedant)
FinTantQue
P TETE ; Precedant P
TantQue (P <> NIL) Faire
Si P.Valeur = Val Alors
TantQue (P.Valeur = Val) ET (P<>NIL) Faire
Pnt P
P P.Suivant
Liberer (Pnt)
FinTantQue
Precedant.Suivant P
Precedant P
Sinon
P P.Suivant
FinSi
FinTantQue
FinProcdure

7.4.4.8 Chane de caractres dynamiques

Ecrire la procdure qui cre une chane de caractres qui pourrait dpasser la taille 255.

Algo ChaineDynamique
Type PCaractere = Caract
Caract = Structure
C : Caractre
Suivant : PCaractere
FinStructure
Variable
TETE, P : PCaractere
N : Entier %Taille de la chane%


Adama MBODJI Les secrets de la programmation
60
Dbut
Afficher "Donnez la longueur de votre chane :"
Saisir (N)
TETE NIL
CreerListe (TETE, N)
% affichage de la chane de caractres %
P TETE
TantQue P <> NIL Faire
AfficherLigne (P.Valeur)
P P.Suivant
FinTantQue
FinAlgorithme

Note : Ce type de chane est trs utilis en informatique cause de la limitation du type String. Les
langages C et C++ ne disposent pas de type String ; ils utilisent les chanes dynamiques.

7.4.5 Liste circulaire

On appelle liste circulaire une liste dont le dernier lment pointe sur le premier. Grce une telle
dfinition, il nest plus utile de connatre ladresse de la tte de liste pour accder aux autres
lments.

7.4.5.1 Reprsentation physique





Ecrire la fonction NBRElement qui numre le nombre de cellules contenues dans la liste circulaire
CListe.

Mise en garde : Attention la boucle infinie.

Fonction NBRElement (Donne CListe : Pointeur) : entier
Variable
P : Pointeur
Nbr : Entier
Dbut
Si CListe = Nil Alors
Nbr 0
Sinon
P CListe
Nbr 1
P P.Suivant
TantQue P <> CListe Faire
Nbr Nbr + 1
P P.Suivant
FinTantQue
NbrElement Nbr
FinSi
FinFonction
A D B C


Adama MBODJI Les secrets de la programmation
61
7.4.6 Les Piles

Une pile est une liste linaire particulire dont lajout se fait toujours partir du dernier lment. La
lecture se fait partir du dernier lment de la liste (celle-ci est appele SOMMET). Les piles sont
trs utilises dans la conception des compilateurs, des valuations des expressions, dans les logiciels
de traitements de texte, etc.

On distingue deux reprsentations de piles :

Reprsentation statique
Reprsentation chane (dynamique)


7.4.6.1 Reprsentation dune pile statique

Constante TailleMax = Valeur
Type Pile = Tableau [1..TailleMax] de TypeDonne
Variable
P : Pile

Exemple

Constante DIM = 30
Type Pile = Tableau [1..DIM] de Entier
Variable
P : Pile
QUEUE, SOMMET : Entier











7.4.6.2 Reprsentation dune pile chane (dynamique)

Type Pointeur = Element
Element = Structure
Valeur : Entier
Suivant : Pointeur
FinStructure
Variable
P, TETE, SOMMET : Pile



TETE QUEUE





0
3
14
33
15
DIM
BAS
SOMMET
A D B C
NIL
Pile de livres


Adama MBODJI Les secrets de la programmation
62
7.4.6.3 Opration sur les piles

Opration dajout : Cette opration est aussi appele opration dempilement.

Ecrire la Procdure Empiler (Donne P : Pile ; Val, SOMMET : Entier ;
Rsultat P) qui ajoute la valeur VAL sur une pile.

Cas dune pile statique


Procdure Empiler (Donnes P : Pile; Val, SOMMET : Entier;
Rsultat P)
Dbut
Si SOMMET = SOMMET Alors
AfficherLigne "Pile Pleine"
Sinon
SOMMET SOMMET + 1
P [SOMMET] Val
FinSi
FinProcdure

Cas dune pile chane

Procdure Empiler (Donnes TETE : Pile; Val : Entier; Rsultat
TETE)
Variable Pnt : Pile
Dbut
CREER (Pnt)
Si Pnt <> NIL Alors
Pnt.Valeur Val
Pnt.Suivant NIL
Si TETE = NIL Alors
Tete Pnt
SOMMET Pnt
Sinon
SOMMET.Suivant Pnt
SOMMET Pnt
FinSi
FinSi
FinProcdure

Lecture au sommet

Dans une pile, nous ne pouvons lire que llment au sommet. Cest comme sur la pile de livres,
seul le livre au sommet peut tre retir.

Ecrire la Procdure ValSommet (P, SOMMET : Pile ; Rsultat Valeur) qui
donne la valeur du sommet de la pile.





Adama MBODJI Les secrets de la programmation
63
Cas dune pile statique

Fonction ValeurSommet (donne P, SOMMET : Pile ; Rsultat Valeur)
Dbut
Si Sommet = 0 Alors
AfficherLigne "Pile vide"
Sinon
Valeur P [SOMMET]
FinSi
FinProcdure

Cas dune pile chane

Fonction ValeurSommet (donne TETE, SOMMET : Pile ; Rsultat
Valeur)
Dbut
Si TETE = NIL Alors
AfficherLigne "Pile vide"
Sinon
Valeur SOMMET.Valeur
FinSi
FinProcdure

Opration de lecture

Cette opration est aussi appele dpilage. Elle donne la valeur du sommet qui devient par la suite
son prcdent.

Ecrire la Procdure Depiler ralise cette opration.

Cas dune pile statique

Fonction Depiler (donne P, SOMMET : Pile ; Rsultat Valeur)
Dbut
Si Sommet = 0 Alors
AfficherLigne "Pile vide"
Sinon
ValeurSommet [P, SOMMET, Valeur]
SOMME SOMMET -1
FinSi
FinProcdure

Cas dune pile chane

Procdure Depiler (donne TETE, SOMMET : Pile ; Rsultat Valeur)
Variable
P, AvantDernier : Pile
Dbut
P TETE
AvantDernier NIL


Adama MBODJI Les secrets de la programmation
64
TantQue (P.Suivant <>NIL) Faire
AvantDernier P
P P.Suivant
FinTantQue
ValeurSommet (TETE, SOMMET, Valeur)
Si SOMMET = TETE Alors
TETE AvantDernier
Sinon
SOMMET AvantDernier
FinSi
FinProcdure


7.4.7 Les Files

Une file est une liste linaire particulire dont lajout se fait partir de la QUEUE (dernire cellule
dune liste) et la suppression partir de la TETE.

7.4.7.1 Reprsentation chane




TETE QUEUE

7.4.7.2 Dclaration dune file chane

Type Pile = Cellule
Cellule = Structure
Valeur : Type
Suivant : Pile
FinStructure
Variable
TETE, QUEUE : Pile

7.4.7.3 Reprsentation statique

TETE QUEUE DIM
15 8 3 7 17 3

7.4.6.4 Dclaration dune file statique

Const Dim = 15
Type File = Tableau [1..Dim]
Variable
TETE, QUEUE : Entier





A
D
B
C
NIL


Adama MBODJI Les secrets de la programmation
65
7.4.7.5 Oprations classiques sur les files

CAS DUNE FILE DYNAMIQUE

Opration dajout

Ecrire la Procdure qui ajoute une valeur Val dans la file FListe.

Procdure Ajout (donne File ; Val : Type-valeur ; Rsultat File)
Variable P : Pointeur
Dbut
Crer (P)
Si P = NIL Alors
AfficherLigne "pas despace"
Sinon
P.Valeur Val
P.Suivant NIL
Si TETE = NIL Alors
QUEUE P
TETE P
Sinon
QUEUE.Suivant P
QUEUE P
FinSi
FinSi
FinProcdure


Opration de suppression

Ecrire la procdure qui supprime une valeur dans une file.

Procdure Supprime (Donne File ; Rsultat Val)
Variable
Precedant : Pointeur
Dbut
Si TETE = NIL Alors
AfficherLigne "impossible de supprimer"
Sinon
Val TETE.Valeur
Precedant TETE
TETETETE.Suivant
Liberer (Precedant)
Si TETE = NIL Alors
QUEUE NIL
FinSi
FinSi
FinProcdure




Adama MBODJI Les secrets de la programmation
66
CAS DUNE FILE STATIQUE

Opration dajout

Procdure Ajout (Donne File ; Val : Type-valeur ; Rsultat File)
Dbut
Si Queue = DIM Alors
QUEUE 1
Sinon
QUEUE QUEUE + 1
FinSi
Si QUEUE = TETE Alors
AfficherLigne "File Pleine"
Sinon
File [QUEUE] Val
Si TETE = 0 Alors
TETE 1
FinSi
FinSi
FinProcdure

Opration de suppression

Ecrire le sous-programme qui supprime une valeur dans une file circulaire.

Procdure Supprime (Donne File : File; Rsultat Val : Type-
Valeur)
Dbut
Si TETE = 0 Alors
Afficher "Erreur suppression"
Sinon
Val File [TETE]
Si TETE = QUEUE Alors
TETE 0
QUEUE 0
Sinon
Si TETE = DIM Alors
TETE 1
Sinon
TETE TETE + 1
FinSi
FinSi
FinSi
FinProcdure









Adama MBODJI Les secrets de la programmation
67




APPLICATIONS SUR LES PILES

Application 1 : Ralisation dun programme qui convertit un nombre dcimal en binaire.

Exemple : 128
10
donne 10000000
2
. Comment le raliser ?

Oprations Quotient Reste
128 : 2 = 64 0
64 : 2 = 32 0
32 : 2 = 16 0
16 : 2 = 8 0
8 : 2 = 4 0
4 : 2 = 2 0
2 : 2 = 1 0
1 : 2 = 0 1

Il faut procder une division successive du quotient par 2 jusqu trouver un quotient nul tout en
empilant les restes dans une pile. Lopration de dpilage de la pile donne lquivalence du nombre
en binaire.

Procdure DecimalBinaire (Donne Nombre : Entier)
Variable
P : Pile
Reste : Entier
Dbut
SOMMET 0 % initialise le sommet de la pile %
Repeter
Empile (P, Nombre Div 2)
Nombre Nombre Div 2
Jusqua (Nombre = 0)
TantQue SOMMET > 0 Faire
Depile (Pile, Reste)
Afficher (Reste)
FinTantQue
FinProcdure

Application 2 : Ralisation dune calculette

Evaluation dune expression compltement parenthse

Lanalyse dune expression compltement parenthse se fait de gauche droite. Chaque oprande
rencontr est mis dans une pile dite pile des oprandes , chaque oprateur tant stock dans une
pile des oprateurs .

Sens de lecture


Adama MBODJI Les secrets de la programmation
68
Chaque fois que lon rencontre une parenthse fermante, on value le rsultat de lopration entre
les deux oprandes du haut de la pile avec loprateur du haut de la pile, puis le rsultat est rang
(empil) la place des deux prcdents oprandes.

((a*b) + (c*d))


ici, on value a * b


((a*b) + (c*d))


ici, on value (c*d)
puis (a*b) + (c * d)

Ecrire la Fonction EvalParenthese (Donne ExPar : chane) : Rel qui
value lexpression compltement parenthse ExPar.

Algorithme :

Toutes les variables ainsi que les oprateurs sont empils au niveau de la pile oprateur. Les
oprandes sont empils au niveau de la pile oprande.

Lopration de calcul se dclenche la rencontre dune parenthse fermante et le rsultat est empil
nouveau au niveau de la pile oprande.

Correction : Pour la correction, voir au niveau de MSAlgoPascal le projet du nom de EvalExp.ALG

Application 3 : Passage dune expression compltement parenthse une
Notation Polonaise Postfixe (n.p.p)

Exemple :

(a + b) donne a b +
(a) donne a
((a + b) / c) donne a b + c /

Certaines calculettes utilisent des processeurs n.p.p. Ils utilisent une pile pour analyser les
instructions.

Processus de traduction : Pour faire le passage dune expression compltement parenthse une
Notation Polonaise Postfixe, nous utilisons une pile de caractres.

La chane analyser sera lue de gauche droite. Lalgorithme de passage est le suivant :
les parenthses ouvrantes sont ignores.
les oprandes rencontrs sont immdiatement crits vers la chane rsultat.
les oprateurs sont empils.
la rencontre dune parenthse fermante provoque lcriture sur la chane rsultat
llment dpil au niveau de la pile


*

b
a
d
c
a * b

*
+


Adama MBODJI Les secrets de la programmation
69
Exemple : Soit traduire lexpression ((A+(B*C))*((D+E)))

Les tapes de traduction sont les suivantes :

Chane dentre PILE Chane de sortie
((A+(B*C))*( (D+E))) vide vide
A+(B*C))*( (D+E))) vide vide
+(B*C))*( (D+E))) vide A
(B*C))*( (D+E))) + A
*C))*( (D+E))) + AB
C))*( (D+E))) +* AB
))*( (D+E))) +* ABC
)*( (D+E))) + ABC*
*( (D+E))) vide ABC*+
( (D+E))) * ABC*+
(D+E))) * ABC*+
+E))) * ABC*+D
E))) *+ ABC*+D
))) *+ ABC*+DE
)) * ABC*+DE+
) * ABC*+DE+
vide vide ABC*+DE+X

Exercice : Ecrire un sous-programme qui effectue la traduction dune expression parenthse une
notation polonaise postfixe.

Correction : Pour la correction, voir au niveau de MSAlgoPascal le projet du nom de ParPost.ALG

Application 4 : Evaluation dune Notation Polonaise Postfixe (n.p.p)

Lanalyse dune chane de symboles en n.p.p se fait en suivant les rgles que voici :

Au dbut la pile est initialise vide.
Le premier symbole de la chane est toujours un oprande. Il est empil.
Ensuite, nous analysons symbole par symbole, les lments de la chane.
Si le symbole rencontr est un oprateur dyadique ou binaire, il faut quil y ait au moins
deux lments dans la pile. Nous dpilons ces deux lments et leur appliquer la fonction
reprsente par loprateur dyadique et empiler le rsultat.
Pour un oprateur n-adique (avec n >0), on dpile n lment(s) de la pile, on applique la
fonction ces n lments et on empile le rsultat.
A la fin du processus, il doit rester un seul lment dans la pile. Cest le rsultat de
lexpression.

Exercice : Ecrire un sous-programme qui value une notation polonaise postfixe.

Correction : Pour la correction, voir au niveau de MSAlgoPascal le projet EvalPost.ALG






Adama MBODJI Les secrets de la programmation
70
APPLICATION SUR LES FILES

Application : Ralisation du clbre jeu vido SNAKE (serpent) de Nokia.

Introduction : Au niveau des tlphones portables Nokia, il existe un jeu intitul "SNAKE"
(serpent) qui se dplace au niveau de lcran tout en essayant de manger des biscuits pour grandir.

Le principe est trs simple :

Les touches directionnelles de votre clavier font changer le sens (direction) de
dplacement du serpent.
Le jeu sarrte si la tte du serpent heurte une partie de son corps ou les bords de lcran.

NB : On ne peut arrter le serpent ni le faire reculer.

Le serpent nest rien dautre quune file particulire dont chaque cellule est forme par les couples
de coordonnes (x, y) ou x reprsente labscisse et y lordonne. Pour stimuler le dplacement avec
les touches directionnelles de votre clavier on a :

Boutons du clavier Evnements

y y - 1

x x + 1

y y + 1

x x - 1

Voici la structure du serpent :

Constante TailleMax = 50
Type Cellule = Structure
x : Entier
y : Entier
FinStructure
Variable Serpent : Tableau [1..TailleMax] de Cellule
Biscuit : Cellule







TETE du serpent QUEUE du serpent TailleMax

Tous les dplacements sont effectus partir de la tte du serpent (Tte de file). A chaque
modification des coordonnes de la tte, nous mmorisons ces coordonnes antrieures qui
deviennent les nouvelles coordonnes de la deuxime cellule. Cette dernire aussi mmorise ces
coordonnes antrieures quelle passe la troisime cellule. Et le processus continue jusqu la


Adama MBODJI Les secrets de la programmation
71
queue. Nous affichons une case vide au niveau des coordonnes antrieures de la queue pour crer
lillusion du dplacement du serpent.
Au dbut nous disposons de N cellules (N < TailleMax). A chaque fois que lon mange un biscuit
(coordonne de la tte = coordonne du biscuit), nous dclanchons lalgorithme dajout dans une
file et N devient N+1 (le serpent grandi dune cellule).

A chaque dplacement, nous vrifions si serpent[i].x et serpent[i].y (avec 1 < i N) ne
concide pas avec la tte c'est--dire serpent[1].x et serpent[1].y mais aussi nous
garderons lil sur le bord de lcran.





Simulation du jeu SNAKE

Exercice : Ecrire le programme qui ralise cette simulation.

Correction : Pour la correction, voir au niveau de MSAlgoPascal le projet du nom de Serpent.ALG





















TETE
QUEUE


Adama MBODJI Les secrets de la programmation
72




n appelle arbre une collection dinformations formant une structure hirarchique.

Les informations arborescentes sont trs utilises dans la vie courante. Nous pouvons citer :

Larme : Dans le commissariat de larme de terre, on distingue les commissaires gnraux de
division et de brigade, les commissaires-colonels, les lieutenants-colonels, les commandants, les
capitaines, les lieutenants et les sous-lieutenants ; dans la marine, les commissaires gnraux de
premire classe, les commissaires gnraux de deuxime classe, les commissaires en chef de
premire classe, les commissaires en chef de deuxime classe, les commissaires principaux et les
commissaires de premire classe.

Linformatique avec lexplorateur Windows (exploration de la base de registre)



Larbre gnalogique (Exemple : famille FALL)














NB : Nous avons suppos que chaque pre de famille a au plus deux enfants. Cet exemple marche
trs bien en Rpublique Populaire de Chine.
O
Ahmed
Modou Mamadou
Habib Malick Bocar Badara
Ousmane
Adama
Moussa


Adama MBODJI Les secrets de la programmation
73
Les systmes de gestion de bases de donnes (SGBD) hirarchiques

Exemple de base de donnes dune entreprise industrielle















8.1 Dfinition de quelques concepts

Nud : Un arbre est une collection dlments (informations) appels nuds.

Racine : Un arbre a un nud particulier appel racine.

Au niveau de larm, la racine reprsente des commissaires gnraux.
Pour lexplorateur Windows, la racine reprsente le lecteur C:\ ou le poste de travail
Pour larbre gnalogique il reprsente Ahmed et sur la base de donnes de lentreprise industrielle
elle est le dpartement.

Soit larbre suivant :







Le nud A dsigne la racine.

Pres, fils et feuilles

Les nuds B et F sont des nuds intermdiaires.
Les nuds C, E et G sont appels feuilles (ils nont pas de descendant).
A est le pre de B et de F
F est le pre de E et de G
C est le fils de B

Degr dun nud : Le degr dun nud est le nombre de fils associ ce nud.

Arbre N-Aire : Un arbre sera dit N-Aire si chaque nud dispose au plus N fils.

Au niveau des algorithmes qui vont suivre, nous nutiliserons que les arbres binaires (2-aire).
DEPARTEMENT
USINE
OUVRIERS
OUTILS
ATELIERS
OUTILS
A
F B
G E C


Adama MBODJI Les secrets de la programmation
74
Proprits dun arbre parcours infix

Dans un arbre suivant un parcours infix, on a toujours les proprits suivantes :

Soient A le pre des nuds B et C (avec B le fils gauche de A et C son fils droit) et info un type
quelconque (information) port par ces derniers.

A.info >= B.info
A.info <= C.info
Tout nud ajout devient automatiquement une feuille.
Chaque information est reprsente de faon unique au niveau de larbre (jamais de
redondance).

8.2 Dclaration dun arbre binaire

Type Pointeur = Nud
Nud = Structure
Champ : Type-Quelconque
FilsGauche : Pointeur
FilsDroit : Pointeur
FinStructure

Champ peut tre nimporte quelle structure.

8.3 Oprations classiques sur les arbres binaires

8.3.1 Opration de parcours

Nous avons trois types de parcours : prfix, infix et postfix.

Seul le parcours prfix sera vu dans ce chapitre. Le lecteur intress aux autres parcours pourra se
rfrer aux livres cits la bibliographie.









Le parcours prfix de larbre donne : C B A E F G

Pour raliser ce parcours nous utilisons deux mthodes :

mthode itrative
mthode rcursive


A
F
B
G E
C


Adama MBODJI Les secrets de la programmation
75
Mthode itrative

Une pile dadresses sera utilise. Voici sa structure gnrale :

Type PileNoeud = Element
Element = Structure
P : Noeud %P pointe sur un nud de larbre%
Suivant : PileNoeud
FinStructure

Algorithme de parcours (Mthode itrative)

Ecrire la procdure ParcoursInfixe (Donne Racine : Noeud) qui affiche tous les
nuds de larbre.

Procdure ParcoursInfixe (Donne Racine : Pointeur)
Variable
P : Nud
Pile : PileNoeud
Dbut
Pile NIL
P Racine
TantQue (P<>NIL) ou (Pile <> NIL) Faire
TantQue (P<>NIL) Faire
Empiler (P)
P P.FilsGauche
FinTantQue
Depiler (P)
AfficherLigne (P.valeur)
P P.FilsDroit
FinTantQue
FinProcdure

Mthode rcursive

Note : il existe des langages de programmation qui nadmettant pas la mthode rcursive : cest le
cas du Fortran.

Procdure ParcoursInfixe (Donne Racine : Pointeur)
Dbut
Si Racine <> NIL Alors
ParcoursInfixe (Racine.FilsGauche)
AfficherLigne (Racine.Valeur)
ParcoursInfixe (Racine.FilsDroit)
FinSi
FinProcdure

Exercice : Ecrire le sous-programme qui recopie toutes les valeurs dun arbre dans un vecteur (nous
supposons que la taille du vecteur est suffisamment importante pour tenir toutes les informations).


Adama MBODJI Les secrets de la programmation
76
8.3.2 Recherche dune information dans un arbre

La recherche dune valeur VAL dans un arbre ( parcours infix) est trs simple.

Si la valeur cherche est plus grande que la valeur du nud alors nous poursuivrons la
recherche vers la droite.
Si elle est plus petite que la valeur du nud alors nous allons vers la gauche.
Au cas contraire, linformation est trouve.

Fonction Recherche (Donne RACINE :Nud;Val :Type-valeur): Boolen
Variable
P : Nud
Trouver : Boolen
Dbut
Trouver Faux
Si RACINE <> NIL Alors
P RACINE
TantQue (P <> Nil) ET (Trouver = Faux) Faire
Si P.Valeur > Val Alors
P P.FilsGauche
Sinon
Si P.Valeur < Val Alors
P P.FilsDroit Alors
Sinon
Trouver Vrai
FinSi
FinSi
FinTantQue
Sinon
AfficherLigne "Arbre vide"
FinSi
Recherche Trouver
FinProcdure


8.3.3 Opration dajout

En suivant les proprits sur les arbres suivant un parcours infix, nous pouvons aisment ajouter un
nud.

Ecrire le sous-programme qui ajoute la valeur VAL larbre de pre RACINE.

Note : il faut dabord vrifier si linformation ajouter nexiste pas dans larbre.


Procdure Ajout (Donne RACINE : Nud ; Val : type-valeur ;
rsultat RACINE : Nud)
Variable
Pere, Nd, P : Nud
Dbut


Adama MBODJI Les secrets de la programmation
77
If Recherche (RACINE, Val, RACINE) = Faux Alors
CREER (P)
Si P <> NIL Alors
P.valeur Val
P.FilsGauche NIL
P.FilsDroit NIL
Si RACINE <> NIL Alors
Pere RACINE
Nd RACINE
TantQue Nd <> Nil Faire
Pere Nd
Si Nd.Valeur > Val Alors
Nd Nd.FilsGauche
Sinon
Nd Nd.FilsDroit
FinSi
FinTantQue
Si Pere.Valeur > Val Alors
Pere.FilsGauche P
Sinon
Pere.FilsDroit P
FinSi
Sinon
RACINE P
FinSi
Sinon
AfficherLigne "Pas despace mmoire"
FinSi
Sinon
AfficherLigne "Cette valeur existe dj dans larbre"
FinSi
FinProcdure

NB : Racine sera gale P si larbre est vide (Racine = NIL) au dpart.

8.3.4 Dissolution de deux arbres

La dissolution de deux arbres du mme type revient ajouter tous les nuds de lun sur lautre.

Ecrire le sous-programme DissoudreArbre (Donne Racine1, Racine2 : Nud ;
Rsultat Racine1 : Nud) qui dissout les arbres de racines Racine1 et Racine2.
Le sous-programme Ajout dune valeur un arbre sera utilis pour la ralisation de lalgorithme.

Procdure DissoudreArbre (Donne Racine1, Racine2 : Nud ;
Rsultat Racine1 : Nud)
Variable
P : Nud
Pile : PileNoeud
Dbut


Adama MBODJI Les secrets de la programmation
78
Pile NIL
P Racine2
TantQue (P<>NIL) ou (Pile <> NIL) Faire
TantQue (P<>NIL) Faire
Empiler (P)
P P.FilsGauche
FinTantQue
Depiler (P)
Ajout (RACINE1, P.Valeur, RACINE1)
P P.FilsDroit
FinTantQue
FinProcdure


8.3.5 Cration dun arbre

Soit VECT : Tableau [1..N] de Entier un vecteur valeurs entires de taille N, crire le
sous-programme suivant : Procdure CreerArbre(Donne VECT ; Rsultat
Racine)

VECT = {15, -3, 20, 10, 70, 40}










Le sous-programme Ajout dune valeur un arbre sera utilis pour garder larbre tri.

Procdure CreerArbre (Donne VECT ; Rsultat Racine)
Variable i : Entier
Dbut
Pour i=1 N Faire
Ajout (Racine, Vect[i], Racine)
FinPour
FinProcdure

8.3.6 Pre dun nud

Tout nud lexception de la racine a un pre dans un arbre. On se propose de trouver le pre dun
nud donn.

Ecrire la fonction qui renvoie le pointeur au pre dun nud de valeur VAL.




15
20 -3
70
40
10


Adama MBODJI Les secrets de la programmation
79
Fonction PereNoeud(donne Racine : Nud ; VAL :Type-Valeur) : Nud
Variable
P, Pere : Nud
Trouver : Boolen
Dbut
Si (Racine = NIL) ou (Racine.Valeur = VAL) Alors
PereNoeud NIL
Sinon
Trouver FAUX
TantQue (P<>NIL) et (Trouver = Faux) Faire
P Racine
Si P.Valeur > VAL Alors
P P.FilsGauche
Sinon
Si P.Valeur < VAL Alors
P P.FilsDroit
Sinon
Trouver Vrai
FinSi
FinSi
FinTantQue
Si Trouver = Faux Alors
Afficher "Elment inexistant"
PereNoeud NIL
Sinon
PereNoeud Pere
FinSi
FinSi
FinFonction


8.3.7 Opration de suppression

La suppression dun nud entrane la dconnexion de larbre. Il faut penser alors le reconnecter.

Cette suppression suppose trois cas :

une feuille
la racine
un nud intermdiaire

Schma




Adama MBODJI Les secrets de la programmation
80
8.3.7.1 Etude du premier cas : suppression dune feuille

Soit supprimer la feuille portant la valeur 7, larbre devient ainsi :



Il faut mmoriser le pre de la feuille. Ensuite mettre Pere.FilsGauche ou Pere.FilsDroit NIL
selon la nature du fils. Puis supprimer dynamiquement la feuille.

Soit la Fonction EstFeuille (donne Racine : Nud) : Boolen qui renvoie la
valeur VRAI si Racine est une feuille, faux dans le cas contraire.

Fonction EstFeuille (donne Racine : Nud) : Boolen
Dbut
Si Racine = NIL Alors
EstFeuille FAUX
Sinon
Si (Racine.FilsGauche = NIL) et
(Racine.FilsDroit = NIL) Alors
EstFeuille VRAI
Sinon
EstFeuille FAUX
FinSi
FinSi
FinFonction

Ecrire la Procdure SupprimeFeuille (donne P : Nud ; Val : Type-
Valeur ; Rsultat Racine : Noeud) qui supprime la feuille portant la valeur VAL
dans larbre Racine.


Procdure SupprimeFeuille (donne P : Nud; VAL:Type-Valeur ;
Rsultat Racine : Nud)
Variable
Pere : Nud
Dbut
Si P = Racine Alors
Racine NIL
Sinon
Si (EstFeuille (P) = Vrai) ET (P.Valeur = Val) Alors
Pere PereNoeud (P, Val)
Si Pere.FilsGauche = P Alors
Pere.FilsGauche NIL


Adama MBODJI Les secrets de la programmation
81
Sinon
Pere.FilsDroit NIL
FinSi
FinSi
Liberer (P)
FinSi
FinProcdure


8.3.7.2 Etude du deuxime cas : suppression de la racine.

Soit supprimer la racine dun arbre, trois cas de figure peuvent se prsenter :

Cas 1 : larbre a un seul nud (la racine).
Cas 2 : la racine a un fils (gauche ou droit).
Cas 3 : la racine a deux fils.

Le premier cas ne sera pas trait car si larbre est rduit a un seul nud (Racine), il sera supprim
par le sous-programme prcdant SupprimeFeuille car il sera considr comme tant une feuille.

Pour le second cas, la racine a un fils.

Si la racine a un seul fils, alors ce dernier devient Racine en supprimant son pre.

Linstruction de suppression est la suivante selon le cas de figure :
Racine Racine.FilsGauche ou Racine Racine.FilsDroit

Pour le dernier cas, la racine a deux fils.

En supprimant la Racine, larbre se dconnecte en deux. Nous relions alors le fils gauche de la
racine au dernier descendant gauche du fils droit de la racine. Et la racine devient par la suite son
fils droit.

Soit le sous-programme RelierDescendantGauche (Noeud1, Noeud2 : Nud ; Rsultat Noeud2 :
Nud) qui relie le nud Noeud1 au dernier descendant gauche de Noeud2.


Procdure RelierDescendantGauche (donne Noeud1, Noeud2 : Nud ;
Rsultat Noeud2 : Nud)
Dbut
TantQue Noeud2.FilsGauche <> NIL Faire
Noeud2 Noeud2.FilsGauche
FinTantQue
Noeud2.FilsGauche Noeud1
FinProcdure


A laide de ces trois cas, crire la procdure SupprimerRacine (donne Racine :
Racine ; VAL Type-Valeur Rsultat Racine : Nud) qui supprime la Racine
dun arbre ayant la valeur VAL.


Adama MBODJI Les secrets de la programmation
82
Procdure SupprimerRacine (donne Racine : Racine ; VAL Type-
Valeur Rsultat Racine : Nud)
Variable
SvgNoeud : Nud
Dbut
Si Racine.Val = VALEUR Alors
Si EstFeuille (Racine) = Faux Alors
SvgNoeud Racine
Si Racine.FilsGauche = NIL Alors
Racine Racine.FilsDroit
Sinon
Si Racine.FilsDroit = NIL Alors
Racine Racine.FilsGauche
Sinon
RelierDescendantGauche (Racine.FilsGauche,
Racine.FilsDroit)
FinSi
FinSi
Liberer (SvgNoeud)
FinSi
FinSi
FinProcdure


8.3.7.3 Etude du troisime cas : Suppression dun nud intermdiaire.













Pour supprimer le nud intermdiaire de valeur 8, il faut :

rattacher le fils gauche du nud supprimer au fils gauche de son pre.
tablir la liaison entre le fils droit du nud supprimer au dernier descendant gauche du
fils droit du pre du nud supprimer.

Pour supprimer le nud intermdiaire de valeur 38, il faut :

rattacher le fils droit du nud supprimer au fils droit de son pre.
tablir la liaison entre le fils gauche du nud au dernier descendant gauche du fils droit
du nud supprimer.

Le nud est le fils gauche de son pre
Le nud est le fils droit de son pre


Adama MBODJI Les secrets de la programmation
83
Les deux schmas deviennent ainsi aprs la suppression.

















Procdure SupprimeIntermediaire (donne Racine : Nud ; Val :
Type-valeur ; Rsultat Racine : Noeud)
Variable
Pere : Nud
Dbut
Si Racine.Valeur = VAL Alors
Pere PereNoeud (Racine, Val)
Si Pere.FilsDroit = Racine Alors %sil sagit du fils droit %
Pere.FilsDroit Racine.FilsDroit
RelierDescendantGauche (Racine.FilsGauche,
Racine.FilsDroit)
Sinon % si cest le cas du fils gauche %
Pere.FilsGauche Racine.FilsGauche
RelierDescendantGauche (Racine.FilsDroit,
Pere.FilsDroit)
FinSi
Liberer (Racine)
FinSi
FinProcdure

8.3.7.4 Algorithme gnral pour la suppression dun noeud

Les algorithmes prcdemment vus seront utiliss pour supprimer un nud de valeur VAL dans un
arbre.

Ecrire le sous-programme qui ralise cette opration.

Procdure SupprimeNoeud (donne Racine : Nud ; Val : Type-
Valeur ; Rsultat Racine : Nud)
Variable
P : Nud
Continuer : Boolen
Etat de larbre aprs la suppression du nud de valeur 8
Etat de larbre aprs la suppression du nud de valeur 38


Adama MBODJI Les secrets de la programmation
84
Dbut
Si Racine <> NIL Alors
P Racine
Continuer Vrai
TantQue (Continuer = Vrai) ET (P <> NIL) Alors
Si P.Valeur = VAL Alors
Continuer Faux
Si EstFeuille (P) = Vrai Alors
SupprimeFeuille (P, VAL)
Sinon
Si P = Racine Alors
SupprimerRacine (P, VAL)
Sinon
SupprimeIntermediaire (P, Val)
FinSi
FinSi
Sinon % nous continuons chercher le nud %
Si P.Valeur > VAL Alors
P P.FilsGauche
Sinon
P P.FilsDroit % P.Valeur < VAL%
FinSi
FinSi
FinTantQue
Sinon
AfficherLigne "Arbre vide"
FinSi
FinProcdure
























Adama MBODJI Les secrets de la programmation
85



Exercice 1 : Soit Racine la racine dun arbre dentiers donn. Ecrire le sous-programme qui
supprime tous les nuds pairs de larbre.

Exercice 2 : Soient deux arbres donns A et B. Ecrire lalgorithme qui vrifie si larbre A est le
miroir de larbre B.

Voici deux arbres miroirs.


Exercice 3 : Soit R un arbre et VAL une valeur suppose existante au niveau de larbre. Ecrire le
sous-programme qui donne le chemin daccs allant de la racine au nud portant la valeur VAL.
Note : le chemin sera port sur une liste linaire monodirectionnelle.

Exemple : VAL = 35 ; liste = {10, 13, 26,35}



Exercice 4 : Evaluation dune expression

Dans le chapitre prcdant, nous avons vu comment passer dune expression compltement
parenthse une notation polonaise postfixe.

Exemple : ((A+B)-C) donne AB+C-

Nous nous proposons de porter la notation polonaise postfixe dans un arbre.


Travail demand : Ecrire les sous-programmes suivants :

1) Procdure ArbrePostFix (donne ExpressionPostFixe : Chane ;
Rsultat Racine : Nud) qui cre larbre de notation polonaise postfixe.

2) Fonction EvalArbre (donne Racine : chane) : Rel qui value
lexpression porte par larbre.



Adama MBODJI Les secrets de la programmation
86




9.1 Le concept de fichier

n fichier est une squence de donnes binaires stocke sous forme doctets sur un support
de stockage permanent tel quun disque dur, une disquette ou un autre priphrique du
mme genre.

Au niveau des systmes dexploitation comme MS-DOS, Windows, Unix, Linux, les fichiers sont
stocks de faon hirarchise. La connaissance du nom ne suffit pas pour retrouver un fichier, il faut
aussi son chemin daccs. Les fichiers sont trs diffrents. Leurs extensions nous permettent de
savoir la nature du contenu du fichier. Les fichiers .EXE et .COM sont des excutables. Les fichiers
.TXT, .INI, .BAT contiennent du texte. Les fichiers .BMP, .JPG, .GIF, .TIF, .WMF sont des
images, etc.

9.2 Accs aux fichiers

Voici les rgles quil faut pour exploiter un fichier.

9.2.1 Association

Avant de travailler (lire ou crire) sur un fichier, il faut dabord lassigner par linstruction :
Associer (VariableFichier, Nomfichier).

9.2.2 Ouverture dun fichier

Avant tout traitement sur un fichier, il faut louvrir suivant un mode donn :

OuvrirLecture (VariableFichier) pour y accder en lecture,
OuvrirEcriture (VariableFichier) pour laccs en criture
OuvrirLectEcrit (VariableFichier) pour laccs en lecture-criture

9.2.3 Fermeture dun fichier

A la fin de tout traitement sur un fichier, il faut le fermer par linstruction
Fermer (VariableFichier).

9.2.4 Ecriture dun fichier

Pour crire dans un fichier, il suffit de dire Ecrire (NomFichier, Information)
Sil sagit dun fichier Texte, il faut utiliser linstruction :
EcrireLigne (NomFichier, Information).
Information est une chane de caractres.



U


Adama MBODJI Les secrets de la programmation
87
9.2.5 Lecture dun fichier

Pour lire dans un fichier, linstruction suivante est utilise :
Lire (VariableFichier, Information).

Pour les fichiers textes nous utilisons linstruction suivante :
LireLigne (VariableFichier, Information).

NomFichier est ladresse suivie du nom du fichier associ la variable fichier lors de
lassignation.

VariableLigne est une chane de caractres.

La fonction FDF (VariableFichier) renvoie la valeur vraie si nous sommes la fin dun
fichier.

9.2.6 Dclaration dune variable fichier

Un fichier de donnes peut contenir nimporte quel type de donnes.

VariableFichier : FICHIER DE Type-de-donnes

Un fichier TEXTE se dfinit ainsi : VariableFichier : FICHIER DE TEXTE

9.3 Cration de fichier typ

Soit crer un fichier pour la conception dun rpertoire tlphonique.

Algorithme RepertoireTelephonique
Type Personne = Structure
Nom : Chane [10]
Prenom : Chane [15]
Telephone : Chane [12]
FinStructure
Variable
FichRepertoire : FICHIER DE PERSONNE
Repertoire : Personne
Choix : Caractere
Dbut
Associer (FichRepertoire, "C:\RepTel.dat")
OuvrirEcriture (FichRepertoire)
Repeter
Afficher "Nom = " ; Saisir (Repertoire.Nom)
Afficher "Prnom = " ; Saisir (Repertoire.Prnom)
Afficher "Tlphone = " ; Saisir (Repertoire.Telephone)
Ecrire (FichRepertoire, Repertoire)
Afficher "Voulez-vous continuer ? (O/N)"
Saisir (Choix)
Jusqua (Choix = "N")
Fermer (FichRepertoire)
FinAlgorithme



Adama MBODJI Les secrets de la programmation
88
9.4 Cration de fichier texte

Algorithme RepertoireTelephonique
Variable
FichTexte : FICHIER DE TEXTE
Ligne : Chane
Dbut
Associer (FichTexte, "C:\Texte.txt ")
OuvrirEcriture (FichTexte)
Repeter
Saisir (Ligne)
Ecrire (FichTexte, Ligne)
Jusqua (Ligne = "")
Fermer (FichTexte)
FinAlgorithme

9.5 Lecture dun fichier typ

Pour lire un fichier typ, il faut obligatoirement connatre et dfinir sa structure. La procdure
lecture ncessite la fonction FDF (VariableFichier) pour savoir si nous avons atteint la fin
du fichier.

Soit lire le fichier du rpertoire tlphonique.

Algorithme RepertoireTelephonique
Type PERSONNE = Structure
Nom : Chane [10]
Prenom : Chane [15]
Telephone : Chane [12]
FinStructure
Variable
FichRepertoire : FICHIER DE PERSONNE
Repertoire : Personne
Dbut
Associer (FichRepertoire, "C:\RepTel.dat")
OuvrirLecture (FichRepertoire)
TantQue FDF (FichRepertoire) = Faux Faire
Lire (FichRepertoire, Repertoire)
Afficher (Repertoire.Nom)
Afficher (Repertoire.Prnom)
Afficher (Repertoire.Telephone)
FinTantQue
Fermer (FichRepertoire)
FinAlgorithme

9.6 Lecture dun fichier texte

Algorithme RepertoireTelephonique
Variable
FichTexte : FICHIER DE TEXTE
Ligne : Chane


Adama MBODJI Les secrets de la programmation
89
Dbut
Associer (FichTexte, "C:\Texte.txt")
OuvrirLecture (FichTexte)
TantQue FDF (FichTexte) = Faux Faire
Lire (FichTexte, Ligne)
AfficherLigne (Ligne)
FinTantQue
Fermer (FichTexte)
FinAlgorithme

9.7 Les types dorganisations

Il existe plusieurs types dorganisations de fichiers : lorganisation squentielle indexe,
lorganisation relative, lorganisation alatoire, etc.

Seuls lorganisation squentielle et lorganisation squentielle indexe vont nous intresser dans ce
chapitre.

9.7.1 Lorganisation squentielle

9.7.1.1 Principe

Il consiste ranger les enregistrements logiques les uns la suite des autres dans lordre o ils se
prsentent.

9.7.1.2 Opration sur les fichiers squentiels

Ecriture : Les enregistrements logiques sont crits comme ils arrivent.

Consultation : Les enregistrements logiques sont lus les uns la suite des autres comme ils ont t
crits. Pour accder la n
ime
enregistrement, il faut ncessairement lire n-1 enregistrements.

Mise jour : la mise jour suppose trois cas

- Ajout : lenregistrement logique est insr entre les deux o il doit se trouver
- Suppression : lenregistrement logique est effac ou banalis.
- Modification : lenregistrement est modifi puis remis sa place.

Ces fonctions de mise jour dpendent du support.

Par exemple : pour mettre jour un fichier sur bande magntique, il est obligatoire de le lire sur une
bande et de le recopier sur une autre.

9.7.2 Lorganisation squentielle indexe

9.7.2.1 Principe

Cest un type dorganisation qui permet laccs squentiel et laccs direct lenregistrement
logique du fichier. Chaque enregistrement logique est repr par un champ cl dont la
transformation en adresse est la charge du systme.



Adama MBODJI Les secrets de la programmation
90
Au moment de la cration, le systme cre des tables dindex qui permettent daccder rapidement
aux enregistrements logiques du fichier.

9.7.2.2 Cration du fichier

Le fichier est cre en squentiel dans une zone primaire. Les enregistrements logiques sont crits
par ordre croissant de la cl. Deux enregistrements logiques ne peuvent avoir une mme cl.

Au fur et mesure de sa cration, le systme cre des tables daccs.

9.7.2.3 Consultation

Laccs squentiel : il se fait de la mme manire que les fichiers squentiels.

Laccs direct : Pour accder un enregistrement, il faut fournir sa cl.

9.7.2.4 Mise jour

Les oprations de mise jour sont trs simples.

Pour ajouter un enregistrement, on a la possibilit de nous positionner, grce la table dindex, la
fin du fichier puis crer un champ dinformation ce niveau.

Pour la modification, lenregistrement logique est lu puis modifi en mmoire centrale, ensuite
recopi sa place initiale.

La suppression se fait par un pointeur dinvalidation. Lenregistrement logique est marqu et il nest
plus considr dans les traitements ultrieurs, mais il occupe toujours sa place au niveau du support.

9.8 Oprations classiques dans un fichier

9.8.1 Opration de recherche dans un fichier squentiel

Ecrire le sous-programme qui cherche la position de lenregistrement logique PEnreg dans un
fichier squentiel Fich.

Soit Enreg lenregistrement logique du fichier Fich.

Fonction RecherchePosit (donne Fich, PEnreg) : Entier
Variable
Trouver : Boolen
Pos : Entier
Dbut
OuvrirLecture (Fich)
Trouver Faux
Pos 0
TantQue (FDF (Fich) = Faux) ET (Trouver = Faux) Faire
Lire (Fich, Enreg)
Pos Pos + 1
Si Enreg = PEnreg Alors
Trouver Vrai


Adama MBODJI Les secrets de la programmation
91
FinSi
FinTantQue
Fermer (Fich)
Si Trouver = Faux Alors
AfficherLigne "Enregistrement introuvable"
FinSi
RecherchePosit Pos
Fermer (Fich)
FinFonction


9.8.2 Opration dajout dans un fichier squentiel

Nous supposerons que nous disposons dune bande magntique comme support de travail.

Ecrire le sous-programme qui ajoute tous les enregistrements de valeurs PEnreg du fichier Fich1
dans le fichier Fich2.

Soit Enreg lenregistrement logique du fichier Fich.

Procdure EnregSous (donne Fich1, Fich2, PEnreg; Rsultat
NouveauFich)
Dbut
OuvrirLecture (Fich1)
OuvrirLecture (Fich2)
OuvrirEcriture (NouveauFich)
TantQue (Pas (FDF (Fich2) Faire
Lire (Fich2, Enreg)
Ecrire (NouveauFich, Enreg)
FinTantQue
TantQue (Pas (FDF (Fich1)) Faire
Lire (Fich, Enreg)
Si Enreg = PEnreg Alors
Ecrire (NouveauFich, PEnreg)
FinSi
FinTantQue
Fermer (NouveauFich)
Fermer (Fich1)
Fermer (Fich2)
FinProcdure


9.8.3 Opration de suppression dans un fichier squentiel

Ecrire le sous-programme qui supprime tous les enregistrements PEnreg du fichier Fich.

Procdure Supprime (donne Fich, PEnreg ; Rsultat NouveauFich)
Dbut
OuvrirEcriture (NouveauFich)
OuvrirLecture (Fich)
TantQue FDF (Fich) = Faux Faire


Adama MBODJI Les secrets de la programmation
92
Lire (Fich, Enreg)
Si Enreg <> PEnreg Alors
Ecrire (NouveauFich, Enreg)
FinSi
FinTantQue
Fermer (NouveauFich)
Fermer (Fich)
FinProcdure


9.8.4 Opration de modification dans un fichier squentiel

Soit un fichier squentiel Fich. On se propose de supprimer toutes les occurrences de valeur PEnreg
par BEnreg.

Ecrire le sous-programme qui ralise ce travail.

Procdure Modif (donne Fich, PEnreg, BEnreg ; Rsultat
NouveauFich)
Dbut
OuvrirLecture (Fich)
OuvrirEcriture (NouveauFich)
TantQue FDF (Fich) = Faux Faire
Lire (Fich, Enreg)
Si Enreg <> PEnreg Alors
Ecrire (NouveauFich, Enreg)
Sinon
Ecrire (NouveauFich, BEnreg)
FinSi
FinTantQue
FinProcdure


9.9 Mise jour dun fichier

La mise jour dun fichier consiste faire les oprations suivantes :

ajout
suppression
modification

Les plus souvent un fichier externe est utilis pour effectuer plusieurs oprations dans un fichier. Ce
fichier se nomme fichier mouvement. Il regroupe toutes les oprations dajout, de suppression et de
modification du fichier source appel permanant.

Grce des algorithmes classiques sur les fichiers mouvements et le fichier permanant, nous
obtenons un nouveau fichier permanant.

Lexemple suivant montre un cas de mise jour dans un fichier squentiel.




Adama MBODJI Les secrets de la programmation
93
Soit StatutPersonnel le fichier du personnel dune entreprise donne avec Enreg lenregistrement
logique de ce fichier.

Type TEnreg = Structure
Matricule : Chane [3]
Nom : Chane [10]
Prnom : Chane [15]
Adresse : Chane [35]
SM : Chane [1]
DateNaissance : Chane [10]
FinStructure

Matricule Nom Prnom Adresse SM DateNaissance

SM (Situation matrimoniale) peut prendre les valeurs suivantes :

- M pour les maris
- C pour les clibataires
- D pour les divorcs

Soit FichMouvement le fichier mouvement et MEnreg son enregistrement ayant la structure
suivante :

Type TMvt = Structure
Matricule : Chane [3]
SM : Chane [1]
FinStructure

Matricule SM

Les fichiers sont tris sur le numro de matricule de lagent.

Travail demand : Ecrire lalgorithme qui met jour la situation matrimoniale des agents de cette
entreprise.

NB : Le nouveau fichier aura comme nom NouveauStatutPersonnel et son enregistrement logique
NEnreg

Procdure Mise_A_Jour (donne StatutPersonnel, FichMouvement ;
Rsultat NouveauStatutPersonnel)
Variable
FinPersonnel, FinMouvement : Boolen
Dbut
OuvrirLecture (StatutPersonnel)
OuvrirLecture (FichMouvement)
OuvrirEcriture (NouveauStatutPersonnel)
FinPersonnel Faux
FinMouvement Faux
Lire (StatutPersonnel, Enreg)
Si FDF (StatutPersonnel) = Vrai Alors
FinPersonnel Vrai
FinSi


Adama MBODJI Les secrets de la programmation
94
Lire (FichMouvement, MEnreg)
Si FDF (FichMouvement)=Vrai Alors
FinMouvement Vrai
FinSi
TantQue (FinPersonnel=Faux) ET (FinMouvement= Faux) Faire
Si Enreg.Matricule < MEnreg.Matricule Alors
Ecrire (NouveauStatutPersonnel, Enreg)
Lire (FichMouvement, MEnreg)
Si FDF (FichMouvement = Vrai) Alors
FinMouvement Vrai
FinSi
FinSi
Si Enreg.Matricule = MEnreg.Matricule Alors
NEnreg Enreg
NEnreg.SM = MEnreg.SM
Ecrire (NouveauStatutPersonnel, Enreg)
Lire (StatutPersonnel, Enreg)
Si FDF (StatutPersonnel) = Vrai Alors
FinPersonnel Vrai
FinSi
Lire (FichMouvement, MEnreg)
Si FDF (FichMouvement)=Vrai Alors
FinMouvement Vrai
FinSi
FinSi
FinTantQue
TantQue (FDF (StatutPersonnel) = Faux) Faire
Ecrire (NouveauStatutPersonnel, Enreg)
Lire (StatutPersonnel, Enreg)
Si FDF (StatutPersonnel) = Vrai Alors
FinPersonnel Vrai
FinSi
FinTantQue
Fermer (FichMouvement)
Fermer (NouveauStatutPersonnel)
Fermer (StatutPersonnel)
FinProcdure

Principe utilis :

Le fichier principal ainsi que le fichier mouvement sont tous deux tris sur un mme argument. Au
niveau du prcdent algorithme, il sagit du matricule de lagent.

Deux cas sont observs :

Si Enreg.Matricule < MEnreg.Matricule (cela signifie que lagent dont le matricule est gal
Enreg.Matricule na subit aucune modification) alors nous sauvegardons directement
lenregistrement au niveau du nouveau fichier.

Si Enreg.Matricule = MEnreg.Matricule (cela signifie que lagent dont le matricule est gal
Enreg.Matricule a effectu une modification au niveau de son statut) alors les informations portes
par le fichier mouvement seront prises en compte.


Adama MBODJI Les secrets de la programmation
95




Exercice 1 : Soit FEtudiant un fichier dune cole de la place dont chaque enregistrement Enreg a
la structure suivante :

Type Etudiant = Structure
Numro : Chane [3]
Nom : Chane [15]
Prnom : Chane [20]
Adresse : Chane [35]
Sexe : Chane [1]
FinStructure

Soient ArbreG et ArbreF deux arbres binaires dont chaque nud a la structure suivante :

Type Pointeur = Noeud
Nud = Structure
Numro : Chane [3]
Nom : Chane [15]
Prnom : Chane [20]
Adresse : Chane [35]
Sexe : Chane [1]
FilsGauche : Pointeur
FilsDroit : Pointeur
FinStructure

Travail faire : Eclater le fichier en deux arbres : ArbreG ne contiendra que les garons et ArbreF
les filles.

Exercice 2 : Soit FichTexte un fichier texte donn.

1) Ecrire lalgorithme qui affiche et mmorise tous les mots de FichTexte dans un arbre binaire
ArbreTexte.

NB : Les espaces ainsi que les signes de ponctuation seront ignors, les doublons ne seront pas
mmoriss.

2) Ecrire lalgorithme qui mmorise tous les mots de FichTexte dans une liste linaire ListTexte.

3) Donnez la structure de larbre et de la liste linaire.











Adama MBODJI Les secrets de la programmation
96



Ralisation de la traduction de la boucle
Repeter-Jusqua en do-while du langage C.

En algorithme, la boucle Repeter-Jusqua se fait de la manire suivante :

Repeter
(Instructions)
Jusqua (Condition)

(Condition) est forme par un ensemble doprateurs, doprandes et de comparateurs.

Par exemple : Jusqua (a + b = c) ; Jusqua (i > 100)

Exemple : lalgorithme suivant affiche 100 fois le message bonjour

Algorithme Bonjour
Variable
i : entier
Debut
i 0
Repeter
AfficherLigne Bonjour
i i+1
Jusqua (i=100)
FinAlgorithme

Par ailleurs le compilateur du langage C na pas la mme structure arborescente de la boucle
Repeter-Jusqua de lalgorithme. En C la boucle Repeter-Jusqua se dfinie de la manire
suivante :

do Repeter
(instruction) (instruction)
while (condition) TantQue (condition)

Traduit littralement, elle devient ainsi :

Repeter
(instruction)
Jusqua (condition)

Lcriture de lalgorithme prcdent devient ainsi en langage C littral.

Attention : on ne traduit pas tout lalgorithme en C mais cest la boucle qui nous intresse.





Adama MBODJI Les secrets de la programmation
97
Algorithme Bonjour
Variable
i : entier
Debut
i 0
do
AfficherLigne bonjour
i i +1
while (i != 100)
FinAlgorithme

Remarque : La condition de Repeter-Jusqua est linverse de la condition de do-while. Ce
principe permet de dresser le tableau suivant :

Oprateur de lalgorithme Oprateur du C
= (gal) != (diffrent)
< (infrieur strictement) >= (suprieur ou gal)
<= (infrieur ou gal) > (suprieur strictement)
> (suprieur strictement) <= (infrieur ou gal)
>= (suprieur ou gal) < (infrieur strictement)
ET || (OU)
OU && (ET)
PAS (instruction) (instruction)
<> (diffrence) = (gal)

Travail faire : Ecrire lalgorithme Procedure JusquaWhile (donnee ligneAlgo :
chaine ; resultat ligneC : chaine) qui ralise cette traduction.

Correction

Analyse :

La procdure JusquaWhile reoit comme paramtre dentre une chane de caractres contenant
la condition de linstruction Repeter et en sortie la condition de while.

Exemple :
ENTREE SORTIE
Pas (a+b) (a+b)
Pas (a=b) (a=b)
(a+b > 0) a + b <= 0
Racine (a) > 8 Racine (a) <= 8
i = 3,1415 i != 3,1415

Lalgorithme que nous allons donner ne tient pas en compte de loprateur PAS (ngation). Nous
invitons au lecteur de le raliser aprs analyse du premier.

Nous utiliserons la primitive MotSuivant (ligne, posit) qui renvoie le premier caractre
diffrent de lespace rencontr partir de la position posit.




Adama MBODJI Les secrets de la programmation
98
Procedure JusquaWhile (donnee ligneAlgo : chaine ; resultat ligneC : chaine)
Variable
I : entier
Mot : Chaine
Debut
I 1
LigneC ""
TantQue (i<= Longueur (ligneAlgo)) Faire
Mot RechercheMot (LigneAlgo, i)
Si (Mot = ">") ET (MotSuivant (ligneAlgo,i) = "=") Alors %cas du >=%
LigneC LigneC + "<"
Sinon
Si (Mot = "<") ET (MotSuivant (LigneAlgo,i) = "=") Alors
LigneC LigneC + ">"
Sinon
Si MotSuivant (ligneAlgo, i) <> "=" Alors
LigneC LigneC + ">="
Sinon
Si (Mot = "=") Alors
LigneC LigneC + "!="
Sinon
LigneC LigneC + Mot
FinSi
FinSi
FinSi
FinSi
FinTantQue
FinProcedure































Adama MBODJI Les secrets de la programmation
99





Kba DIOP.- Algorithmique et structures de donnes.- Tome 1 et Tome 2, Press de
luniversit de lUNIS.
Jean-Luc STEHLE, Pierre HOCHARD.- Thorie des langages (Partie II).- Ellipses
Moussa L et Fatou KAMARA.- Algorithmique & Programmation.- UGB Saint-Louis
Microsoft Encarta 2004

You might also like