CH 3 Algorithm e
CH 3 Algorithm e
2021-2022
Sommaire
Etapes de résolution d’un
problème
Concepts de base du langage
Structure d’un algorithme
Les sous-algorithmes
Les structures de données
Le langage C
Bibliographie
2
Sommaire
Objectifs
Connaitre les concepts de base du
langage algorithmique
Savoir écrire un algorithme
Savoir écrire un programme
Langage Assembleur
LDA C
MUL D
ADD B
STO A
4
I. Les étapes de la programmation
1973-1980 : L’âge de la structure 1990 et +: L’âge des objets
Langage évolué ou structuré LO ou LOO
Temps de programmation Baisse du temps de
considérable et problème de programmation et réutilisation de
réutilisation. logiciels.
Langages : Pascal, Fortran, Langages C++, Java, Python
python, C Exemple : A B + C x D
Exemple : A B + C x D En C++
En C class Calcul {
int void main() { private int A, B, C, D;
int A, B, C, D; int void main() {
scanf("%d%d%d",&B,&C,&D); scanf("%d%d%d",&B,&C,&D);
A=B+C*D A=B+C*D
printf("%d",A) printf("%d",A)
} }
}
6
I. Les étapes de la programmation
Exemple d’algorithme
Soient un point d’eau et de 2
bidons : B de 5 litres et b de 3
litres.
On voudrait obtenir exactement 4
litres d’eau dans le bidon B.
Opérations permises :
1. Remplir un bidon : RB
2. Vider un bidon : VB
3. Transvaser le contenu d’un bidon
à un autre (arrêt quand un bidon
est vide ou l’autre plein) : TB.
8
I. Les étapes de la programmation
Exercice Présenter le résultat sous la
Soient un point d’eau et de 3 forme suivante
bidons : B2 de 3 litres, B3 de 7
Solution 1 :
litres et B7 de 10 litres.
N° Opérations (B, b)
On voudrait obtenir exactement 5 1
litres d’eau. 2
Opérations permises : 3
4
1. Remplir un bidon 5
2. Vider un bidon 6
3. Transvaser le contenu d’un bidon à 7
8
un autre (arrêt quand un bidon est
vide ou l’autre plein).
10
I. Les étapes de la programmation
Etape 2 : Recherche d’un
1.3. Résolution d’un problème
algorithme
en 4 étapes : Rechercher une méthode de
Etape 1 : Etude solution
Il faut formuler le problème à Traduire cette méthode en une
résoudre en des termes clairs et suite d’actions à effectuer pour
précis (pas d’ambiguïté). résoudre le problème :
Exemple : Rechercher le maximum on obtient un algorithme.
de 3 nombres entier a, b, c. A un problème donné peut
correspondre plusieurs
algorithmes.
11
12
I. Les étapes de la programmation
ALGORITHME maximum1 ALGORITHME maximum2
VAR a, b, c, max : ENTIER VAR a,b,c, max : ENTIER
DEBUT DEBUT
ECRIRE('Entrer 3 nombres entiers : ‘’) ECRIRE('Entrer 3 nombres entiers : ')
LIRE(a, b, c) LIRE(a, b, c)
SI(a > b) ALORS SI(a > b) ALORS
SI(a > c) ALORS max a
max a SINON
SINON max b
max c SI(c > max) ALORS
SINON SI (b > c) ALORS max c
max b ECRIRE('Maximun de', a, b, c, ' = ', max)
SINON FIN
max c
ECRIRE('Maximun de', a, b, c, ' = ', max)
FIN
13
14
I. Les étapes de la programmation
1.5. Etape 4 : Mise au point Compilateur :
Saisir le programme puis le faire Logiciel de traduction qui traduit
exécuter plusieurs fois avec des globalement les textes sources
données différentes. (en langage source) en langage
machine (souvent binaire
Permet de vérifier qu'il résout bien
exécutable par la machine).
le problème posé.
Exemple : C/C++, …
Tout code écrit dans un langage
de programmation doit être Avantage : Rapidité
traduit pour être compris par la Inconvénient : Pas de portabilité
machine.
C’est le rôle des compilateurs et
interpréteurs .
15
16
I. Les étapes de la programmation
1.6. TP : éditeur de Dev C++ Faire l’édition de lien : Menu
Execute/Run
Créer un dossier de travail
Exécuter le programme
Lancer Dev C++
Vérifier les fichiers générés
Menu File/New/Source File
maxi.c, maxi.obj, maxi.exe
Saisir le programme maximum
Le sauvegarder sous le nom
maxi.c dans le dossier de travail
Faire la compilation : Menu
Execute/Compile
Corriger les erreurs éventuelles
17
18
II. Concepts de base du langage
2.2 Qualités d’un algorithme Validité ou justesse:
Qualité d'écriture : Le résultat doit répondre au
problème posé.
Il doit être structuré, indenté,
modulaire, avec des Remarque : un jeu d'essais ne
commentaires pertinents, etc. prouve jamais qu'un programme
est correct.
Il doit être lisible et maintenable ;
Il peut seulement prouver qu'il est
Terminaison : faux ;
Le résultat doit être atteint en un
Performance :
nombre fini d'étapes,
Etude du coût (complexité) en
Il ne faut donc pas de boucles
temps et en mémoire.
infinies,
Coût le plus faible possible
Il faut étudier tous les cas
possibles de données, ... ;
19
20
II. Concepts de base du langage
2.4 Codage de l’information Le langage de l’ordinateur :
Le langage humain : Ordinateur : machine électronique
ayant un alphabet limité.
Permet aux hommes de
communiquer entre eux. Il ne peut distinguer que deux
états :
Comporte beaucoup de symboles
(cf. alphabet du langage) le courant passe (1) , le courant le
courant ne passe pas (0).
Bit (BInary digiT) :
plus petite information manipulée
par un ordinateur
21
Lecture du tableau
A : code
= 41 en hexadécimal
= 65 en décimal
= 01000001 en binaire
INP-HB/DFRMI/K. M. BROU Langage algorithmique 22
22
II. Concepts de base du langage
Le code étendu (en hexa)
23
24
II. Concepts de base du langage
Le code ANSI (American National Le code EBCDIC
Standard Institute) Extended Binary Coded Decimal
Code utilisé par le système Interchange Code
d’exploitation Windows ; Utilisé principal par IBM, code 8
Il reprend en grande partie le bits ou 9 bits (1 bit d’imparité).
code ASCII, et propose des Le code UNICODE
extensions différentes selon le Utilisé par Windows 95 et +.
code de page.
Code universel codé sur 16 bits.
Code page 850 :jeu de caractères
But : coder le plus grand nombre
multilingues
possible de symbole en usage
Code page 864 :jeu de caractères dans le monde.
arabe
Permet de coder 65535 caractères
Code page 865 :jeu de caractères différents.
nordique
25
26
II. Concepts de base du langage
Réponse Exercice 1
Réponse Exercice 2
27
Et ET Concaténation &
Ou OU +
Négation NON
28
II. Concepts de base du langage
2.6 Les identificateurs Il doit être expressif, i.e., choisi
Mots choisis par le concepteur de de telle sorte qu’il désigne bien
l’algorithme pour représenter les l’objet qu’il représente.
objets de l’algorithme : Exemple : prixTTC, valeurMax,
deuxPI, _2PI
nom de l’algorithme, nom de
variable, … Contre exemple : 2PI
Constitué d’une suite de Il n’y a pas de distinction entre
caractères alphanumériques minuscule et majuscule.
Le premier caractère est PrixTTC, PRIXTTC, prixttc
désignent le même objet.
obligatoirement une lettre de
l’alphabet ou le caractère de
soulignement.
29
30
II. Concepts de base du langage
2.8. Les nombres
Deux types de nombre : les
entiers et les réels.
Exemples :
125 : entier
3.1459 : réel
15 E-3 (réels, notation
scientifique).
31
32
II. Concepts de base du langage
CONST N = 2 (* objets globaux *)
2.10. Structure d’un
algorithme FONCTION max(D x, y, z :ENTIER) :ENTIER
VAR m: ENTIER
Un algorithme comprend 5 DEBUT
SI (x > y) ALORS
parties : mx
1. Déclaration d’objets globaux SINON
my
(facultatif) SI (z > m) ALORS
2. Déclaration de sous-algorithme mz
(facultatif) max m
FIN
3. Tête de l’algorithme
ALGORITHME maximum
4. Déclaration des objets VAR a, b, c, m : ENTIER
(facultatif) DEBUT
ECRIRE('Entrer 3 nb entiers :' )
5. Corps de l’algorithme : contient
LIRE(a,b,c)
les instructions exécutables m max(a,b,c)
ECRIRE(‘Maximum = ', m)
Exemple : Calcul du maximum de ECRIRE('N =', N)
trois nombres FIN
33
34
III. Partie déclaration
3.1. Déclaration de constante Exemple :
Espace mémoire représenté par ALGORITHME declareConst
un identificateur et utilisé pour CONST Pi = 3.1459
désigner une valeur fixe d’un NbreMois = 12
ensemble donné. Ecole = 'INP-HB'
Omega = 100 * Pi
Cette valeur reste inchangée tout DEBUT
au long de l’exécution de FIN
l’algorithme.
Syntaxe :
CONST identificateur = expression
35
Syntaxe :
TYPE identificateur = nom du type Standard Manufacturé Statique Dynamique
36
III. Partie déclaration
3.3. Les types simples Type caractère (CAR)
Type entier (ENTIER) Ensemble de la table ASCII.
Ensemble des entiers relatifs. Une constante caractère est
délimitée par de simples ou
Opérateurs : opérateurs
double quotes.
arithmétiques et relationnels
Opérateurs : opérateurs de
Type réel (REEL) concaténation et relationnels
Ensemble des nombres réels. Il existe une relation d’ordre dans
Opérateurs : opérateurs la table ASCII.
arithmétiques et relationnels Exemple :
sauf les opérateurs // et %. 'a' < 'b' < 'c' < … 'z'
'a' + 'b' + 'c' donne la chaîne de
caractères 'abc'
37
38
III. Partie déclaration
3.4. Les types manufacturés Deux sortes :
Types construits par le Type énuméré
concepteur de l’algorithme. Type intervalle.
Intérêt
définir de façon très précise le
champ de validité des objets
utilisés.
39
TYPE
Feux = (Orange, Vert, Rouge)
Banque = (BICICI, SIB, SGBCI, BIAO, BHCI, BCEAO)
Jour = (lundi, mardi, mercredi, jeudi, vendredi,
samedi, dimanche)
40
III. Partie déclaration
Type intervalle
Sous-type des types déjà définis.
Opérateurs : ceux du type père.
Syntaxe :
TYPE
Identificateur=borneInférieure..borneSupérieur
Exemple :
TYPE
Chiffre = 0..9
Lettre = 'a'.. 'z'
Boulot = lundi..vendredi
Repos = samedi..dimanche
41
42
III. Partie déclaration
Tableau à une dimension : Syntaxe 2 :
Vecteur TYPE
Adresse d’une variable indicée : Identificateur = TABLEAU[indiceInf..indiceSup] DE type T
VAR
Identificateur2 : Identificateur
adr + (i – IndiceInf)*p
avec :
Chaque élément du tableau est
adr : adresse du premier élément référencé par le nom du tableau
P : nombre de mot occupé par un suivi par un indice.
élément
i : indice d’un élément
indiceInf : indice inférieur
Syntaxe 1 :
VAR
Identificateur : TABLEAU[indiceInf..indiceSup] DE type T
43
44
III. Partie déclaration
Tableau à deux dimensions : Exemple :
Matrice Matrice de 3 lignes et 2 colonnes
Syntaxe 1 : d’éléments de type réels c’est-à-
dire 6 éléments (Colonne 1 : note,
VAR colonne 2 : coefficient).
Identificateur :
TABLEAU[indiceInf1..indiceSup1, VAR
indiceInf2..indiceSup2] DE type T m : TABLEAU[0..2, 1..2] DE REEL
ou
TYPE
Syntaxe 2 : Matrice = TABLEAU[0..2, 1..2] DE REEL
VAR
TYPE m : Matrice
Identificateur =
TABLEAU[indiceInf1..indiceSup1,
indiceInf2..indiceSup2] DE type T
VAR
Identificateur2 : Identificateur
45
46
III. Partie déclaration
3.6. Déclaration de variable Exemple
Définition VAR
dividende, diviseur, quotient, reste : ENTIER
Une variable est un espace
prix_TTC : REEL
mémoire désigné par un J : Jour
identificateur et utilisé pour
désigner une valeur quelconque
d’un ensemble donné. Corps de l’algorithme
Sa valeur peut changer tout au
Partie qui contient les instructions
long de l’exécution de
exécutables de l’algorithme.
l’algorithme.
Affectation
C’est en fait une adresse mémoire
où l’on range une valeur. Lecture/Ecriture
Structures de contrôle
Syntaxe :
Fonction
VAR Cette partie est délimitée par les
Identificateur : type de la variable mots réservés DEBUT et FIN.
INP-HB/DFRMI/K. M. BROU Langage algorithmique 47
47
48
IV. Instructions exécutables
Exemple : Evolution des variables dans la
ALGORITHME affectation
MC
Var Variables i j k b
i, j, k : ENTIER après (1) ? 2 ? ?
b : BOOLEEN après (2) ? 2 3 ?
DEBUT après (3) 5 2 3 ?
j2 (1) après (4) 7 2 3 ?
k3 (2) après (5) 8 2 3 ?
i j + k (3) après (6) 8 2 3 FAUX
i i + j (4) après (7) 8 2 3 ERREUR
i i + 1 (5)
b i = j (6)
bi (7)
FIN
49
50
IV. Instructions exécutables
5.2. Instruction d’écriture Syntaxe 1 :
Ecriture : opération permettant ECRIRE(v1, v2, …, vn)
de véhiculer les données de la MC où les vi sont des variables et/ou
vers l’extérieur des constantes.
Après l’écriture de vn, le curseur
Exemple : écran
reste après vn
Syntaxe 2 :
MC
ECRIRE
Permet au curseur de passer à la
Périphérique de sortie
ligne suivante
51
52
IV. Instructions exécutables
5.3. Instruction de lecture Exemple 1 : lecture d’un nombres
entier
Lecture : opération permettant de ALGORITHME lecture
véhiculer les données de d’un VAR x : ENTIER
DEBUT
périphérique d’entrée vers la MC.
ECRIRE('Entrer un entier : ')
La donnée lue est affectée à une LIRE(x)
variable. ECRIRE(‘valeur lue = ‘, x)
FIN
Exemple : clavier
Exemple 2 : addition de 2
MC
nombres entiers
ALGORITHME lecture
Périphérique d’entrée
VAR x, Y, res : ENTIER
Syntaxe DEBUT
LIRE(v1, v2, …, vn) ECRIRE('Entrer deux entiers : ')
LIRE(x, y)
où les vi sont des variables res x + Y
Les données lues seront affectées ECRIRE(x,' + ‘, y, ' = ', res)
aux vi. FIN
INP-HB/DFRMI/K. M. BROU Langage algorithmique 53
53
54
IV. Instructions exécutables
4.4. Nature séquentielle d’un Bloc
algorithme Ensemble d’instructions
séquentiellement chaînées
Un algorithme se déroule en délimitées par les mots réservés
séquence DEBUT et FIN.
C’est-à-dire que les instructions
sont exécutées l’une après l’autre, DEBUT
sauf contre indication. instruction1
instruction2
Instructions sont …
séquentiellement chaînées : instructionn
FIN
La fin de l’exécution d’une
instruction déclenche l’exécution
de celle qui la suit Remarque :
immédiatement. Si un bloc contient une seule
instruction, on peut omettre
DEBUT et FIN
55
56
IV. Instructions exécutables
4.5. L’alternative Syntaxe 2 : l’alternative
complexe
Ou instruction conditionnelle
SI (condition) ALORS
Elle permet de faire un test
Bloc1
i.e. évaluer une expression SINON
logique et enchaîner vers telle ou Bloc2
telle autre instruction selon la
valeur trouvée.
Syntaxe 1 : l’alternative simple
Condition vérifiée ? FAUX
SI (condition) ALORS
Bloc VRAI
Bloc1 Bloc2
Condition vérifiée ? FAUX
Suite de l’algorithme
INP-HB/DFRMI/K. M. BROU Langage algorithmique 57
57
58
IV. Instructions exécutables
Exemple 3 : maximum de deux
nombres réels saisis au clavier.
ALGORITHME Maximum
VAR a, b : REEL
DEBUT
ECRIRE('Entrer deux nombres réels : ' )
LIRE(a, b)
SI (a = b) ALORS
ECRIRE('Les deux nombres sont égaux')
SINON SI (a > b) ALORS
ECRIRE(a, ' > ', b)
SINON
ECRIRE(b, ' > ', a)
FIN
59
60
IV. Instructions exécutables
Exemple 1 : Avec SI ... ALORS
Ecrire un algorithme permettant ALGORITHME ChiffreLettre
d’afficher les 3 premiers chiffres VAR chiffre : ENTIER
en toute lettre. DEBUT
ECRIRE('Entrer un chiffre : ' )
LIRE(chiffre)
ALGORITHME ChiffreLettre
SI(chiffre=0) ALORS
VAR chiffre : ENTIER
ECRIRE('zéro')
DEBUT
SINON SI(chiffre=1) ALORS
ECRIRE('Entrer un chiffre : ' )
ECRIRE('un')
LIRE(chiffre)
SINON SI(chiffre=2) ALORS
CHOISIR (chiffre) PARMI
ECRIRE('deux')
0 : ECRIRE('zéro')
SINON
1 : ECRIRE('un')
ECRIRE('Chiffre non demandé')
2 : ECRIRE('deux')
FIN
AUTRE : ECRIRE('Chiffre non demandé')
FIN
FIN Le choix multiple est préférable à
l'alternative lorsqu'il y a trop
d'imbrications de SI ... SINON SI
INP-HB/DFRMI/K. M. BROU Langage algorithmique 61
61
62
IV. Instructions exécutables
Exercices : Exercice 3 : Ecrire un algorithme
qui transforme, les notes de 0 à
Exercice 1 : Ecrire un algorithme
20 d’un devoir en une notation
qui lit le nom et le genre de
par lettre. Après avoir lu la note,
l’utilisateur puis affiche le
la moyenne m et l’écart-type
message Bonjour M. (ou Mme
des notes de la classe, on
selon la nature du genre) suivi du
applique le barème suivant :
nom de l’utilisateur.
Notes [0, m - [ : C
Exemple : "Bonjour M. Toto"
Notes [m - , m + [ : B
Exercice 2 : Ecrire un algorithme
Notes [m + , 20] : A
qui lit un réel a, et imprime un
résultat b tel que, si a > 20 alors
b=a/2 ; si a< 0 alors b = 0 ;
sinon b = 2a.
63
64
IV. Instructions exécutables
Exercice 6 : Ecrire un algorithme
permettant résoudre une
équation du second degré de la
forme ax2 + bx + c = 0 dans
l’ensemble des nombre
complexes C. Les coefficients a, b
et c sont des réels. On envisagera
tous les cas possibles.
65
66
IV. Instructions exécutables
Syntaxe 2 : pas décroissant
4.7. La boucle POUR
67
68
IV. Instructions exécutables
Exemple 2 : Factorielle d’un ALGORITHME FactorielleDecroissant
nombre. VAR i, n, fact : ENTIER
DEBUT
Pas décroissant ECRIRE('Entrer un entier positif :' )
n ! = n x (n-1) x (n-2) x … x 2 x 1 LIRE(n)
SI (n = 0) OU (n = 1) ALORS
fact 1
SINON
DEBUT
f act 1
POUR i n, 2, -1
fact fact * i
FIN
ECRIRE(n, ' ! = ', fact)
FIN
69
70
IV. Instructions exécutables
Le corps de la boucle est exécuté
4.9. La boucle
jusqu’à ce que la condition soit
REPETER..JUSQUA vérifiée.
On l’utilise quand on est sûr que Remarque
le corps de la boucle doit être Pour transformer une boucle
exécuté au moins une fois. TANTQUE en une boucle
Syntaxe : REPETER..JUSQUA et vice versa, il
suffit de prendre la négation de la
REPETER
condition.
Bloc
JUSQUA(condition)
TANTQUE(condition)
Bloc
Equivalent à
Bloc
REPETER
Condition vérifiée ? VRAI
Bloc
FAUX JUSQUA(NON condition)
Suite de l’algorithme
INP-HB/DFRMI/K. M. BROU Langage algorithmique 71
71
72
IV. Instructions exécutables
Exercices : Exercice 4 : Ecrire un algorithme
permettant de calculern :
Exercice 1 : Ecrire un algorithme S (i 2)
permettant de calculer la somme i 0
de n nombres lus au clavier (n Exercice 5 : Ecrire un algorithme
est une variable). permettant de calculer n!
Exercice 2 : Ecrire un algorithme Exercice 6 : Ecrire un algorithme
permettant de calculer somme permettant de calculer les
des n premiers nombres paires. coefficients du binôme de
Exercice 3 : Ecrire un algorithme Newton: p
n!
C n p!(n p)!
permettant de calculer la somme
du carré des 100 premiers Exercice 7 : combien de termes
nombres. sont-ils nécessaires à la série
pour que la condition suivante
soit satisfaite. N
1
i limite
i 1
INP-HB/DFRMI/K. M. BROU Langage algorithmique 73
73
R1
1
Rp n
1 R2
Ri
i 1
Rn
74
IV. Instructions exécutables
Exercice 9 : Les nombres Exercice 11 : suite de Fibonacci
premiers Ecrire un algorithme permettant
Ecrire un algorithme permettant de calculer le nième .terme de la
de déterminer les nombres suite de Fibonacci définie par : U1
premiers inférieurs à 100 (un = 1, U2 = 2 et Un = Un-1 + Un-2 (n
nombre est premier s’il a deux 3)
diviseurs : 1 et lui-même).
Exercice 10 : Les nombres
parfaits
Un nombre parfait est un entier
naturel égal à la somme de tous
ses diviseur, 1 inclus (mais lui-
même exclu). Ex. 6 = 1 + 2 + 3.
Ecrire un algorithme permettant
de déterminer en les comptant les
nombres parfaits compris entre 6
et 10000.
INP-HB/DFRMI/K. M. BROU Langage algorithmique 75
75
76
V. Les sous-algorithmes
5.1. Présentation Besoins de réduction du code
machine :
Besoins de clarté et de
Eviter de réécrire plusieurs fois un
maintenance : bloc d’instructions qui intervient
Décomposer un algorithme plusieurs fois dans un même
complexe ou volumineux en algorithme ;
plusieurs unités logiques ou
Ce bloc est écrit une seule fois
modules plus simples que
sous forme d’un sous-algorithme
l’algorithme initial.
Il peut être appelé n’importe où
Ces différents modules sont
dans un algorithme.
appelés sous-algorithmes.
77
V. Les sous-algorithmes
Exemple : maximum de 4 Les trois traitements sont
identiques sauf les variables qui
nombres entiers.
changent.
ALGORITHME maximum
VAR a, b, c, d, max1, max2, max : ENTIER
DEBUT
ECRIRE('Entrer 4 nombres entiers : ')
LIRE(a,b,c,d)
max1 a
SI(b > max1) ALORS Traitement 1
max1 b
max2 c
SI(d > max2) ALORS Traitement 2
max2 d
max max1
SI(max2 > max) ALORS Traitement 3
max max2
ECRIRE('Maximum = ',max)
FIN
INP-HB/DFRMI/K. M. BROU Langage algorithmique 78
78
V. Les sous-algorithmes
5.2. Définition
Un sous-algorithme assure de
manière autonome un traitement
particulier.
Ce traitement peut alors être
répété dans l’algorithme principal
ou dans un autre sous-algorithme
par simple appel du sous-
algorithme.
On distingue deux sortes de sous-
algorithmes :
les procédures et les fonctions.
79
V. Les sous-algorithmes
5.3. Procédure Structure d’une procédure
Elle est semblable à celle d’un
La notion de procédure comporte algorithme ;
2 aspects :
Elle comporte une tête, une partie
Déclaration de la procédure : c’est déclaration et un corps.
la définition de la procédure
La tête de la procédure :
Appel de la procédure : c’est
Commence par le mot réservé
l’utilisation de la procédure.
PROCEDURE
Déclaration d’une procédure Suivi du nom de la procédure et
Elle se situe en dehors d’un d’une liste de paramètres placée
algorithme. entre parenthèses.
Syntaxe : Les paramètres assurent la
PROCEDURE identificateur(liste de paramètres) communication entre les
[Déclaration d’objets locaux] différents modules d’un
DEBUT algorithme.
(* corps de la procédure *)
FIN
INP-HB/DFRMI/K. M. BROU Langage algorithmique 80
80
V. Les sous-algorithmes
Exemples : Notion de paramètres ou
Paramètres de type D et R d’arguments :
Ils assurent la communication
PROCEDURE maximum (D x, y : ENTIER , R max : ENTIER)
entre les différentes parties d’un
DEBUT
max x algorithme.
SI (y max) ALORS 3 sortes de paramètres :
max y Paramètre de type Donnée ou
FIN
d’entrée
Paramètres de type DR Paramètre de type Résultat ou de
sortie
PROCEDURE echange(DR x, y : ENTIER) Paramètre de type Donnée-
VAR temp : ENTIER
Résultat ou d’Entrée-Sortie
DEBUT
temp x
xy
y temp
FIN
81
V. Les sous-algorithmes
Paramètre de type Donnée : Paramètre de type Résultat :
Chaque paramètre est précédé de Chaque paramètre est précédé de
D. R.
Il sert à véhiculer les données de Il sert à véhiculer les résultats de
l’extérieur (algorithme ou sous- l’intérieur du sous-algorithme
algorithme) vers l’intérieur du vers l’extérieur
sous-algorithme Exemple : paramètres max dans la
Exemple : paramètres x et y dans procédure maximum.
la procédure maximum.
82
V. Les sous-algorithmes
Paramètre de type Donnée- Appel d’une procédure
Résultat : Il s’effectue à l’intérieur d’un
Chaque paramètre est précédé de algorithme ou d’un sous-
DR. algorithme appelant.
Combinaison des paramètres de Exemple :
type Donnée et de type Résultat.
Il sert à véhiculer les données de
l’extérieur (algorithme ou sous-
algorithme) vers l’intérieur du
sous-algorithme.
Après le traitement, il sert à
véhiculer les résultats de
l’intérieur du sous-algorithme
vers l’extérieur.
Exemple : paramètres x et y dans
la procédure echange.
INP-HB/DFRMI/K. M. BROU Langage algorithmique 83
83
V. Les sous-algorithmes
Appel de la procédure maximum
PROCEDURE maximum (D x, y : ENTIER , R max : ENTIER)
ALGORITHME maximum DEBUT
VAR a, b, c, d, max1, max2, max : ENTIER max x
DEBUT SI (y max) ALORS
ECRIRE('Entrer 4 nombres entiers : ') max y
LIRE(a,b,c,d) FIN
max1 a
2 3 3
SI(b > max1) ALORS Traitement 1
max1 b ALGORITHME plusGrand
max2 c VAR a, b, c, d, max1, max2, max : ENTIER
SI(d > max2) ALORS Traitement 2 DEBUT
max2 d ECRIRE('Entrer 4 nombres entiers : ')
max max1 LIRE(a,b,c,d)
SI(max2 > max) ALORS Traitement 3 (*appel de la procedure maximum*)
max max2 maximum(a, b, max1)
ECRIRE('Maximum = ',max) maximum(c, d, max2)
FIN maximum(max1, max2, max)
ECRIRE('Maximum = ', max)
FIN
INP-HB/DFRMI/K. M. BROU Langage algorithmique 84
84
V. Les sous-algorithmes
Appel de la procédure echange PROCEDURE echanger (DR x, y : ENTIER)
VAR temp : ENTIER
DEBUT
max x
SI (y max) ALORS
max y
FIN
2 3
3 2
ALGORITHME plusGrand
VAR a, b : ENTIER
DEBUT
ECRIRE('Entrer 2 nombres entiers : ‘)
LIRE(a,b)
(*appel de la procedure echange*)
ECRIRE('Avant échange : ', a, ' ',b)
echanger(a, b)
ECRIRE('Avant échange : ', a, ' ',b)
FIN
INP-HB/DFRMI/K. M. BROU Langage algorithmique 85
85
V. Les sous-algorithmes
Procédure sans paramètre
Déclaration
PROCEDURE affMessage
DEBUT
ECRIRE('Bonjour Fatou, comment vas-tu ? ‘)
FIN
Appel de la procédure
ALGORITHME salutation
DEBUT
affMessage (*appel de la procedure affMessage*)
FIN
86
V. Les sous-algorithmes
Exercices
Ecrire une procédure fact
permettant de calculer la
factorielle d’un nombre.
Ecrire algorithme permettant de
calculer les coefficients du binôme
de Newton
n!
p
C n
p! x ( n p )!
87
V. Les sous-algorithmes
5.4. Fonction Déclaration d’une fonction
Sous-algorithme similaire à la Elle se situe en dehors d’un
algorithme.
procédure mais qui calcule une
Syntaxe :
valeur d’un type donné.
88
V. Les sous-algorithmes
Exemple : Appel d’une fonction
Maximum de deux entiers Il s’effectue à l’intérieur d’un
algorithme ou d’un sous-
FONCTION maximum(D x, y : ENTIER) : ENTIER algorithme appelant.
VAR max : ENTIER Exemple :
DEBUT
max x
SI (y max) ALORS ALGORITHME PlusGrand
max y VAR a, b, max : ENTIER
maximum max DEBUT
FIN ECRIRE('Entrer 2 nombres entiers : ')
LIRE(a,b)
(* appel de la fonction maximum *)
max maximum(a, b)
ECRIRE('Maximum de ',a, ' et ', b, ' = ', max)
FIN
89
V. Les sous-algorithmes
Différences entre procédure et Fonctions et procédures
fonction prédéfinies
au niveau de la déclaration : Il existe des procédures et
une fonction retourne une valeur fonctions prédéfinies, exemples
(donc possède un type) par Procédure ou fonction Signification
l’intermédiaire de son nom qui est EXP(x) Exponentielle
un paramètre résultat ; SQRT(x) Racine carrée
au niveau de l’appel : ABS(x) Valeur absolue
ARRETER Met fin à un programme
le nom d’une fonction peut
apparaître dans le membre droit
d’une affectation.
90
V. Les sous-algorithmes
Exercices
Ecrire une fonction fact
permettant de calculer la
factorielle d’un nombre.
Ecrire algorithme permettant de
calculer les coefficients du binôme
de Newton
n!
p
C n
p! x ( n p )!
91
V. Les sous-algorithmes
Exercice : Ecrire un algorithme Exercice : Ecrire un algorithme
permettant d’effectuer les permettant d’effectuer les
traitements suivants sur un traitements suivants sur une
vecteur de 10 réels : matrice de 10 réels (5 lignes, 2
Lire les éléments du vecteur colonnes) :
Afficher les éléments du vecteur Lire les éléments de la matrice
Rechercher le minimum et le Afficher les éléments de la matrice
maximum des éléments du Rechercher le minimum et le
tableau. maximum des éléments du
Calculer la moyenne des éléments tableau.
du tableau. Calculer la moyenne des éléments
Rechercher la présence d’un du tableau.
élément dans le vecteur. Rechercher la présence d’un
NB : ces traitements seront écrits élément dans la matrice.
sous forme de sous-algorithmes. NB : ces traitements seront écrits
sous forme de sous-algorithm
INP-HB/DFRMI/K. M. BROU Langage algorithmique 92
92
V. Les sous-algorithmes
Ecrire un sous-algorithme Soient le deux suites U et V
permettant de calculer an pour définies par :
tout a réel et tout n entier U1 = 1, U2 = 2 et Ui = Ui-1 + Ui-2 et
(positif, négatif ou nul). Vi = Ui/Ui-1 (i 3)
a = 0 et n > 0 p = 1 La suite V tend vers une limite
a = 0 et n < 0 p est indéfinie approchée appelée nombre d’or.
a 0 et n < 0 p = 1/an On supposera que le nième terme
de la suite V soit Vn donne une
a 0 et n > 0 p = an
valeur approchée du nombre d’or
Ecrire un algorithme permettant avec la précision E, dès que
de calculer le nième terme de la
suite de Fibonacci définie par : Ecrire une permettant de calculer
U1 = 1, U2 = 2 et la valeur du nombre d’or avec une
Un = Un-1 + Un-2 (n 3) précision E, et le rang du terme de
la suite V considéré comme égal
au nombre d’or = 1 5
2
INP-HB/DFRMI/K. M. BROU Langage algorithmique 93
93
V. Les sous-algorithmes
5.5. Portée des variables Variables locales
Variables déclarées dans la partie
Variables globales déclaration de tout algorithme ou
Variables déclarées en dehors de sous-algorithme.
tout algorithme ou sous-
Ces variables ne sont accessibles
algorithme.
que dans les algorithmes ou sous-
Ces variables sont accessibles à algorithme où elles ont été
tout algorithme ou sous- déclarées.
algorithme.
A la sortie de l’algorithme ou
Leur durée de vie est celle de sous-algorithme, la zone de
l’algorithme principal mémoire qui leur a été allouée est
libérée.
Leur durée de vie est celle de
l’algorithme ou sous-algorithme
où elles ont été déclarées.
94
V. Les sous-algorithmes
Exemple : v1 et v2 : globale
v3 : local
VAR v1, v2 : REEL
ALGORITHME vGlobale
VAR v3 : REEL
DEBUT
ECRIRE('Entrer 2 nombres réels : ')
LIRE(v1, v2)
v3 v1 + v2
ECRIRE('Avant modification ',v1,v2)
modif(v3)
ECRIRE('Après modification ',v1,v2)
FIN
95
VI. La récursivité
6.1. Présentation
Deux sortes de récursivité :
Récursivité indirecte : deux
fonctions s’appellent
mutuellement.
Récursivité directe : Un sous-
algorithme qui s’appelle lui-
même.
96
VI. La récursivité
6.2. Récursivité indirecte Exécution : flop(4)
Un algorithme A appelle un
flop(4) FLOP
algorithme B qui lui-même
appelle A. flip(3) FLIP
Exemples : flop(2) FLOP
97
VI. La récursivité
Exemple : n!
6.3. Récursivité directe
98
VI. La récursivité
Analyse récursive Etape 3 : Décomposition du cas
général : décomposer le cas
Permet d’éviter des appels infinis,
général afin de le ramener à un
comporte trois étapes :
problèmes, plus simples (de
Etape 1 : Paramétrage du tailles plus petites).
problème : déterminer les
différents éléments dont dépend
la solution du problème (en
particulier la taille du problème).
Etape 2 : Recherche d’un cas
trivial (test d’arrêt) : rechercher
un cas particulier qui donne la
solution directement sans appel
récursif. Ce sera souvent le cas ou
la taille du problème est égale à 0,
ou égale à 1, etc.
99
VI. La récursivité
FONCTION fact(D n :ENTIER) : ENTIER
6.4. Quelques algorithmes DEBUT
récursifs simples SI(n=0) ALORS
fact 1
Factorielle d’un nombre SINON
Analyse du problème : soit fact la fact n*fact(n-1)
fonction factorielle FIN
Paramétrage
n: Nombre entier positif, nombre Exécution : fact(4)
dont on veut calculer la factorielle.
Recherche d’un cas trivial fact(4)= 4*3*2*1 = 24
*
SI(n=0) ALORS fact(n) = 1 4 fact(3) =3*2*1
*
Décomposition 3 fact(2)= 2*1
fact(n) = n fact(n-1) n > 0 *
2 fact(1)=1*1
*
1 fact(0)=1
1
100
VI. La récursivité
Exemple 2 : La tour d’Hanoi Règles
Les prêtres d’une secte ont à On ne peut déplacer qu’un seul
résoudre le problème suivant : disque à la fois.
Le jeu est constitué d’une Il est interdit de poser un disque
plaquette de bois où sont plantées plus grand sur un disque plus
trois tiges. petit.
Sur la 1ère tige sont enfilés 64 La fin du monde
disques de diamètres tous Elle coïncidera avec la fin du
différents. transfert des 64 disques.
Transférer tous ces disques sur la
2ème tige.
La 3ème tige est la tige de
manœuvre.
101
VI. La récursivité
102
VI. La récursivité
Analyse du problème Décomposition du cas général
Soit hanoi le nom de la procédure Transférer récursivement (n-
récursive. 1) disques du sommet de x
(tige de départ), sur z (tige de
Soit deplacer la procédure de
manœuvre ), y (tige d’arrivé)
transfert d’un disque d’un socle à
sera utilisé comme tige de
un autre.
manœuvre :
Paramétrage :
hanoi(n-1,x,z,y)
n: Nombre de disque de type
Déplacer le disque qui reste en
entier
x (le plus grand) sur y :
x: Socle de départ deplacer(x,y)
y: Socle d’arrivé Transférer récursivement les
z: Socle intermédiaire (n-1) disques de z en y avec x
Recherche de cas triviaux : comme socle intermédiaire :
SI(n=0) ALORS ne rien faire hanoi(n-1,z,y,x)
SI(n=1) ALORS deplacer(x,y)
103
VI. La récursivité
Algorithmes
Analyse du problème
104
VI. La récursivité
Exécution : hanoi(3, A, B, C)
hanoi(3,A,B,C)
105
VI. La récursivité
Fin du monde N = 64
Calcul de la complexité T(10) = 210 -1 = 1 023
T(20) = 220 - 1 = 1 048 575
1 si n 1
T (n) T(32) = 232 - 1 = 4 294 967 295
1 2T (n 1) si n 1 T(64) = 264 - 1 = 18 446 744 073 709
551 615 0,21020 unité de temps
Prenons comme unité de temps la
seconde.
1 an=31536000 s, 1 siècle 0,31010 s
Pour T(64) il faudrait environ 1010
siècles.
Ce qui n’est pas loin de la fin
du monde.
106
VI. La récursivité
Exercice 1 : Exercices 3 :
Transformer une boucle en une On veut réaliser des opérations
procédure récursive. d’addition et de multiplication dans
PROCEDURE afficher1() un environnement qui n’offre que les
VAR i:ENTIER 2 opérateurs inc(incrémentation) et
DEBUT
POUR i 1, 10
dec(décrémentation).
ECRIRE('Bonjour Fatou') x=inc(2) x=3
FIN x=dec(2) x=1
107
VI. La récursivité
Exercices 5 : PGCD Exercice 6 :
Ecrire un sous-algorithme récursif Ecrire une fonction récursive
permettant de calculer le pgcd de permettant de rechercher de façon
deux nombres entiers x et y. dichotomique une donnée dans un
Méthode 1 : tableau trié par ordre croissant.
SI x = y, alors pgcd = x Principe :
SI x<y, alors pgcd = pgcd de x et y–x Décomposer le tableau t en 2 sous
SI x > y, alors faire comme en 2 en tableaux, 3 cas possibles :
remplaçant x par y. Si x = t[milieu] alors x est trouvé et
Méthode 2 : Algorithme d’Euclide 300 la recherche est terminée.
av. JC Si x < t[milieu] alors chercher x dans
Soient 2 entiers naturels x et y, si y est la partie gauche du tableau t.
nul, alors le PGCD est égal à x. Sinon, Si x > t[milieu] alors chercher x dans
on calcule z, le reste de la division de x la partie droite du tableau t.
par y. On remplace x par y, et y par z, Conditions d’arrêt : t[milieu] = x ou
et on recommence le procédé. Le dimension de sous tableau = 0.
dernier reste non nul est le PGCD.
108
VII. Méthode d’analyse des algorithmes
7.1. Présentation Il s’agit de décomposer le
problème complexe initial en des
Entre un problème à résoudre et
sous-problèmes dont le niveau
un programme, l’intermédiaire
de complexité est moins élevé
indispensable est un algorithme.
diviser pour régner.
La phase la plus difficile de la
programmation n’est pas la Deux méthodes d’analyse :
traduction de l’algorithme dans Analyse descendante
un quelconque langage Analyse ascendante.
Mais plutôt la conception de
l’algorithme.
On désigne cette étape sous le
nom d’analyse.
109
110
VII. Méthode d’analyse des algorithmes
Exemple Illustration : recherche de 21 dans le
tableau suivant
Trouver un élément dans un
tableau non trié par la recherche 14 21 25 37 41 71 84 91 94
dichotomique.
La recherche dichotomique 21 < 41
accélère la recherche d’un élément
dans un tableau trié. 14 21 25 37
Principe
On compare l’élément cherché à 21 = 21
l’élément qui se trouve au milieu
du tableau.
S’il y a égalité, la recherche
s’arrête.
Sinon on poursuit la recherche
dans la moitié inférieure ou dans sa
moitié supérieure selon le résultat
de la comparaison.
INP-HB/DFRMI/K. M. BROU Langage algorithmique 111
111
112
VII. Méthode d’analyse des algorithmes
Procédure de saisie des éléments
d’un tableau
113
114
VII. Méthode d’analyse des algorithmes
Procédure tri par bulles Procédure de permutation de deux
valeurs
115
116
VII. Méthode d’analyse des algorithmes
7.2. Analyse ascendante
On dispose d’outils (sous-
algorithmes) réalisant des
travaux élémentaires
On les compose pour résoudre un
problème de plus haut niveau.
Cette méthode est adopte une
démarche bidirectionnelle :
De haut en bas pour découper le
travail en tâches plus élémentaires
De bas en haut pour réaliser les
tâches élémentaire à l’aide des
outils disponibles.
117
118
VII. Méthode d’analyse des algorithmes
Analyse ascendante Inconvénients
Avantages Elle ne relève pas d’une
La réutilisation des sous- démarche systématique dans le
algorithmes existants ce qui processus d’analyse du
accroît la vitesse de problème ;
développement, réduit la taille de On note dérive possible de la
l’algorithme et facilite les tests ; résolution vers celle d’un autre
En choisissant des outils validés, problème.
on est sûr de leur opérationnalité Conclusion :
finale (moins de tests). Dans la pratique, on fait un
facilité de prototypage compromis entre ces deux
(construction rapide d’application à méthodes.
partir d’outils existants même si
ces outils sont trop généraux ou de
performance faible)
119
120
VIII. Structures de données dynamiques
8.1. Les pointeurs Notation
p : désigne la variable qui contient
Variable contenant l’adresse d’une
l’adresse de la variable c1 ;
autre variable.
p Cette variable peut être utilisée dans
la partie droite ou gauche d’une
p
affectation concernant des adresses.
c1 a
p : appelée variable pointée, désigne
p : variable de type pointeur qui l’objet dont l’adresse est rangée dans
contient l’adresse de la variable c1 p;
(contient la valeur a). p peut apparaître dans la partie
121
p2
c2 b
p3
p2
i 2
122
VIII. Structures de données dynamiques
Affectation entre pointeurs Affectation entre valeurs pointées
p1 p2 p1 p2
p p
p1 p2 1 2
p p
p1 p2 b1 b2
a b
Remarque :
p1
p2 a n’existe plus (alors que,
p1 p2 précédemment, il existait toujours,
a mais n’était plus accessible).
b
b existe en deux exemplaires ; l’un
des exemplaires a une adresse
Remarque : pointée par p1 et l’autre a une
a n’est plus accessible, car on a perdu adresse pointée par p2.
son adresse qui se trouvait dans p1.
123
124
VIII. Structures de données dynamiques
2.3. Représentation d’une cellule La cellule contient deux champs :
Champ info : contient une information de
Utilisation d’une SD de type
type T ;
ENREGISTREMENT Champ suivant : contient une adresse.
125
126
VIII. Structures de données dynamiques
Deux sortes de pointeurs :
Pointeurs contenant une adresse 16
bits : pointeur de type NEAR
Pointeur contenant une adresse 32
bits : pointeur de type FAR
Deux primitives de travail sur le tas :
RESERVER(p) : permet à chaque appel
d’obtenir une nouvelle cellule dont
l’adresse sera retournée dans la
variable p.
LIBERER(p) : rend la cellule d’adresse
p au réservoir.
127
128
VIII. Structures de données dynamiques
3.2. Applications des piles Calcul arithmétique
Appels de fonctions Une application courante des piles se
fait dans le calcul arithmétique :
Quand une fonction est appelée, les
l'ordre dans la pile permet d'éviter
paramètres (incluant l’adresse de
l'usage des parenthèses.
retour) doivent être passés à la
La notation postfixée (polonaise)
fonction appelante.
consiste à placer les opérandes
Si ces paramètres sont sauvegardés
devant l'opérateur.
dans une mémoire fixe, alors la
La notation infixée (parenthésée)
fonction ne peut pas être appelée
récursivement du moment que la consiste à entourer les opérateurs par
première adresse va être écrasée par leurs opérandes.
le deuxième retour d’adresse avant Exemple :
129
130
VIII. Structures de données dynamiques
3.4. Description logique
TYPE
Sommet : élément le plus récent Pile = VIDE | PileNonVide
d’une pile. PileNonVide = ENREGISTREMENT
Corps : la pile amputée du sommet. sommet : T
corps : Pile
FIN
Nouveau
sommet
Nouvelle
pile Nouveau Ancienne
corps Ancien pile
corps
131
132
VIII. Structures de données dynamiques
3.5. Représentation physique Représentation chaînée
Deux représentations physiques :
Représentation contiguë (Tableau) :
tête A
éléments de la pile rangés de façon
pile
contiguë ; tête B
Représentation chaînée (pointeurs) : corps tête C
corps
élément de la pile rangés à des corps tête D queue
endroits quelconques corps vide
Représentation contiguë
tête A
B
pile
corps
C
D
133
1
file[1] tête 0 0 0 0 0 enpiler
Partie file[2] t, q 1 2 3 0 0
utilisée queue 1 2 3 t q
I= 0
dépiler I= 3
pile = ()
Partie pile = (1, 2, 3)
inutilisée
1 2 3 0 0 enpiler 1 2 3 6 9
N t q t q
6 9 11
I= 2
I= 5
pile = (2, 3)
pile = (2, 3, 6, 9)
134
VIII. Structures de données dynamiques
TYPE PROCEDURE erreur FONCTION depiler(RD p : Pile) : Pile
Iindice = 1..N DEBUT DEBUT
Vecteur = TABLEAU[Indice] DE T ECRIRE(‘Erreur’) SI(pileVide(p)) ALORS (* pile vide *)
Pile = ENREGISTREMENT FIN erreur
sommet :ENTIER SINON
t : Vecteur FONCTION empiler(RD p : Pile ; x :T) : Pile p.sommet p.sommet - 1
FIN DEBUT dépiler p
SI(p.sommet = N) ALORS (* pile pleine *) FIN
FONCTION creerPile : Pile erreur
VAR p : Pile SINON FONCTION dernier(p : Pile) : T
DEBUT DEBUT DEBUT
p.sommet 0 p.sommet p.sommet + 1 SI(pileVide(p)) ALORS (* pile pleine *)
creerPile p p.t[p.sommet] x erreur
FIN FIN SINON
empiler p dernier p.t[p.sommet]
FONCTION pileVide(p : Pile) :BOOLEEN FIN FIN
DEBUT
SI(p.sommet = 0) ALORS
pileVide VRAI
SINON
pileVide FAUX
FIN
135
tête Pile
Chaque donnée de la pile contient une
valeur et un pointeur sur la donnée
précédemment empilée.
136
VIII. Structures de données dynamiques
TYPE FONCTION pileVide(p : PtrTete) : BOOLEEN FONCTION dépiler(RD p : ptrTête) : ptrTête
PtrPile = Pile DEBUT VAR ptr :PtrPile
PtrTete = TETE SI((P.nbElt = 0) OU (p.sommet=NUL)) ALORS DEBUT
pileVide VRAI SI(pile_vide(p)) ALORS
TETE = ENREGISTREMENT SINON erreur
nbElt : ENTIER pileVide FAUX SINON
sommet : PtrPile FIN DEBUT
FIN ptr p.sommet
FONCTION empiler(RD p:ptrTête ; x:T) : ptrTête p.sommet ptr.suivant
Pile = ENREGISTREMENT VAR ptr :PtrPile p.nbElt p.nbElt - 1
info :T DEBUT LIBERER(ptr)
suivant :PtrPile RESERVER(ptr) FIN
FIN ptr.info x dépiler p
ptr.suivant p.sommet FIN
p.sommet ptr
p.nbElt p.nbElt + 1
empiler p
FIN
137
138
VIII. Structures de données dynamiques
Exercices :
Exercice 1 : Ecrire un algorithme de
conversion d’un nombre N dans une
base B quelconque.
par un tableau
par une structure chaînée
Exercice 2 : Ecrire un algorithme
permettant de gérer une pile
d’élèves :
par un tableau
par une structure chaînée
139
Ajout Retrait
D C B A
queue tête
140
VIII. Structures de données dynamiques
4.2. Spécification fonctionnelle
Soit le type FileT, ou file d’objets de
type T
Opérateurs :
creerFile : FileT Crée un file vide
fileVide : FileT BOOLEEN Teste si la file est vide ou non
enfiler : FileT T FileT Ajoute un élément à la queue
de la file
defiler : FileT T FileT Supprime le premier de la file
premier : FileT T Retourne le premier de la file
Propriétés :
Soient f : FileT et x :T
filevide(créerfile)=VRAI creerFile crée une file vide.
fileVide(enfiler(f, x))=FAUX si on ajoute un élément à une file, la
file résultante n’est pas vide.
defiler(enfiler(f, x),x)=f si on ajoute un élément et on
l’enlève, on retrouve la file initiale.
premier(enfiler(f, x))=x on récupère les éléments dans l’ordre
de celui où on les a mis.
INP-HB/DFRMI/K. M. BROU Langage algorithmique 141
141
Ancienne Ancien
file corps
Nouveau Nouvelle
corps file
Nouvelle
queue
142
VIII. Structures de données dynamiques
Les fonctions
FONCTION defiler(DR f : file) : file
FONCTION creerFile : File DEBUT
DEBUT SI(fileVide(f)) ALORS
creerFile VIDE Erreur
FIN SINON
f f.corps
FONCTION fileVide(f :File) :BOOLEEN defiler f.corps
DEBUT FIN
fileVide f = VIDE
FIN FONCTION premier(D f : file) : T
DEBUT)
FONCTION enfiler(DR f : file ; x : REEL) : File SI(fileVide(f)) ALORS
DEBUT Erreur
SI(fileVide(f)) ALORS SINON
f.tete x premier f.tete
SINON FIN
enfiler File(enfiler(f.Corps, x), f.tete)
enfiler f
FIN
143
sommet
A
pile sommet B
corps
sommet C
corps
sommet D
corps
corps vide
144
VIII. Structures de données dynamiques
Représentations contiguë FONCTION défiler(F : FileAt) : FileAt
DEBUT
CONST N = 10 FONCTION fileVide(f : FileAt) : BOOLEEN SI(fileVide(F)) ALORS
TYPE DEBUT erreur
Taille = 1..N SI(f.tête = f.queue) ALORS SINON
vecteur = TABLEAU[Taille] DE T fileVide VRAI f.tete f.tete + 1
SINON FIN
FileAt = ENREGISTREMENT fileVide FAUX
tab : vecteur FIN FONCTION enfiler(f : FileAt ; x : T) : FileAt
tete :Taille DEBUT
queue :Taille FONCTION premier(f : FileAt) :T SI(f.queue > N) ALORS
FIN DEBUT erreur
SI(fileVide(f)) ALORS SINON
FONCTION creerFile : FileAt erreur DEBUT
VAR f : FileAt SINON fF.tab[f.queue] x
DEBUT premier f.tab[f.tete] f.queue f.queue + 1
f.tete 1 FIN FIN
f.queue 1 FIN
creerFile f
FIN
145
Cellule = ENREGISTREMENT
info :T
suivant :PtrFile
FIN
146
VIII. Structures de données dynamiques
FONCTION creerFile: PtrFile FONCTION enfiler(f : PtrFile ; x) : PtrFile FONCTION défiler(f : PtrFile) : PtrFile
VAR F : Ptr_File VAR fp :PtrFile VAR fp : PtrFile
DEBUT DEBUT DEBUT
RESERVER(F) F.longueur f.longueur + 1 SI(fileVide(f)) ALORS
f.longueur 0 RESERVER(fp) erreur
F.tête NUL fp.info x SINON
f.queue NUL SI(f.queue = NUL) ALORS DEBUT
creerFile f DEBUT fp. f.tete
FIN fp.suivant f.tete f.tete fp.suivant
FONCTION fileVide(f:PtrFile) :BOOLEEN f.tete fp LIBERER(fp)
DEBUT f.queue fp FIN
SI(f.queue = f.tête) ALORS FIN SI(f.nbElt =1) ALORS
fileVide VRAI SINON f.queue NUL
SINON DEBUT défiler f
fileVide FAUX fp.suivant f.queue.suivant FIN
FIN f.queue.suivant fp
FONCTION premier(f:PtrFile) :T f.queue fp
DEBUT FIN
SI(fileVide(F)) ALORS enfiler f
erreur FIN
SINON
premier f.tete.info]
FIN
INP-HB/DFRMI/K. M. BROU Langage algorithmique 147
147
148
VIII. Structures de données dynamiques
5.2. Spécification fonctionnelle
Soit une liste d’objets de type T
Opérations
creerListe : Liste
suivant : T Liste T
insérerAvant : T T Liste Liste
supprimer : T Liste Liste
premier : Liste T
149
150
Bibliographie
Livres [MEY] : "Méthodes de
[ALR] : "Structure de données et programmation", B. Meyer et C
algorithmes", Alfred Ano, John Baudoin, Eyrolles
Hopcroft, Jeffrey Ullman, InterEdition Christine PORQUET : ENSICAEN -
[BOR ] : "Initiation à la 1ère année – 2nd semestre –
programmation", Collection Sciences Algorithmique avancée :
et pratique de l’informatique, Bordas Poly_Algo_avancee_debut.pdf
Informatique
[COU] : "Initiation à l’algorithmique
et aux structures de données, 1, 2
Récursivité et structures de données
avancées", J. Courtin, I. Kowarski,
Dunod Informatique
[GUY] : "Arbre Table et Algorithmes",
J. Guyot, C. Vial, Eyrolles
151
Bibliographie
Webographie
http://brassens.upmf-
grenoble.fr/IMSS/limass/algoprog/al
gocours.html
http://www-math.univ-
fcomte.fr/pp_Annu/FLANGROGNET/E
NSEIGNEMENT/Hachage_2007.pdf
http://aqualonne.free.fr/dossiers/al
go5.html
Christine PORQUET : ENSICAEN - 1ère
année – 2nd semestre –
Algorithmique avancée :
Poly_Algo_avancee_debut.pdf
http://email.ini.dz/~hidouci/mcp/3_
Divise_Resoudre.pdf
152