Anda di halaman 1dari 82

Table des matires

Chapitre1: Introduction lalgorithmique ............................................................................................ 5 I Les diffrentes tapes de rsolution dun problme ........................................................................ 5 1. Dfinition et analyse du problme ............................................................................................... 5 2. 3. 4. 5. II Ecriture de lalgorithme ................................................................................................................ 5 Programmation de lalgorithme.................................................................................................... 6 Compilation ................................................................................................................................... 6 Excution et test du programme .................................................................................................. 6

Structure gnrale dun algorithme.................................................................................................. 6 1. Schma gnral dun algorithme .................................................................................................. 6 2. 3. 4. Dfinition dune variable .............................................................................................................. 7 Dfinition dune constante ........................................................................................................... 8 Les types de base .......................................................................................................................... 8

Chapitre 2 : Les instructions simples................................................................................................... 10 I Instruction daffectation ................................................................................................................. 10 1. Les expressions arithmtiques .................................................................................................... 10 2. Les expressions logiques ............................................................................................................. 11

II Instruction de lecture ou dentre .................................................................................................. 11 III Instruction dcriture ou de sortie .................................................................................................. 11 Chapitre 3: Les structures conditionnelles .......................................................................................... 13 I Structure conditionnelle simple ...................................................................................................... 13 1. Forme simple : (Si . Alors .. Finsi) ........................................................................................... 13 2. 3. II Forme compose : (Si alors.sinon) ..................................................................................... 14 Forme imbrique ........................................................................................................................ 14 Structure conditionnelle choix multiple ....................................................................................... 15

Chapitre 4: Les structures itratives ................................................................................................... 16 I La structure Pour .. faire.Finpour ...................................................................................... 16

II

La structure Rpter . Jusqu ................................................................................................ 17

III La structure Tantque. Faire.. Fintantque ....................................................................... 18 Chapitre 5 : Les sous programmes ...................................................................................................... 20 I 1. 2. 3. 4. II Les procdures ................................................................................................................................ 20 Les procdures sans paramtre .................................................................................................. 20 Les procdures avec paramtres ................................................................................................ 21 Passage de paramtres par valeur .............................................................................................. 22 Passage de paramtres par variable ........................................................................................... 23 Les fonctions ................................................................................................................................... 23

Chapitre 6: Les tableaux ..................................................................................................................... 26 I 1. 2. 3. 4. 5. 6. 7. 8. 9. II 1. 2. 3. 4. 5. Les tableaux une dimension ......................................................................................................... 26 Dfinition .................................................................................................................................... 26 Utilit........................................................................................................................................... 26 Composantes .............................................................................................................................. 26 Dclaration .................................................................................................................................. 26 Accs aux composantes dun tableau ......................................................................................... 27 Chargement dun tableau ........................................................................................................... 27 Affichage du contenu dun tableau............................................................................................. 28 Mthodes de recherche dans un tableau ................................................................................... 28 Mthodes de tri dans un tableau ............................................................................................... 31 Les tableaux deux dimensions ..................................................................................................... 34 Dfinition .................................................................................................................................... 34 Dclaration .................................................................................................................................. 34 Accs aux composantes dune matrice ....................................................................................... 35 Chargement dune matrice ......................................................................................................... 35 Affichage du contenu dune matrice .......................................................................................... 36

Chapitre 7 : La rcursivit................................................................................................................... 40 I Notion de rcursivit .......................................................................................................................... 40

II Etude dun exemple ........................................................................................................................... 40 III Interprtation .................................................................................................................................... 41 IV Mcanisme de fonctionnement de la rcursivit .............................................................................. 42 Chapitre 8: Les pointeurs ................................................................................................................... 44 I 1. 2. II 1. 2. Adressage de variables ................................................................................................................... 44 Adressage direct.......................................................................................................................... 44 Adressage indirect....................................................................................................................... 44 Les pointeurs ................................................................................................................................... 45 Dfinition .................................................................................................................................... 45 Les oprateurs de base ............................................................................................................... 45

III Paramtres dune fonction ............................................................................................................. 47 1. 2. Passage des paramtres par valeur ............................................................................................ 47 Passage des paramtres par adresse .......................................................................................... 49

IV Allocation dynamique de mmoire................................................................................................. 50 Chapitre 9: Les enregistrements ......................................................................................................... 52 I II Notion denregistrements ............................................................................................................... 52 Dclaration des variables de type enregistrement ......................................................................... 52

III Manipulation des variables de type enregistrement ...................................................................... 53 IV Tableaux denregistrement ............................................................................................................ 54 V Structures comportant dautres Structures .................................................................................... 55

VI Les pointeurs sur structures et accs aux donnes ........................................................................ 56 Chapitre 10: Les listes chanes .......................................................................................................... 60 I 1. 2. 3. II Les listes simplement chanes ....................................................................................................... 60 Dfinition .................................................................................................................................... 60 Description .................................................................................................................................. 60 Manipulation des LSC .................................................................................................................. 61 Les listes doublement chanes ...................................................................................................... 67

1. 2. 3.

Dfinition .................................................................................................................................... 67 Environnement type dune LB .................................................................................................... 68 Manipulation des LB ................................................................................................................... 68

Chapitre 11 : Les Arbres ..................................................................................................................... 73 I 1. 2. II 1. 2. 3. 4. 5. Les arbres gnraux ........................................................................................................................ 73 Dfinitions ................................................................................................................................... 73 Exemples dapplication ............................................................................................................... 75 Les arbres binaires .......................................................................................................................... 75 Dclaration .................................................................................................................................. 76 Fonction de cration dun nud ................................................................................................ 76 Fonction de cration dune feuille .............................................................................................. 76 Parcours dun arbre binaire ........................................................................................................ 77 Primitives dun arbre binaire ...................................................................................................... 81

Chapitre1: Introduction lalgorithmique

I-

Les diffrentes tapes de rsolution dun problme Pour rsoudre un problme en informatique, il faut passer par 5 tapes : Dfinition et analyse du problme Ecriture de lalgorithme Programmation Compilation du programme Excution et test du programme

1. Dfinition et analyse du problme Il sagit de : Dfinir les donnes quon dispose et les objectifs quon souhaite atteindre Prvoir des rponses tous les cas envisageables

Exemple : Si le problme est la rsolution dune quation de second degr ax2+bx+c =0 Les donnes sont a, b et c Les sorties sont x1 et x2 Les cas : a=0 et b0, a =0 et b =0, a 0 2. Ecriture de lalgorithme Cest la phase la plus difficile et importante, elle fournit la mthode et la dmarche que lordinateur va suivre pour rsoudre le problme pos. Dfinition dun algorithme : Un algorithme est une squence dtapes de calcul qui utilise des donnes en entre pour arriver des rsultats en sortie.

3. Programmation de lalgorithme Il sagit dexprimer lalgorithme dans un langage connu par lordinateur. Il faut donc choisir un langage de programmation et ensuite traduire lalgorithme sous forme dun programme exprim dans ce langage. 4. Compilation Il sagit de traduire le programme crit dans un langage de haut niveau en un programme excutable crit dans un langage binaire de bas niveau tout en dtectant les ventuelles erreurs. Cette tche est ralise par le compilateur. 5. Excution et test du programme Il sagit de sassurer que le programme donne un rsultat correct dans tous les cas et pour toutes les ventualits. Effectuer plusieurs jeux de tests correspondant aux diffrents cas et vrifier la validit des rsultats. IIStructure gnrale dun algorithme

1. Schma gnral dun algorithme Un algorithme comporte gnralement deux parties : Partie dclarative : elle contient lentte, la dclaration des constantes et celle des variables. Partie corps de lalgorithme : elle consiste en une squence dactions faisant appel des oprations de base de lordinateur.

Syntaxe : Algorithme nom de lalgorithme Const Liste des constantes avec leurs valeurs Var Liste des variables suivies par leurs types 6
Partie dclarative

Dbut Squence dactions Fin


Partie corps de lalgorithme

Une action peut tre : Action daffectation ou, Action dentre- sortie ou, Action de contrle conditionnelle simple ou choix multiple ou, Action de rptition. 2. Dfinition dune variable Une variable est un emplacement mmoire capable de contenir des valeurs de type dfini au pralable. Elle peut tre dfinie comme une boite qui admet un nom, une taille, un contenu et une adresse. Le nom de la variable sappelle identificateur de la variable. La taille dpend du type de la variable (exemple : 2 octets pour un entier, 1 octet pour un caractre, 4 octets pour un rel) Ladresse dsigne le numro du 1er octet occup par cette variable en mmoire centrale Dans un algorithme, les variables sont dclares comme suit : Var Liste des variables suivies par des virgules : type 1 Liste des variables suivies par des virgules : type 2 . . Liste des variables suivies par des virgules : type i Dans un algorithme, on peut avoir 0 plusieurs variables.

Exemple : Var X, Y : entier A : rel 3. Dfinition dune constante La dfinition dune constante est la mme que celle dune variable la diffrence que la valeur dune constante reste inchange tout au long de lalgorithme. Syntaxe : Const Nom const 1 = val 1 Nom const i = val i Exemple: Const Min = 10 Max = 200 4. Les types de base A toute variable est attribu un type qui dfinit : boolen. a) Type entier - Il reprsente lensemble des entiers relatifs tel que : 8, -10, 3 - Les oprations permises sont : +, -, *, div (division entire) et mod ( reste de la division entire) b) Type rel - Il reprsente lensemble IR 8 Lensemble des valeurs que peut prendre la variable Lensemble des oprations quon peut appliquer sur la variable

Il existe des types simples qui sont prdfinis tels que les types : entier, rel, caractre ou

- Deux formes de reprsentation : La forme usuelle a.b exemple : -4.6, 13.9 .. ou la forme scientifique a E b exemple : 345 = 3.45 E2 = 0.345 E3 - Les oprations permises sont : +, -, *, / c) Type caractre - Il peut tre une lettre, un chiffre ou caractre spcial exemple : a, b, 3 . - Les oprations permises : =, , <, <=, >, >=. d) Type boolen - Il reprsente les deux valeurs Vrai et Faux - Les oprations : NON, ET, OU Remarque : Il existe des types composs dfinis partir des types de base comme les tableaux, les chanes de caractre.

