les secrets de la programmation
Post on 16-Oct-2015
132 Views
Preview:
TRANSCRIPT
-
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
Problme + Donnes
Analyse
Excution
Compilation
Rsultat
Algorithme 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
= 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
, 1038
] 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 :
/ = (Expression)
ou / := (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 (, ,... )
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 (, . . ., )
-
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 ALORS SI Moyenne < 10 ALORS
Instruction Afficher Redouble
FINSI FINSI
Ou Ou
SI ALORS SI Moyenne < 10 ALORS
Instruction A Afficher Redouble
SINON SINON
Instruction B Afficher Passe
FINSI FINSI
Exemple : 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 DE
Cas , , : Instruction A
Cas
Dbut
Instruction 1
Instruction N
FIN
CASSINON
Instruction B
FINSELON
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
Les instructions allant de 1 N vont sexcuter jusqu ce que 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 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 = FAIRE
FINPOUR
Lordinateur excute linstruction 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 ()
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 () :
Dbut
Instruction(s)
= 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
-
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
1er
cas AfficherLigne (TabR [5].Matricule)
AfficherLigne (TabR [5].Nom)
AfficherLigne (TabR [5].Prenom)
2me
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
-
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
-
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 aij avec i j on a aij = aji
Exemple de matrice carre antisymtrique :
0 1 0 9
-1 0 -7 -4
0 7 0 8
-9 4 -8 0
Remarque : Quelque soit aij avec i j on a aij = -aji. 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, aij) dans un vecteur VECT ou i reprsente la ligne, j la
colonne et aij 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 ime
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 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 ime
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
-
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
(...)
Champn : Typen
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.
: crer le lien entre D et B. : modifier le lien entre A et B par le nouveau lien A, D
A C B
D
-
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 :
: Il faut dabord se positionner sur la cellule B tout en mmorisant la cellule A. : 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 (PNIL) 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
top related