les secrets de la programmation

Upload: houssem-ghammam

Post on 16-Oct-2015

132 views

Category:

Documents


3 download

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