Chapitre 2 : Les instructions simples


IInstruction daffectation

Cette action permet de ranger une nouvelle valeur dans une variable Syntaxe Identificateur var <expression> Expression peut tre : Remarque Une constante ne peut jamais figurer gauche dune affectation. Aprs une affectation, lancien contenu est perdu pour tre substitu par le nouveau contenu. Une action daffectation doit se faire entre deux types compatibles. Une variable Une constante Une expression arithmtique Une expression logique

1. Les expressions arithmtiques <exp-arith> op_arith <exp-arith> Op_arith peut tre +, -, / ou * Exemple : (Y/2) + x*3 Lordre de priorit des oprateurs arithmtiques : - signe ngatif ( ) parenthses ^ puissance * et / multiplication et division + et addition et soustraction

10

2. Les expressions logiques Les expressions logiques admettent Vrai ou Faux comme rsultat. Elles peuvent utiliser des oprateurs relationnels ( = , , <,<=, >, >=) ou des oprateurs logiques (NON, ET, OU) Lordre de priorit est : NON ET OU > >= < <= =

Exemple : (x<6) ET (Y = 20) donne vrai si x<6 et Y = 20 et faux sinon IIInstruction de lecture ou dentre Elle permet daffecter, une variable, une donne introduite) partir dune priphrique dentre (clavier). Syntaxe : Lire (nom_var1, nom_var2,) Exemple : Lire(A) : lit une valeur partir du priphrique dentre et la range dans la case mmoire associe A. Lire(X,Y) : lit deux valeurs la premire pour X et la deuxime pour Y. IIIInstruction dcriture ou de sortie

Elle permet dafficher des rsultats sur un priphrique de sortie (cran). Ce rsultat peut tre : Une chane de caractres dlimite par des La valeur dune variable dont le nom est spcifi 11

La valeur dune expression Ecrire (Liste dexpressions spares par des virgules)

Syntaxe : Lordinateur value tout dabord lexpression puis affiche le rsultat obtenu

Exemple : Lire (somme) Lire(Nbre) Ecrire (La moyenne est :, somme / Nbre) Si lutilisateur introduit 120 pour somme et 10 pour Nbre alors laffichage sera : La moyenne est 12. Exercice 1 : Ecrire un algorithme qui lit deux entiers X et Y et affiche leurs valeurs avant et aprs permutation Exercice 2 : Ecrire un algorithme qui lit trois entiers et qui calcule et affiche leur somme, leur produit et leur moyenne.

12

Chapitre 3: Les structures conditionnelles


Introduction En programmation, on est souvent confront des situations ou on a besoin de choisir entre 2 ou plusieurs traitements selon la ralisation ou non dune certaine condition dou la notion de traitement conditionnel. On distingue deux structures de traitement conditionnel savoir : La structure conditionnelle simple qui consiste valuer une condition (expression logique valeur vrai ou faux) et deffectuer le traitement relatif la valeur de vrit trouve. La structure conditionnelle choix multiple qui consiste valuer une expression qui nest pas ncessairement valeur boolenne (elle peut avoir plus de deux valeurs) et selon la valeur trouve, effectue un traitement. Structure conditionnelle simple

I-

1. Forme simple : (Si . Alors .. Finsi) Syntaxe : Si condition Alors action(s) Fin si Dans cette forme, la condition est value. Si elle vaut vrai alors c'est la squence d'actions qui est excute sinon c'est l'action qui suit l'action conditionnelle dans l'algorithme qui est excute. Lexcution de cette instruction se droule selon lorganigramme suivant :
Si

Condition? Vrai Squence dactions

Faux

Suite du programme

13

Exemple 1 : Ecrire un algorithme qui permet de saisir un entier et dafficher impossible dtre diviseur si cet entier est gal 0. 2. Forme compose : (Si alors.sinon) Syntaxe : Si condition Alors Action(s)1 Sinon Action(s)2 Fin si Dans cette forme, la condition est value. Si elle vaut vrai alors c'est la squence d'actions 1 qui sera excute sinon c'est la squence dactions 2 qui sera excute. Lexcution de cette instruction se droule selon lorganigramme suivant :
Si

Vrai

Condition?

Faux

Squence dactions2

Squence dactions2

Suite du programme

Exemple 2 : Ecrire un algorithme qui permet de saisir un entier et dafficher pair si cet entier est pair ou impair si cet entier est impair. 3. Forme imbrique Syntaxe Si condition 1 Alors Action(s)1 Sinon Si condition 2 Alors Action(s)2 14

Sinon Si condition N-1 Alors Action(s)N-1 Sinon Action(s)N Fin si Si la condition est vraie, alors la squence dactions 1 sera excute sinon on value la condition 2 si elle est vraie la squence dactions 2 sera excute. Enfin, si aucune des N-1 conditions est vraie alors on excute la squence dactions N. Exemple : Ecrire un algorithme qui permet de saisir deux entiers A et B puis teste si A>B ou A<B ou A=B. IIStructure conditionnelle choix multiple

Syntaxe Selon <slecteur> faire <liste de valeurs1> : <traitement 1> <liste de valeurs2> : <traitement 2> .. .. <liste de valeursN> : <traitement N> Sinon <traitement N+1> Fin selon Le slecteur est un identificateur <traitement i> est une squence dactions. <liste de valeurs i> peut tre une constante ou un intervalle de constantes de mme type que slecteur. La partie sinon est facultative. Elle est excute si aucune des valeurs nest gale au slecteur. Exemple : Ecrire un algorithme qui permet de lire un numro de jour de la semaine (compris entre 1 et 7) et dafficher le nom du jour en toute lettre.

15

Chapitre 4: Les structures itratives


Introduction On peut excuter une action ou un ensemble dactions non pas infiniment mais un certain nombre de fois : cest la notion de boucles. ISyntaxe La structure Pour .. faire.Finpour

Pour vc de vi vf faire Traitement Finpour Vc : compteur de type entier Vi et vf : valeur initiale et valeur finale de vc Traitement : action ou squence dactions rpter (vf-vi +1) fois. La boucle Pour est utilise lorsque le nombre ditration est connu lavance. Vc reoit une valeur initiale vi pour la premire fois, il ne doit pas tre modifi par une action de traitement lintrieur de la boucle. Vc est incrment automatiquement par 1 chaque excution du corps de la boucle Pour. Cette valeur dincrmentation est appele le pas de la boucle. L excution de la boucle finit lorsque vc atteind vf.
Pour

Vc Vi Non

Vc <=Vf? Oui Traitement

Suite du programme

Vc Vi

Schma dexcution dune boucle Pour

16

Exemple : Pour i de 1 5 faire Ecrire (i * 100) Fin pour Excution : i = 1 2 3 4 5 6 Rsultat 100 200 300 400 500 Remarques : Une boucle peut tre excute une ou plusieurs fois. Si le pas est diffrent de 1, il faut ajouter loption ( pas = constante) Exemple Pour i de 5 1 (pas = -1) faire Ecrire (i * 100) Fin pour Excution : i = 5 4 3 2 1 0 Rsultat 500 400 300 200 100 Exemple 1 Ecrire un algorithme qui permet de calculer et dafficher la somme des nb premiers entiers naturels (nb est saisi partir de clavier). Exemple 2 Ecrire un algorithme qui lit un entier n quon suppose positif puis affiche tous ses diviseurs.

II-

La structure Rpter . Jusqu

Syntaxe Rpter Traitement Jusqu (condition) Condition : condition darrt et de sortie de la boucle Traitement : action ou ensemble dactions excuter tant que la condition nest pas vrifie, ds quelle soit vrifie, lexcution du traitement sarrte. Le nombre de rptition nest pas connu lavance. Le traitement est excut au moins une fois quelque soit le rsultat de la condition. La condition doit tre initialise avant le dbut de la boucle et doit tre modifie lintrieur de la boucle.

17

Rpter

Traitement

Condition? Faux Vrai Suite du programme

Exemple i1 Rpter Ecrire ( i *100) i i +1 jusqu ( i > 5) Excution : i = 1 2 3 4 5 6 Rsultat 100 200 300 400 500 Exemple Ecrire un algorithme qui permet de calculer la somme des nb premiers entiers en utilisant la boucle rpter jusqu Exemple Ecrire un algorithme qui permet de calculer la factorielle dun entier n donn (on suppose que n est un entier positif) IIILa structure Tantque. Faire.. Fintantque

Syntaxe Tantque (condition) faire Traitement Fintantque Condition : condition de maintien de la boucle. Traitement : Action ou ensemble dactions excuter tant que la condition est vrifie. Le traitement est excut tant que la condition est vrifie sinon on sort de la boucle. Si la condition nest pas vraie ds la premire excution, la boucle ne sera jamais excute (0 fois). 18

Le nombre de rptition n est pas connu lavance. La condition doit tre initialise avant la boucle et modifie lintrieur de la boucle.

Tant que

Condition? Vrai Traitement

Faux

Suite du programme

Exemple i1 tantque (i5) Ecrire ( i *100) i i +1 Fintantque Excution : i = 1 2 3 4 5 6 Rsultat 100 200 300 400 500 Exemple Reprendre les exercices prcdents en utilisant la boucle tant que.

19

Chapitre 5 : Les sous programmes


Introduction Le but de lutilisation de sous programmes : - dcomposition des problmes en modules (sous problmes de taille rduite) : o Dans un programme plusieurs squences dinstructions sont appeles plusieurs fois et depuis divers points du programme. Il serait donc plus intressant disoler ces squences dans un sous programme qui peut tre appel depuis nimporte quel point du programme. o Lapproche modulaire rduit normment le nombre dinstructions redondantes (qui se rptent) moyennant lajout dune squence dappel pour le module diffrents endroits du programme. Do la rduction de la taille du programme (code). o La lisibilit qui facilite notablement la comprhension du programme - Rutilisation du sous programme En rsum, le programme sera plus lisible et plus facile maintenir ( modifier ventuellement par la suite) Un sous programme est portion de code analogue un programme. Dclare dans un programme ou dans un sous programme et dont la partie instruction peut tre excute plusieurs fois au cours du traitement du programme grce des appels. On distingue deux formes de sous programmes : Les procdures et les fonctions. ILes procdures Une procdure est un sous programme qui effectue un traitement (suite dinstructions) 1. Les procdures sans paramtre Elles sont utilises pour viter davoir rcrire plusieurs fois une mme suite dinstructions figurant plusieurs fois dans le programme. Dclaration Procdure nom_procdure Dclarations Dbut Suite dinstructions Fin Appel (utilisation) nom_procdure

20

Exemple Algorithme Principal Var x, y : entier Procdure Affiche Var Dbut Dclaration de la procdure Ecrire (Bonjour) Fin Dbut Lire(x) Lire(y) Permute Ecrire(x,y) Fin 2. Les procdures avec paramtres Exemple Algorithme Principal Var x, y : entier Procdure Permute(var u,v : entier) Var z : entier Dbut z<- u u<-v v<-z Fin Dbut .. Permute(x,y) . Permute(a,b) . Permute(m,n) Fin - Paramtres formels Une dclaration de procdure peut comporter aprs le nom de la procdure une liste de paramtres formels dont la syntaxe est la suivante. Procdure nom_procdure(liste de paramtres formels) Exemple Procdure Somme(a, b : entier, var c : entier) Dbut c<-a+b 21

Fin - Paramtres effectifs Au cas o la dclaration dune procdure comprend des paramtres formels, chaque appel de cette procdure doit comporter des paramtres effectifs compatibles dont la syntaxe est la suivante. nom_procdure(liste de paramtres effectifs) Il faut que les deux listes de paramtres formels et effectifs aient le mme nombre de paramtres et que les paramtres formels et effectifs correspondants soient compatibles. Exemple Algorithme Principal Var t :rel X, y : entier Dbut Permute(x,y,z) Permute(x,t) Fin 3. Passage de paramtres par valeur les paramtres effectifs sont lus lappel de la procdure puis leurs valeurs sont affectes des variables temporaires locales la procdure. Exemple Algorithme passage_valeur Var x : entier Procdure Incrmenter(y : entier) Dbut Ecrire(y) y<-y+1 Ecrire(y) Fin Dbut x<-0 Ecrire(x) Incrmenter(x) Ecrire(x) Fin Le x reste intact=0 mais en mme temps on veut lincrmenter. Donc on utilise cette procdure. 22

// interdit parce que le nombre de paramtres formels est // diffrent du nombre de paramtres effectifs // interdit parce que les paramtres formels et effectifs ne sont // pas compatibles

4. Passage de paramtres par variable Les variables dentre de la procdure (paramtres effectifs) sont lis aux paramtres formels. Pendant lexcution du corps de la procdure toute action sur les paramtres formels sexcutera sur les paramtres effectifs correspondants. Par consquent, la sortie de la procdure, les variables peuvent avoir leurs contenus changs. Exemple Algorithme Passage variable Var x : entier Procdure Incrmenter(var y : entier) Dbut Ecrire(y) y<-y+1 Ecrire(y) Fin Dbut x<-0 Ecrire(x) Incrmenter(x) Ecrire(x) Fin Rsum Le passage de paramtres par valeur est utilis pour transmettre une valeur la procdure. Le passage de paramtres par variable est utilis pour que la procdure puisse modifier la valeur dune variable du programme appelant. IILes fonctions Une fonction est un sous programme qui renvoie une valeur dun seul type. Ce type sera celui de la fonction. La valeur retourne par la fonction dpend en gnral des paramtres formels (et des variables globales) - Variables globales : elles sont dclares lextrieur des sous programmes - Variables locales : elles sont dclares lintrieur du sous programme Exemple Algorithme Principal Var x, y : entier //variables globales Procdure Proc(z : entier) //variable locale Var T :rel Dbut . Fin Dbut . Fin

23

Une mme variable peut apparatre localement dans deux sous programmes diffrents. Dclaration Fonction nom_fonction(liste des paramtres formels) : type du rsultat retourn Var Dclarations des variable Dbut Corps fonction Fin Exemple Fonction Max(x, y : entier) : entier Dbut Si x >=y Alors Max<-x Sinon Max<-y Finsi Fin Remarque Le corps de la fonction doit contenir au moins une instruction de retour de la valeur de la fonction comme suit : nom_fonction <- expression expression doit tre de mme type que la fonction Appel de fonction Un appel dune fonction se fait dans une expression Exemple Algorithme Maximum4rels Var x1, x2, x3, x4 : rel y1, y2, y3 : rel Fonction Max(x, y : rel) :rel Dbut Si x<=y Alors Max<-x Sinon Max <-y Finsi Fin Dbut Lire(x1, x2, x3, x4) y1<-Max(x1, x2) y2<-Max(x3, x4) y 3<-Max(y1,y2) 24

Ecrire( le maximum est : ,y3) Fin Remarque La dernire des valeurs affectes constitue le rsultat de lvaluation de lappel de la fonction.

25

Chapitre 6: Les tableaux


ILes tableaux une dimension

1- Dfinition Un tableau T est une variable structure forme dun nombre entier N de variables simples de mme type, qui sont appeles les composantes du tableau. Le nombre de composantes N est alors la dimension du tableau.

..

N composantes On dit encore que T est un vecteur de dimension N. 2- Utilit Un tableau est une structure de donnes constitue dun nombre fini dlments de mme type. Lorsque plusieurs donnes de mme type, gnralement destines au mme traitement doivent tre accessibles le long dun programme, on propose dutiliser la structure dun tableau. 3- Composantes Nom : identificateur dun tableau. Type-lment : Les lments dun tableau sont caractriss par leur type (entier, rel, caractre,..). Indice : Tout type dont les lments possdent un successeur (les types scalaires), gnralement de type entier. 4- Dclaration Nom_tab : Tableau [premind. .deuxind] de type_lment

26

Exemples : T1 : Tableau [1..50] dentier T2 : Tableau [1..20] de rel T3 : Tableau [1..20] de caractre Remarque : Il est galement possible de dfinir un type tableau comme dans lexemple suivant : CONST Nmax = 50 TYPE Tab : Tableau [1..nmax] dentier VAR T : tab 5- Accs aux composantes dun tableau Considrons un tableau T de dimension N Laccs au premier lment du tableau se fait par T[1] Laccs au dernier lment du tableau se fait par T[N] Exemple :
Nom : T Indice : Contenu 100 1 T[1] 200 2 T[2] 300 3 T[3] 400 4 T[4] 500 5 T[5]

6- Chargement dun tableau Ecrire un algorithme qui permet de remplir un tableau de 5 entiers.
ALGORITHME Chargement VAR

T : Tableau [1..5] dentier i : entier


Dbut

Pour i de 1 5 Faire Ecrire ("T [" , i , "] :") 27

Lire(T[i]) Fin pour


Fin

7- Affichage du contenu dun tableau


ALGORITHME AFFICHER VAR

T : Tableau [1..5] dentier i : entier


Dbut

Pour i de 1 5 Faire
Ecrire (T[i]) FinPour Fin

8- Mthodes de recherche dans un tableau 8-1- La recherche squentielle Problme : Dterminer la premire position dune valeur donne dans un tableau de N lment. Rsoudre ce problme en utilisant la notion de procdures/Fonctions Algorithme RECHERCHE CONST Nmax = 50 TYPE Tab : Tableau [1..nmax] dentier VAR T : tab N , val : entier /*Procdure CHARGEMEMENT*/ Procdure CHARGEMEMENT ( VAR T : tab ; N :entier) VAR i : entier DEBUT Pour i de 1 N Faire Ecrire ("T [" , i , "] :") Lire(T[i]) Fin pour FIN /*Procdure AFFICHE*/ 28

Procdure AFFICHE ( T : tab ; N :entier) VAR i : entier DEBUT Pour i de 1 N Faire Ecrire ( T[i]) FinPour FIN /*Procdure INDICE*/ Fonction INDICE ( T : tab ; N, val :entier) : entier VAR i, pos : entier DEBUT pos -1 i 1 Tant que (i N et pos = -1 ) Faire Si (T[i] = val ) alors pos i Sinon i i+1 Finsi FinTantque INDICE pos FIN /*Programme Principal*/ DEBUT ( P.P) Rpter Ecrire("Donner la taille de T :") Lire(N) Jusqu (N>1 et N<=nmax) Ecrire (" Chargement de T ") CHARGEMEMENT ( T , N ) Ecrire (" Affichage de T ") AFFICHE( T , N ) Ecrire (("Donner la valeur chercher dans T :") Lire(val) Si( INDICE ( T , N, val ) = -1) alors Ecrire (val , "nexiste pas dans T ") sinon Ecrire (val , "existe la position", INDICE ( T , N, val ), "dans T ") Finsi FIN

29

8-2- La recherche dichotomique Problme : Dterminer la premire position dune valeur donne dans un tableau de N lment tris dans le sens croissant. Rsoudre ce problme en utilisant la notion de procdures/Fonctions. Principe : Le principe est de dcomposer le tableau T en deux sous tableaux. Trois cas peuvent se produire : Si val = T[milieu] alors val est trouv et la recherche est termine. Si val < T[milieu] alors on va chercher val dans la partie gauche du tableau T. Si val > T[milieu] alors on va chercher val dans la partie droite du tableau T. On poursuit la recherche tant que T[milieu] est diffrent de val est tant que la dimension de sous tableau reste valide.
Fonction Dichotomique ( T : tab ; N, val :entier) : entier VAR

i, pos,mil, inf, sup : entier DEBUT pos -1 inf 1 sup N Tant que ( inf sup et pos = -1 ) Faire mil (inf + sup) div 2 Si (T[mil] = val ) alors pos = mil Sinon Si (val<T[mil] ) alors sup mil - 1 sinon inf mil + 1 finsi Finsi
FinTantque

INDICE pos FIN

30

9- Mthodes de tri dans un tableau 9-1- Tri par slection (par minimum) Principe : Le principe de cette mthode est simple. Elle consiste : Chercher lindice du plus petit lment du tableau T[1..n] et permuter llment correspondant avec llment dindice 1; Chercher lindice du plus petit lment du tableau T[2..n] et permuter llment correspondant avec llment dindice 2 ; .. Chercher lindice du plus petit lment du tableau T[n-1..n] et permuter llment correspondant avec llment dindice n-1; Procdure TRISELECTION (VAR T : tab ; N : entier) VAR i, j, aux, indmin : entier DEBUT Pour i de 1 n-1 faire indmin i Pour j de i+1 n faire Si ( T[j] < T[indmin] ) alors indmin = j Finsi FinPour Si (i indmin ) alors aux T[i] T[i] T[indmin] T[indmin] aux Finsi FinPour FIN

31

Tableau initial

60

50

20

40

10

30

Aprs la 1re itration

10

50

20

40

60

30

Aprs la 2me itration

10

20

50

40

60

30

Aprs la 3me itration

10

20

30

40

60

50

Aprs la 4me itration

10

20

30

40

60

50

Aprs la 5me itration

10

20

30

40

50

60

9-2- Tri bulles Principe : Cet algorithme porte le nom de tri bulle car, petit petit, les plus grands lments du tableau remontent, par le jeu des permutations, enfin de tableau. Dans un aquarium il en va de mme : les plus grosses bulles remontent plis rapidement la surface que les petites qui restent colls au fonds. Il existe plusieurs variantes de cet algorithme : Une mthode consiste faire descendre les plus petites valeurs au dbut du tableau. Dans ce cas, le tableau est parcouru de droite gauche. /*Procdure TRISBULLE */ Procdure TRISBULLE (VAR T : tab ; N : entier) VAR i, j, aux : entier DEBUT Pour i de 1 n-1 faire j n 32

Tantque (j i) faire Si (T[j] < T[j - 1] ) alors aux T[j] T[j] T[j - 1] T[j - 1] aux Finsi j j1 FinTantque FinPour FIN /*Programme Principal*/ DEBUT ( P.P) N SAISIE_TAILLE () Ecrire (" Chargement de T ") CHARGEMEMENT ( T , N ) Ecrire (" Affichage de T avant tri") AFFICHE ( T , N ) TRISBULLE (T, N) Ecrire (" Affichage de T aprs tri") AFFICHE ( T , N ) FIN
Tableau initial 50 30 20 40 10

1re tape

50

30

20

10

40

50

30

10

20

40

50

10

30

20

40

10

50

30

20

40

2me tape

10

50

20

30

40

33

10

20

50

30

40

3me tape

10

20

30

50

40

4me tape

10

20

30

40

50

II-

Les tableaux deux dimensions

1- Dfinition Un tableau deux dimensions A et interprter comme un tableau (unidimensionnel) de dimension L dont chaque composante est un tableau (unidimensionnel) de dimension C. On appelle L le nombre de lignes du tableau et C le nombre de colonnes du tableau. Un tableau deux dimensions contient L*C composantes.

M
. ...
L lignes

C colonnes 2- Dclaration Nom_tab : Tableau [premind. .deuxind , premind. .deuxind] de type_lment Exemples : M1 : Tableau [1..30, 1..30] dentier M2 : Tableau [1..20, 1..20] de rel M3 : Tableau [1..20, 1..20] de caractre Remarque : Il est galement possible de dfinir une matrice comme dans lexemple suivant : CONST NL = 30 34

NC = 20 TYPE MAT : Tableau [1.. NL, 1.. NC] dentier VAR M : MAT 3- Accs aux composantes dune matrice Considrons un tableau M de L lignes et C colonnes. Les indices du tableau varient de 1 L, respectivement de 1 C. La composante de la Nime ligne et Mime colonne est note : A[N,M]. Syntaxe : <Nom du tableau>[<ligne> ,<colonne>]

Exemple : Considrons une matrice de 3 lignes et 4 colonnes

1 2 3

1 A[1 ,1] A[2 ,1] A[3 ,1]

2 A[1,2] A[2 ,2] A[3 ,2]

3 A[1,3] A[2 ,3] A[3 ,3]

4 A[1 ,4] A[2 ,4] A[3 ,4]

4-Chargement dune matrice


Algorithme Chargement VAR

M : Tableau [1.. 3, 1..4] dentier i ,j : entier


Dbut

Pour i de 1 3 Faire Pour j de 1 4 Faire Ecrire ("M [" , i , ", " , j , "] :") Lire (M [i, j]) Fin pour Fin pour Fin 35

5-Affichage du contenu dune matrice Algorithme Afficher VAR M : Tableau [1.. 3, 1..4] dentier i,j : entier Dbut Pour i de 1 3 Faire Pour j de 1 4 Faire Ecrire ( M[i, j]) Fin pour Fin pour Fin
Exemple 1

Soient M1 et M2 deux matrices n lignes et m colonnes. On veut crire une procdure qui calcule les lments de la matrice M3 = M1 + M3 Rappel: \ / M2 \ / M1 | a b c d | | a' b' c' d' | | e f g h | + | e' f' g' h' | | i j k l | | i' j' k' l' | \ / \ /
VAR

/ M3 \ | a+a' b+b' c+c' d+d' | | e+e' f+f' g+g' h+h' | | i+i' j+j' k+k' l+l' | \ /

Procdure SOMME ( M1 , M2 : MAT ; VAR M3 : MAT ;n, m : entier)

i ,j : entier
Dbut

Pour i de 1 n Faire Pour j de 1 m Faire M3[i, j] M1[i, j] + M2[i, j] Fin pour Fin pour Fin
Exemple 2 Ecrire un algorithme qui effectue la transposition tA d'une matrice A de dimensions N et M en une matrice de dimensions M et N.

36

La matrice A sera transpose par permutation des lments. Rsoudre ce problme en utilisant la notion de procdures/Fonctions. Rappel: / \ | a b c d | = t | e f g h | | i j k l | \ / / | = A | | | \ a b c d e f g h i j k l \ | | | | /

tA

Algorithme CHANGEMENT

CONST Nmax = 50 TYPE MAT : Tableau [1.. Nmax, 1.. Nmax] dentier VAR A : MAT N , M : entier
/*Procdure SAISIE_TAILLE */ Fonction SAISIE_TAILLE() : entier VAR

nb : entier DEBUT Rpter Ecrire("Donner la taille de T :") Lire(nb) Jusqu (nb>1 et nb<=nmax)
SAISIE_TAILLE nb

FIN
/*Procdure CHARGEMEMENT*/ Procdure CHARGEMEMENT (VAR A : MAT ; N, M : entier) VAR

i , j: entier DEBUT Pour i de 1 N Faire Pour j de 1 M Faire Ecrire ("A [" , i , ", " , j , "] :") 37

Lire (A [i, j]) Fin pour Fin pour FIN


/*Procdure AFFICHE*/ Procdure AFFICHE (A : MAT ; N, M :entier) VAR i, j : entier

DEBUT Pour i de 1 N Faire Pour j de 1 M Faire Ecrire (A [i, j]) Fin pour Fin pour
FIN /*Procdure transpose*/ Procdure TRANSPOSEE (VAR A : MAT ; N, M : entier) VAR i, j, Dmax, aux : entier

DEBUT Si ( N > M ) alors Dmax N Sinon Dmax M Finsi Pour i de 1 Dmax Faire Pour j de 1 i Faire aux A[i, j] A[i , j] A[j , i] A[j , i] aux Fin pour Fin pour
FIN /*Programme Principal*/

38

DEBUT ( P.P)

Ecrire (" Saisie des tailles ") N SAISIE_TAILLE ()


M SAISIE_TAILLE()

Ecrire (" Chargement de A ") CHARGEMEMENT (A, N, M) Ecrire (" Affichage de A avant transposition ")
AFFICHE (A, N, M) TRANSPOSEE (A, N, M)

Ecrire (" Affichage de A aprs transposition ")


AFFICHE (A, M, N)

FIN

39

Chapitre 7 : La rcursivit
I- Notion de rcursivit Une des caractristiques les plus importantes de programmation est la possibilit pour une procdure ou une fonction de sappeler elle-mme. On parle de rcursivit. La rcursivit est particulirement utile pour traiter tous les problmes formalisables de faon rcursive, bien quil soit possible de programmer des solutions nutilisant pas la rcursivit pour ces problmes. Syntaxe Fonction Rcursive (par : type_par) : typer_retour Variable rsultat : type_retour Dbut Si (cdt_arret) alors rsultat val_initiale sinon rsultat /* Appel de la fonction Rcursive (par2)*/ finsi retour (rsultat) Fin II- Etude dun exemple On peut dfinir le factoriel dun nombre n non ngatif de 2 manires.
Dfinition non rcursive

N ! = N * N-1 * . 2 * 1 Dfinition rcursive : N ! = N * (N 1) ! et 0!=1 Solution itrative : Fonction FACT ( n : entier ) : entier VAR i, F: entier DEBUT Si (n = 0 ) alors FACT 1 Sinon F 1 Pour i de n 1 ( pas = -1 ) faire 40

F F*i Finpour FACT F Finsi FIN Solution rcursive : Fonction FACT ( n : entier ) : entier VAR F : entier DEBUT Si (n = 0 ) alors F 1 Sinon F n * FACT (n-1) Finsi FACT F FIN /* PROGRAMME PRINCIPAL*/ DEBUT ( P.P ) Rpter Ecrire ("Donner un entier n : ") Lire ( n ) Jusqu (n 0 ) crire ("La factorielle de ", n , " = " , FACT ( n )) FIN IIIInterprtation

Chaque procdure ou fonction rcursive doit comporter une condition darrt (dans notre exemple n=0). Cette condition empche des appels rcursifs sans fin. Habituellement, la condition darrt se prsente sous la forme dune instruction si alorssinon qui permet de stopper la rcurrence si la condition darrt est satisfaite. Par contre, tant que la condition darrt nest pas remplie, la procdure (ou la fonction) sappelle au bon endroit. On remarque que le processus rcursif remplace en quelque sorte la boucle. On remarque aussi quon traite le problme lenvers : on part du nombre, et on remonte rebours jusqu 1 pour pouvoir calculer la factorielle. Cet effet de rebours est caractristique de la programmation rcursive.

41

Pour la solution rcursive : La fonction FACT est appele successivement, une fois dans le programme principal et (N-1) faon depuis elle-mme, de faon totalement transparente pour lutilisateur. Le seul rsultat visible est la rponse finale. Lorsque sexcute un programme rcursif, les appels successifs de la fonction (ou procdure) rcursive ne sont pas excuts immdiatement. Ils sont de faits placs dans une pile jusqu ce que soit atteinte la condition darrt du processus rcursif. Les appels de fonction sont alors excuts en ordre inverse, au fur et mesure quils sont retirs de la pile. Une pile est une structure de donnes de type LIFO (Last In, First Out) ou Dernier Entre, Premier Sortie IVMcanisme de fonctionnement de la rcursivit

Lvaluation rcursive dune factorielle donne lieu au traitement, dans lordre suivant, des appels de la fonction : Donner un entier n : 4 FACT (4) 4*FACT (3) 3* FACT (2) 2* FACT (1) 1* FACT (0) 1 Les valeurs effectives sont retournes dans lordre inverse : 0!=1 1!=1*0!=1*1=1 2!=2*1!=2*1=2 3!=3*2!=3*2=6 4 ! = 4 * 3 ! = 4 * 6 = 24 Remarques La programmation rcursive, pour traiter certains problmes, est trs conomique pour le programmeur ; elle permet de faire les choses correctement, en trs peu d'instructions. Tout problme formul en termes rcursifs peut galement tre formul en termes itratifs ! Exercice1 : Ecrire une fonction Fib rcursive qui calcule le terme Fn de la suite de Fibbonaci : F0 = 0, F1 = 1, Fn = Fn-1 + Fn-2 Fonction Fib ( n : entier ) : entier VAR f : entier 42

Dbut Selon (n) faire 0: f 0 1: f 1 Sinon f Fib (n - 1) + Fib (n - 2) Finselon Fib f Fin Exercice2 : Ecrire une fonction puissance rcursive qui donne la puissance entire (positive) d'un nombre rel. Fonction Puiss( x : rel ; n : entier) : rel VAR P : rel Dbut Si (n = 0) alors P 1 Sinon P x * Puiss(x, n - 1) Finsi Puiss P Fin Exercice3 : Ecrire une procdure ENVERS rcursive qui permet dafficher les lments dun tableau dentiers lenvers. Procdure AFFICHER ( T : tab ; n : entier) Dbut Si (n 0) alors crire (T[n]) AFFICHER (T , N-1) Finsi Fin

43

Chapitre 8: Les pointeurs

Introduction La plupart des langages de programmation offrent la possibilit d'accder aux donnes dans la mmoire de l'ordinateur l'aide de pointeurs, c.--d. l'aide de variables auxquelles on peut attribuer les adresses d'autres variables. IAdressage de variables

1. Adressage direct Accs au contenu dune variable par le nom de la variable. Exemple : A : entier A 10 A ......... Adress 1E04 e 2. Adressage indirect Si nous ne voulons pas utiliser le nom dune variable A, nous pouvons copier ladresse de cette variable dans une variable spciale P appele Pointeur. Ensuite, nous pouvons retrouver linformation de la variable A en passant par le pointeur P. Accs au contenu dune variable en passant par un pointeur qui contient ladresse de la variable. Exemple : Soit A une variable contenant la valeur 10 et P un pointeur qui contient ladresse de A. 10 1E06 1E08 .......... 1E0A

44

P 5 C26 3F04 II3F06 3F08 5C24

A 10 5C26 5C28

Les pointeurs

1- Dfinition Un pointeur est une variable spciale qui peut contenir ladresse dune autre variable. Si un pointeur P contient ladresse dune variable A, on dit que 'P pointe sur A'. Un pointeur est limit un type de donnes. Il peut contenir : Ladresse dune variable simple de ce type, Ladresse dune composante dun tableau de ce type. 2- Les oprateurs de base Lors du travail avec des pointeurs, nous avons besoin : Dun oprateur 'Adresse de' : & Dun oprateur 'contenu de' : * a)-Loprateur 'adresse de' : & &< nom variable> : b)- Loprateur 'contenu de' : * *< nom pointeur > : c)- Dclaration dun pointeur : nom pointeur : Pointeur sur type Dclare un pointeur <nom pointeur> qui peut recevoir des adresses de variables. Remarque Les pointeurs et les noms de variables ont le mme rle: Ils donnent accs un emplacement dans la mmoire interne de l'ordinateur. Il faut quand mme bien faire la diffrence: 45 dsigne le contenu de ladresse rfrence par le pointeur <nom pointeur> . fournit ladresse de la variable < nom variable>. pour obtenir ladresse dune variable. pour accder au contenu dune adresse.

Dune syntaxe de dclaration pour pouvoir dclarer un pointeur.

Un pointeur est une variable qui peut 'pointer' sur diffrentes adresses. Le nom d'une variable reste toujours li la mme adresse. PNUM : pointeur sur entier PNUM est un pointeur sur entier, PNUM peut contenir ladresse dune variable du type entier. *PNUM est de type int,

Exemple :

Exemple1 P : pointeur sur entier A 10 B 50 P 1E00 A 10 1E04

B Aprs les instructions : P &A B *P *P 20 P pointe sur A Le contenu de A est affect B Le contenu de A est mis 20 A 10

50 1E06

P 1E04 1E00

20

1E04

B 50 1E06 Exemple2 Algorithme XX VAR 46

10

u, v : entier pu, pv : pointeur sur entiers DEBUT u3 crire ( "1- u = ", u , "Adresse de u = ", &u) pu &u crire ( "2- *pu = ", *pu , "pu = ", pu) pv &v v *pu crire ( "3- v = ", v , "Adresse de v = ", &v) crire ( "4- *pv = ", *pv , "pv = ", pv) FIN Rsultat : 1234pu u *pu v *pv
2248

= = = =

3 3 3 3

Adresse de u = pu pv u = = Adresse de v =

2248 2248 2246 2246

3
2248

1E04 pv
2246

v 2246

1E02 IIIParamtres dune fonction

1- Passage des paramtres par valeur Algorithme PAR_VALEUR VAR X, Y : entier 47

Procdure PERMUTER (A, B : entier) VAR AIDE : entier DEBUT AIDE A AB B AIDE crire ("Dans PERMUTER : A=" , A , "B= " , B) FIN DEBUT ( P.P ) A 30 B 40 crire ("Avant appel de PERMUTER : X=", X, "Y = " , Y) PERMUTER ( X, Y ) crire ("Aprs appel de PERMUTER : X=", X, "Y = " , Y) FIN Excution : Avant appel de PERMUTER : Dans PERMUTER : A = 40 B = 30 Aprs appel de PERMUTER : X et Y restent changs. Lors de lappel, les valeurs de X et Y sont copies dans les paramtres A et B. PERMUTER change bien le contenu des variables locales A et B, mais les valeurs de X et Y restent les mmes. Pour changer la valeur dune variable de la fonction appelante, nous allons procder comme suit : 48 X = 30 Y = 40 X = 30 Y = 40

La fonction appelante doit fournir ladresse de la variable et La fonction appele doit dclarer le paramtre comme pointeur. 2- Passage des paramtres par adresse Algorithme PAR_ADRESSE VAR X, Y : entier Procdure PERMUTER (A, B : pointeur sur entier) VAR AIDE : entier DEBUT AIDE *A *A *B *B AIDE crire ("Dans PERMUTER : A=" , *A , "B= " , *B) FIN DEBUT ( P.P ) A 30 B 40 crire ("Avant appel de PERMUTER : X=", X, "Y = " , Y) PERMUTER (&X, &Y) crire ("Aprs appel de PERMUTER : X=", X, "Y = " , Y) FIN Excution : Avant appel de PERMUTER : Dans PERMUTER : A = 40 B = 30 Aprs appel de PERMUTER : X = 40 Y = 30 49 X = 30 Y = 40

Lors de lappel, les adresse de X et Y sont copies dans les pointeurs A et B. PERMUTER change ensuite le contenu des adresses indiques par les pointeurs A et B. Remarque Par dfaut lorsque lon dclare un pointeur, on ne sait pas sur quoi il pointe. Comme toute variable, il faut linitialiser. On peut dire quun pointeur ne pointe sur rien en lui affectant la valeur NULL i : entier p1, p2 : pointeur sur entier p1 &i p2 NULL IVAllocation dynamique de mmoire Pour rserver lespace mmoire pour un tableau ou une variable quelconque, on utilise souvent une opration dallocation statique qui est effectu au dbut dun programme (section variables), cette manire de rservation prsente linconvnient que lespace rserv doit tre connu lavance (constant) Exemple 12A, B : entier C : rel Type TAB : Tableau [1..50] : dentier VAR T : TAB A linverse lallocation dynamique permet de rserver un espace mmoire de taille variable en milieu dexcution dun programme ce moment, on ne peut pas utiliser les noms pour accder cette zone mmoire, on utilisera par suite les pointeurs. On dispose deux primitives ALLOUER et LIBERER . La fonction ALLOUER permet de rserver un ensemble de cases mmoires et envoyer ladresse de dbut de cette zone. PTR ALLOUER (N) N : nombre doctet rserver. 50

Une fois on na plus besoin de cette zone mmoire, on peut librer avec : LIBERER (PTR) Exemple i , N : entier P : pointeur sur entier crire ("Donner le nombre de cases rserver :") Lire(N) P ALLOUER (N * taille (entier)) Pour i de 1 N *(P + i) 0

51

CHAPITRE 9: Les enregistrements

I-

Notion denregistrements Les variables que nous avons jusquau prsent utilises ne se constituent que dun seul

type de donnes (Entier, Rel, Caractre, etc.). Les tableaux constituent une extension puisqu nous y dclarons une variable compose de plusieurs lments de mme type. Un enregistrement (ou structure en C) permet de rassembler un ensemble dlment de types diffrents sous un nom unique. On dfinit ainsi un type compos. A titre exemple, une date, une adresse ou nombre complexe peuvent tre considrs comme des enregistrements. IISyntaxe : Type Nom_Enreg = Enregistrement Champ1 : type1 Champ2 : type2 Champ3 : type3 . . Champ n : type n Fin enregistrement Exemple : 1- Dclarer un enregistrement qui permet didentifier une adresse Dclaration des variables de type enregistrement

52

TYPE Adresse = Enregistrement Rue : chane Ville : chane cp : entier Fin enregistrement VAR AD: Adresse 2- Dclarer un enregistrement qui permet didentifier un tudiant TYPE Etudiant = Enregistrement NI : entier Nom : chane[30] Prnom : chane[30] Adresse : chane D_N : chane Moy : rel Fin enregistrement VAR ET : Etudiant Les champs peuvent des variables ordinaires, des tableaux, des pointeurs ou autres structures. IIIManipulation des variables de type enregistrement

Les enregistrements ne peuvent pas tre rfrencs globalement dans une instruction car ils sont composs dlments de type diffrents. Par contre, il est possible de faire rfrence chaque lment dun enregistrement. Pour cela, il est ncessaire de prciser le nom (identificateur) de lenregistrement, suivi dun suffixe indiquant lidentificateur du champ concern. Les deux identificateurs sont spars par un point.

53

Exemple : ET. NI 1249200 affecte la valeur 1249200 au champ NI de lenregistrement ET Ecrire ("Le nom de ltudiant : ", ET. Nom ) affiche le champ Nom de lenregistrement ET lire (ET. Moy ) lit un rel qui sera affect au champ Moy de lenregistrement ET Remarque : 1-Il est possible dutiliser loprateur daffectation entre deux enregistrements de mme type comme dans lexemple suivant : VAR ET1 , ET2 : Etudiant ET1. NI ET2. NI ET1. Nom ET2. Nom ET1 ET2 ET1. Prnom ET2. Prnom ET1. Adresse ET2. Adresse ET1. D_N ET2. D_N ET1. Moy ET2. Moy 2- On peut effectuer une comparaison entre 2 enregistrements de mme type comme dans lexemple suivants : si (ET1 = ET2) alors Tantque (ET1 ET2) Faire IVExemple : TYPE Point = Enregistrement Nom : Caractre x , y : entier Fin enregistrement 54 Tableaux denregistrement

TAB : Tableau [ 1..50] de Point VAR Courbe : TAB La structure point pourrait, par exemple, servir reprsenter un point dun plan, point qui serait dfini par son nom et ses coordonnes. La structure courbe reprsente un ensemble de 50 points. Courbe[i].nom : Reprsente le nom du point du rang i du tableau courbe. N.B : courbe.nom[i] na pas de sens Courbe[i].x dsigne la valeur du champ x de llment de rang i du tableau courbe. Courbe[4] Reprsente la structure de type point correspondant au 4me lment du tableau courbe. VExemple : TYPE Date = Enregistrement jour : entier mois : entier anne : entier Fin enregistrement Etudiant = Enregistrement NI : entier Nom : chane[30] Prnom : chane[30] Adresse : chane D_N : Date Moy : rel Fin enregistrement VAR ET : Etudiant 55 Structures comportant dautres Structures

ET. D_N.anne Reprsente lanne de naissance correspondant lenregistrement ET. ET.D_N Reprsente la date de naissance correspondant la structure ET. VIExemple : TYPE Etudiant = Enregistrement NI : entier Nom : chane[30] Prnom : chane[30] Adresse : chane D_N : chane Moy : rel Fin enregistrement VAR ET : Etudiant P1 : Pointeur sur Etudiant P1 est un pointeur vers un enregistrement de type Etudiant. Pour accder un lment de lenregistrement en utilisant le pointeur, on utilise la notation suivante : (*Nom_de_la_variable).membre O Nom_de_la_variable membre P1 &ET (*P1).NI Exercice 1 Dfinir le type dun nombre complexe crit sous la forme algbrique. Ecrire une fonction qui renvoie la somme de deux nombres complexes. 56 ou P1 NI Ecrire (P1 Nom) Les pointeurs sur structures et accs aux donnes

Ecrire ((*P1).Nom) ou

Ecrire une fonction qui renvoie le produit de deux nombres complexe Ecrire une fonction qui renvoie le module dun nombre complexe. Ecrire le programme principal. Algorithme CALCUL TYPE Complexe = Enregistrement Reel : Rel Imag : rel Fin enregistrement VAR C1 , C2, SOM, PROD : Complexe FONCTION SOMME ( C1, C2 : Complexe ) : Complexe VAR S : Complexe Dbut S.Reel C1.Reel + C2.Reel S.Imag C1. Imag + C2. Imag SOMME S FIN FONCTION PRODUIT ( C1, C2 : Complexe ) : Complexe VAR P : Complexe Dbut P.Reel (C1.Reel* C2.Reel) (C1. Imag * C2. Imag) P.Imag (C1.Reel* C2.Imag) (C1. Imag * C2. Reel) PRODUIT P FIN DEBUT Ecrire ("Partie relle du premier nombre : " ) Lire (C1.Reel) Ecrire ("Partie imaginaire du premier nombre : " ) Lire (C1.Imag) Ecrire ("Partie relle du deuxime nombre : " ) Lire (C2.Reel) Ecrire ("Partie imaginaire du premier nombre : " ) Lire (C2.Imag) SOM SOMME ( C1,C2 ) Ecrire ("Somme = ", SOM.Reel , "+" , SOM.Imag , "i" ) PROD PRODUIT ( C1,C2 ) Ecrire ("Produit = ", PROD.Reel , "+" , PROD.Imag , "i" ) FIN

57

Exercice 2 Dfinir un enregistrement qui permet didentifier un tudiant (NI, Nom, Prnom et date de naissance) Ecrire une procdure SAISIE qui permet de saisir les informations de N tudiants. Ecrire une procdure RECHERCHE qui permet de chercher et dafficher les information concernant un tudiant donn. Ecrire le programme principal. TYPE Date = Enregistrement jour : entier mois : entier anne : entier Fin enregistrement Etudiant = Enregistrement NI : entier Nom : chane[30] Prnom : chane[30] D_N : Date Fin enregistrement TAB : Tableau [1..50] de Etudiant VAR ET : TAB N : entier PROCEDURE SAISIE (Var T : TAB, N : entier) VAR i : entier Dbut Pour i de 1 N Faire Ecrire ("Etudiant N : " , i ) Ecrire ("Donner le numro dinscription : " ) Lire (T[i].NI) Ecrire ("Donner le nom : " ) Lire (T[i].Nom) Ecrire ("Donner le Prnom : " ) Lire (T[i].Prnom) Ecrire ("Donner la date de naissance : " ) Lire (T[i].D_N.jour, T[i].D_N.mois, T[i].D_N.anne) FinPour Fin PROCEDURE RECHERCHE (T : TAB, N : entier) VAR i, num , rech: entier Dbut 58

Ecrire ("Donner un numro " ) Lire (num) i1 rech 0 Tant que (i N et rech = 0) faire Si ( T[i].NI = num) alors rech 1 Sinon ii+1 Finsi FinTantque Si (rech = 1) alors Ecrire("Numro dinscription : ",T[i].NI ) Ecrire ("Nom : ",T[i].Nom) Ecrire ("Prnom : ",T[i].Prnom) Ecrire ("Date de naissance : ",T[i].D_N.jour, "/", T[i].D_N.mois, "/" , T[i].D_N.anne)) Sinon Ecrire ("Etudiant inexistant") Finsi Fin DEBUT Rpter Ecrire("Donner le nombre dtudiant :") Lire(N) Jusqu (N>1 et N<=20) SAISIE (ET, N) RECHERCHE (ET, N) FIN

59

Chapitre 10: Les listes chanes


Introduction Une liste chane est une suite dun nombre variable dobjets de mme type appels lments de la liste. Elle est enregistre sur un support adressable et il existe une action simple permettant de passer dun lment llment suivant sil existe. La liste chane est une application typique de lallocation dynamique de mmoire. Cest pourquoi il est judicieux davoir des connaissances sur les pointeurs, les structures et lallocation dynamique de mmoire pour aborder aux listes chanes. ILes listes simplement chanes

1- Dfinition Une liste simplement chane est une suite dun nombre variable dobjets de mme type et chaque lment, sauf le dernier, pointe vers son successeur. 2- Description 1- chaque lment dune liste simplement chane est de type compos par : Une partie information(s) Une partie pointeur Exemple Elment = enregistrement num : entier suivant : pointeur sur lment Fin enregistrement 106 2- Dfinir un pointeur de tte qui permet daccder au premier lment de la liste Tte : pointeur sur lment 3Disposer des primitives dallocation et de libration pour crer ou supprimer des lments. 60

Cration : ALLOUER Suppression : LIBERER

Rechercher dans la zone dynamique le premier emplacement capable de contenir un objet de type considr. Rserver cet emplacement. Donner la variable pointeur la valeur gale ladresse mmoire de cet emplacement. 4- De plus, il faut un moyen pour reprer le dernier lment de la liste. Cet lment nayant pas de successeur, sa subdivision lien devra avoir la valeur NULL indiquant ladresse du pointage. 100 L 50 200 120 NULL

Environnement type dune LSC TYPE Elment = enregistrement num : entier suivant : pointeur sur lment Fin enregistrement LISTE : pointeur sur lment VAR L : LISTE 3- Manipulation des LSC 1- Cration dune liste vide 2- Ajout dun lment Ajout en tte Ajout en queue 3- Affichage 4- Suppression dun lment Suppression en tte Suppression en queue Suppression dun lment donn. 61

5- Taille dune liste 6- Tri 7- Fusion 8- Eclatement 9- 3-1- Cration dune liste vide Procdure CREATION_LISTE (VAR L : LISTE) DEBUT L NULL FIN 3-2- Ajout dun lment a) Ajout en tte Fonction AJOUT_TETE (L : LISTE) : LISTE VAR P : LISTE x: entier DEBUT Ecrire ("Donner un entier : " ) Lire (x) P ALLOUER (taille (Elment)) ou /* ALLOUER (P)*/ P num x P suivant L L P AJOUT_TETE L FIN 1- Liste vide x = 120 P NULL x = 120 50 200 NULL 120 L NULL

2- Liste contient dj des lments P 120 L

62

b) Ajout en queue Fonction AJOUT_QUEUE (L : LISTE) : LISTE VAR P, P1 : LISTE x : entier DEBUT Ecrire ("Donner un entier : " ) Lire (x) Si (L = NULL) alors P ALLOUER (taille (Elment)) P num x P suivant NULL L P Si non P L Tant que ( P suivant NULL) faire P P suivant Fin Tant que P1 ALLOUER (taille (Elment)) ou /* ALLOUER (P1)*/ P1 num x P suivant P1 P1 suivant NULL Fin Si AJOUT_QUEUE L FIN 1- Liste vide x = 120 P NULL x = 120 200 NULL 120 NULL 50 120 L NULL L = NULL

2- Liste contient dj des lments 120 L P P1

63

3-3- Affichage Version itrative Procdure AFFICHE_ITER (L : LISTE) VAR P : LISTE DEBUT P L Si (P = NULL) alors Ecrire ("Liste vide " ) Si non Tant que ( P NULL) faire Ecrire (P num) P P suivant Fin Tant que Fin Si FIN Version rcursive Procdure AFFICHE_REC (L : LISTE) DEBUT Si (L NULL) alors Ecrire (P num) AFFICHE_REC (L suivant) Fin Tant que Fin Si FIN 3-4- Suppression dun lment a) Suppression en tte Fonction SUPP_TETE (L : LISTE) : LISTE VAR P, Q : LISTE DEBUT PL QL Q Q suivant LIBERER (P) SUPP_TETE Q FIN 120 50 L 64

200

120

NULL

P Q

b) Suppression en queue Fonction SUPP_QUEUE (L : LISTE) : LISTE VAR P, Q : LISTE DEBUT QL Si (Q suivant = NULL) alors LIBERER (Q) Q NULL Si non P L Tant que ( (P suivant) suivant NULL) faire P P suivant Fin Tant que LIBERER (P suivant) P suivant NULL Fin Si SUPP_QUEUE Q FIN 200 120 50 L

NULL

120 NULL

c) Suppression dun lment donn Fonction SUPP_ELEMENT (L : LISTE) : LISTE VAR P, Q, R : LISTE x : entier trouve : boolen DEBUT Ecrire ("Donner llment supprimer : " ) Lire (x) P L R L trouve faux Si (R num = x) alors R R suivant LIBERER (P) 65

Si non Tant que ( P suivant NULL et trouve = faux) faire Si ((P suivant) num = x) alors trouve vrai sinon P P suivant Fin Si Fin Tant que Si ( trouve = vrai ) alors Q P suivant P suivant Q suivant LIBERER (Q) Si Non Ecrire ("lment inexistant " ) Fin Si Fin Si SUPP_ELEMENT R FIN 3-5- Taille dune liste Fonction TAILLE_L (L : LISTE) : entier VAR T : entier DEBUT Si ( L = NULL ) alors TAILLE_L 0 Si Non T 0 Tant que ( L NULL) faire TT+1 L L suivant Fin Tant Que TAILLE_L T Fin Si FIN 3-6- Tri dune liste Fonction TRI_L (L : LISTE) : LISTE VAR P, Q: LISTE x : entier DEBUT P L Tant que ( P NULL) faire Q P suivant Tant que ( Q NULL) faire Si (P num > Q num ) alors 66

x P num P num Q num Q num x Fin Si Q Q suivant Fin Tant Que P P suivant Fin Tant Que TRI_L T FIN IILes listes doublement chanes Dans les listes vues prcdemment le parcours ne peut se faire que dans un seul sens : de

la tte vers la queue. Pour remdier cette dissymtrie de lopration et permettre un parcours aussi bien dans un sens que dans lautre, on peut construire des listes doublement chanes ( ou listes bilatres) 1- Dfinition Une liste bilatre comporte deux pointeurs quon appelle avant et aprs . Si un lment un prdcesseur, il est dsign par le pointeur avant , sil a un successeur, il est dsign par le pointeur aprs . Cette structure permet de parcourir la liste dans les 2 sens et dacclrer la recherche dun lment. Avant NULL E1 aprs E2 E3 E4 NULL

Tte Si Tte = Queue = NULL La liste est vide Si Tte = Queue NULL La liste un seul lment

Queue

67

2- Environnement type dune LB TYPE Elment = enregistrement avant : pointeur sur lment num : entier aprs : pointeur sur lment Fin enregistrement LB = enregistrement tte = pointeur sur lment queue = pointeur sur lment Fin enregistrement LISTE = pointeur sur lment VAR L : LB 3- Manipulation des LB 3-1- Cration dune liste bilatre vide Procdure CREATION_LB (VAR L : LISTE) DEBUT L.tte NULL L.queue NULL FIN 3-2- Cration dune liste bilatre a) Ajout gauche Fonction AJOUT_G ( L : LB ; n : entier) : LB VAR P, Q : LISTE x, i: entier DEBUT /* Cration du 1er lment de la liste*/ ALLOUER (P) Ecrire ("Donner un entier : " ) Lire (P num) P avant L.tte P aprs L.queue L.tte P L.queue P /* Insertion du reste des lments de la LB*/ Pour i de 2 n Faire Q L.tte ALLOUER (P) Lire (P num) P avant NULL 68

Q avant P P aprs Q L.tte P Fin Pour AJOUT_G L FIN Autre mthode Fonction AJOUT_G ( L : LB ; n : entier) : LB VAR P : LISTE x, i: entier DEBUT /* Cration du 1er lment de la liste*/ ALLOUER (P) Ecrire ("Donner un entier : " ) Lire (P num) P avant L.tte P aprs L.queue L.tte P L.queue P /* Insertion du reste des lments de la LB*/ Pour i de 2 n Faire ALLOUER (P) Lire (P num) P avant NULL (L.tte) avant P P aprs L.tte L.tte P Fin Pour AJOUT_G L FIN b) Ajout droite Fonction AJOUT_D ( L : LB ; n : entier) : LB VAR P : LISTE x, i: entier DEBUT /* Cration du 1er lment de la liste*/ ALLOUER (P) Ecrire ("Donner un entier : " ) Lire (P num) P avant L.tte P aprs L.queue L.tte P L.queue P /* Insertion du reste des lments de la LB*/ Pour i de 2 n Faire 69

ALLOUER (P) Lire (P num) P aprs NULL (L.queue) aprs P P avant L.queue L. queue P Fin Pour AJOUT_D L FIN 3-3- Affichage Procdure AFFICHE (L : LB) VAR P : LISTE DEBUT Si (L.tte = NULL) alors Ecrire ("Liste vide " ) Si non Si (L.tte = L.queue) alors Ecrire ("La liste un seul lment : " , L.tte num) Si non Ecrire ("Parcours de gauche vers la droite" ) P L.tte /* P L.queue : de drote gauche*/ Tant que ( P NULL) faire Ecrire (P num) P P aprs /* P P avant */ Fin Tant que Fin Si Fin Si FIN 3-4- Suppression dun lment a) Suppression en tte Fonction SUPP_TETE (L : LB) : LB VAR P : LISTE DEBUT Si ( L.tte = NULL) alors Ecrire ("Liste vide " ) Si non Si (L.tte = L.queue) alors LIBERER (L.tte) L.tte NULL L.queue NULL Si Non 70

P L.tte P aprs avant NULL L.tte P aprs LIBERER (P) Fin Si Fin Si SUPP_TETE L FIN b) Suppression en queue Fonction SUPP_QUEUE (L : LB) : LB VAR P : LISTE DEBUT Si ( L.tte = NULL) alors Ecrire ("Liste vide " ) Si non Si (L.tte = L.queue) alors LIBERER (L.tte) L.tte NULL L.queue NULL Si Non P L.queue P avant aprs NULL L. queue P avant LIBERER (P) Fin Si Fin Si SUPP_TETE L FIN c) Suppression dun lment donn Fonction SUPP_ELEMENT (L : LB) : LB VAR P : LISTE x : entier trouve : boolen DEBUT Ecrire ("Donner llment supprimer : " ) Lire (x) P L.tte trouve faux Tant que ( P aprs NULL et trouve = faux) faire Si ((P num) = x) alors trouve vrai sinon P P aprs 71

Fin Si Fin Tant que Si ( trouve = vrai ) alors (P avant) aprs P aprs (P aprs) avant P avant LIBERER (P) Si Non Ecrire ("lment inexistant " ) Fin Si SUPP_ELEMENT LR FIN

72

Chapitre 11 : Les Arbres


Introduction Il est souvent ncessaire d'ordonner les lments d'un ensemble dans le but damliorer la rapidit d'une recherche. Or le maintien d'un ordre entre les lments d'un tableau ou d'une liste est relativement coteux. Pour un tableau par exemple l'insertion d'un lment ncessite de dterminer sa place, en parcourant le tableau depuis le dbut (k comparaisons) puis de dcaler les (n-k) lments successeurs pour mnager une place. Donc une complexit en O(n) avec n le nombre d'lments du tableau. Les arbres de recherche sont des structures de donnes qui permettent de rduire la complexit en temps mais pas la complexit de la programmation.

Exemples dorganisation : Organisation des fichiers dans les systmes dexploitation Organisation dun fichier sous forme de table de matire Organisation dun fichier sous forme dun questionnaire Arbre gnalogique

L'intrt de cette organisation est de laisser l'utilisateur le soin de regrouper les fichiers sa convenance tout en maintenant une structure hirarchique. ILes arbres gnraux 1. Dfinitions Arbre : un arbre est une structure de donnes compose dun ensemble de nuds. Chaque nud contient une information et des pointeurs vers dautres nuds (dautres sous-arbres).
Exemple : arbre gnalogique

73

Niveau 1 Ali

Sarra

Slim

Zeineb

Yahya

Amina

Remarques : La structure vide est un arbre Chaque nud possde un certain nombre de fils Chaque fils a un pre unique Dfinitions :
Racine : Il existe un unique nud de niveau 1 autre qui nest point par aucun autre nud : cest la racine de larbre. Le nud Ali est la racine de larbre gnalogique de lexemple prcdant. Feuilles : Ce sont des nuds qui ne possdent aucun fils (nuds sans sous arbres). Niveau : Le niveau de la racine est gal 1. Le niveau dun nud autre que la racine est gal au niveau de son pre + 1. Taille : On appelle taille dun arbre le nombre total de nuds de cet arbre. La taille de larbre gnalogique de lexemple est gale 6. Hauteur /Profondeur dun arbre : Cest le niveau maximum atteint par la branche la plus longue ; sur lexemple prcdant, la hauteur est gale 3. La hauteur de larbre vide est gale 0. Arbre binaire : Cest un arbre tel que chaque nud a au plus 2 fils : un fils droit et un fils gauche. Degr dun nud : On appelle degr dun nud le nombre de fils de ce nud. Le degr dun nud dun arbre binaire est gal 0,1 ou 2. Degr dun arbre : Cest le degr maximal atteint par un nud. Le degr dun arbre binaire est gal 2. Si le degr dun arbre est gal N, larbre est dit Naire. Arbre binaire complet : Cest un arbre binaire de taille gale 2h 1, tel que h est la hauteur de larbre. Voici un exemple :

h=3 Taille = 231= 7 noeuds

74

Arbre binaire quilibr : Un arbre binaire est quilibr si pour chaque nud, les hauteurs des sous arbres gauche et droit diffrent dau plus de 1. Larbre cidessous est quilibr.

2. Exemples dapplication
Expression arithmtique

On peut utiliser un arbre pour reprsenter une expression arithmtique ayant des oprateurs binaires : (14 + (8/2)) (5 - 3) Larbre binaire correspondant est :
+ 14 8 / 2 5 3

Arbre gnalogique Structure dun chapitre (sections, paragraphes) Tous les problmes de classification IILes arbres binaires

Un arbre binaire est un arbre tel que chaque nud a au plus 2 fils: un fils droit et un fils gauche.
Il sagit de mmoriser les arbres et leurs relations de dpendances pre fils. La mmorisation se fait par allocation dynamique.

75

1. Dclaration Nud = enregistrement Op : caractre gauche : pointeur sur noeud droite : pointeur sur noeud Fin enregistrement Arbre = pointeur sur nud 2. Fonction de cration dun nud fonction CreerNoeud(operateur : caractre, SAG: arbre, SAD: arbre) : arbre var nouv : arbre; debut nouv Allouer(taille(nud)) nouvgauche SAG nouvdroite SAD CreerNoeud nouv Fin 3. Fonction de cration dune feuille Fonction CreerFeuille(operand: caractre) : arbre Debut CreerFeuille Crer(operande, NULL, NULL) fin
Exemple : Cration de larbre binaire reprsentant lexpression arithmique

Fonction CreerArbre():arbre Debut creerArbre CreerNoeud("", CreerNoeud("+", CreerFeuille(14), CreerNoeud("/", CreerFeuille(8), CreerFeuille(2))), CreeNoeud("-", CreerFeuille(5),CreerFeuille(3))) ; fin

76

4. Parcours dun arbre binaire Un algorithme de parcours dun arbre est un procd permettant daccder chaque nud de larbre. Un certain traitement est effectu pour chaque nud (test, criture , comptage, etc.), mais le parcours est indpendant de cette action. On distingue deux catgories de parcours : En profondeur : On explore branche par branche En Largeur : On explore niveau par niveau
4.1 Les diffrentes mthodes de parcours en profondeur dun arbre

Dans un parcours en profondeur, le principe est le suivant : on explore une branche le plus profondment possible, ensuite on revient en arrire pour essayer un autre chemin. Il ya six types de parcours possibles. Soit les notations suivantes : P : Pre SAG : Sous arbre gauche SAD : Sous arbre droit Nous ne considrons dans ce cours que le parcours droite-gauche. Les autres parcours sen dduisent facilement par symtrie.
GaucheDroite Prfix Infix Postfix P.SAG.SAD SAG.P.SAD SAG.SAD.P DroiteGauche P.SAD.SAG SAD.P.SAG SAD.SAG.P SAG P SAD

Fig 1. Les six types de parcours dun arbre binaire Le Parcours Prfix La racine est traite en premier 1 Traiter la racine 2 Parcours prfix du SAG 3 Parcours prfix du SAD Exemple : expression arithmtique + 14 8 / 2 5 3

Laffichage correspondant un parcours prfix : , +, 14, /, 8, 2, -, 5, 3 Loprateur ici est trait avant les oprandes. Procdure Prefixe(racine : arbre) debut si( racine # NULL) alors 77

Ecrire(racineop) Prefixe(racinegauche) Prefixe(racinedroite) finsi fin


Excution Prefixe() printf() Prefixe(+) printf(+) Prefixe(14) printf(14) Prefixe(NULL) Prefixe(NULL) Prefixe(/) printf(/) Prefixe(8) printf(8) Prefixe(NULL) Prefixe(NULL) Prefixe(2) printf(2) Prefixe(NULL) Prefixe(NULL) Prefixe(-) printf(-) Prefixe(5) printf(5) Prefixe(NULL) Prefixe(NULL) Prefixe(3) printf(3) Prefixe(NULL) Prefixe(NULL)

78

Le Parcours Infix La racine est traite entre les deux appels rcursifs 1 2 3 Parcours Infix du SAG Traiter la racine Parcours Infix du SAD Exemple : expression arithmtique

Laffichage correspondant un parcours infix de larbre donn prcdemment: 14, +, 8, /, 2, , 5, -, 3 Algorithme Procdure Infixe(racine : arbre) debut si( racine # NULL) alors Infixe(racinegauche) Ecrire(racineop) Infixe(racinedroite) finsi fin
Le Parcours Postfix La racine est traite aprs les deux appels rcursifs 1 2 3 Parcours Infix du SAG Parcours Infix du SAD Traiter la racine

Exemple : expression arithmtique

Laffichage correspondant un parcours postfix de larbre donn prcdemment: 14, 8, 2, /, +, 5, 3, -,

79

Algorithme Procdure Postfixe(racine : arbre) debut si( racine # NULL) alors Postfixe(racinegauche) Postfixe(racinedroite) Ecrire(racineop) finsi fin

4.2 Le parcours en largeur dun arbre Cette mthode consiste visiter larbre tage par tage. Pour notre exemple dexpression arithmtique le parcours donne laffichage suivant : , +, -, 14, /, 5, 3, 8, 2, Ce parcours ncessite lutilisation dune file dattente qui contient initialement la racine. A chaque tape on extrait llment en tte de file et on le remplace par ses successeurs droit et gauche en queue de la file. On effectue ce traitement jusqu ce que la file soit vide. Remarque : Par nature mme de la structure arborescente, on utilise plutt le parcours en profondeur. Ds fois, le type de rsultat ncessite un parcours en largeur, par exemple pour dessiner un arbre. La file dattente utilise est une liste chane (linaire) dont les lments sont des pointeurs sur un nud de larbre. Type Cellule = enregistrement { Elt : arbre Suiv : pointeur sur cellule; } File : pointeur sur cellule Le parcours en largeur scrit alors : Procdure EnLargeur(racine : arbre, F : file) Var tmp : arbre Debut si(racine # NULL) Enfiler(F,racine) Tant que (FileVide(F))= faux) faire 80

Defiler(F, temp) ; Ecrire(tmpop) si(tmpgauche #NULL) Enfiler(F,tmpgauche) Finsi si(tmpdroite #NULL) ; Enfiler(F,tmpdroite) Finsi Fin Tantque Fin 5. Primitives dun arbre binaire 5.1 Test dun arbre vide La fonction ArbreVide retourne 1 si larbre est vide (de taille =0), 0 sinon Fonction ArbreVide(racine : arbre) : entier { ArbreVide racine==NULL ; } 5.2 Calcul de la taille dun arbre La fonction TailleArbre parcourt rcursivement larbre et retourne sa taille ; c'est--dire le nombre de ses nuds. Fonction TailleArbre(racine : arbre) : entier Debut Si ArbreVide(racine) = 1 alors TailleArbre 0 ; sinon TailleArbre 1 + TailleArbre(racinedroite) + TailleArbre(racinegauche) Finsi Fin 5.3 Recherche dun nud de valeur donne La fonction Recherche recherche rcursivement un nud de valeur donne en commenant par la racine. La fonction retourne un pointeur sur le nud si la valeur recherche existe, sinon elle retourne NULL.

81

Fonction Recherche(racine : arbre, val : caractre) : arbre Var ptr_trouv : arbre Debut si (racine=NULL) ptr_trouvNULL sinon si (racineop=val) ptr_trouv racine sinon ptr_trouvRechercher(racinegauche,val) ; si(Non(ptr_trouv)) alors ptr_trouvRechercher(racinedroite,val) ; finsi finsi Recherche ptr_trouve Fin

82