Académique Documents
Professionnel Documents
Culture Documents
2020-2021
Sommaire
Architecture d’un ordinateur
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
Comprendre le fonctionnement
d’un ordinateur
Connaitre les concepts de base du
langage algorithmique
Savoir écrire un algorithme
Unité Unité
d’échange d’échange
Unités
périphériques
Imprimante Clavier Ecran Disque Souris Scanner
Légende
Flux d’informations
Ordres de l’UCC
4
I. Architecture d’un ordinateur
1.2. La mémoire centrale Mot mémoire
6
I. Architecture d’un ordinateur
MC en Lecture/Ecriture MC appelée RAM
Opération de lecture : elle Random Access Memory
consistes à véhiculer les Signifie mémoire à accès
information des périphériques aléatoire
d’entrée (tel que le clavier) vers la Cela veut dire que l’UCC peut
MC. accéder à n’importe quel mot
Opération d’écriture : elle consiste mémoire grâce à son adresse.
à véhiculer les informations de la
MC vers les périphériques de sortie
(tel que l’écran).
MC
opération d’entrée opération de sortie
Périphérique Périphérique
d’entrée de sortie
8
I. Architecture d’un ordinateur
1.3. L’UAL Table de vérité
Unité Arithmétique et Logique A B A ET B A OU B NON A SI(x >= 0) ALORS
0 0 0 0 1 Calculer racine
Renferme tous les circuits 0 1 0 1 1 SINON
électroniques nécessaires à 1 0 0 1 0 Erreur
1 1 1 1 0
l’exécution des opérations
arithmétiques et logiques. Possède un ou deux registres de
Partie arithmétique travail
Effectue les opérations d’addition, appelés accumulateur pour
de multiplication, etc. stocker les résultats
Exemple : s = 4 * 7 + 15 intermédiaires.
Partie logique
Exécute les opérations de prise de
décision afin de modifier
éventuellement la séquence
d’exécution des instructions.
INP-HB/DFRMI/K. M. BROU Langage algorithmique 9
10
I. Architecture d’un ordinateur
Exemples de code opérateur 1. Extraction de la MC de la
nouvelle instruction à exécuter
Code opérateur opérateur 2. Analyse de cette instruction et
(HEXA)
00 chargement
établissement des connexions
01 rangement électriques nécessaires dans
02 addition l’UAL
03 soustraction
04 multiplication 3. Extraction de la MC des
05 division opérandes sur lesquels portent
l’instruction
Fonctionnement 4. Déclenchement du traitement de
ces données par l’UAL
L’UCC travaille de façon
séquentielle selon le cycle 5. Rangement éventuel des
suivante : résultats dans la MC
6. Puis le cycle recommence en (1)
11
12
I. Architecture d’un ordinateur
1.5. Les unités périphériques Unités de communication
Ou périphériques Assurent le dialogue entre l’UC et
l’extérieur. Trois sortes :
Ce sont toutes les unités qui ne
Unités d’entrées : permettent de
font pas partie de l’UC. rentrer dans l’ordinateur les
Deux sortes de périphériques : informations à traiter
Unités de communication claviers, souris, cameras,
Mémoires secondaires scanners
Unités de sortie : permettent à
l’ordinateur de communiquer les
informations au monde extérieur
écrans, imprimantes
Unités d’entrées/sortie : à la fois
unité d’entrée et unité de sortie
disque, écran…
13
14
II. Etapes de résolution d’un problème
2.1. Eres de la programmation Langage Machine
En binaire (base 2)
1950-1960 : L’âge du Chaos
000100111011000101001010101010
Langage machine et Assembleur 010000101010101010101010101010
Temps de programmation En hexadécimal (base 16)
considérable et programmes peu
41 30 C1 A4
fiables. 3A 20 C1 A8
Exemple : A B + C x D 1A 30 C1 A0
50 30 C2 A4
Langage Assembleur
LDA C
MUL D
ADD B
STO A
15
16
II. Etapes de résolution d’un problème
2.2. Programmation Qu’est-ce qu’un algorithme ?
Production d’un programme Terme d’origine arabe
But essentiel dans la résolution Suite finie d’opérations
d’un problème en informatique. élémentaires, dont le
Partie la plus importante = déroulement dans un ordre prévu
Analyse à l’avance, résout, en un temps
fini, une classe donnée de
L’analyse consiste à concevoir et à problèmes, i.e. fait passer d’un
écrire un algorithme correct. ensemble de données à un
ensemble de résultats.
Analyse Codage
Problème
à Algorithme Programme
résoudre
17
18
II. Etapes de résolution d’un problème
Résolution La Solution 2 comporte moins
d’opérations, donc s’exécutera
Solution 1 : 8 opérations Solution 2 : 6 opérations beaucoup plus rapidement que la
N° Opérations (B, b) N° Opérations (B, b) Solution 1.
1 RB(b) (0, 3) 1 RB(B) (5, 0)
2 TB(b, B) (3, 0) 2 TB(B, b) (2, 3) Un bon algorithme doit minimiser
3 RB(b) (3, 3) 3 VB(b) (2, 0) au maximum le nombre
4 TB(b, B) (5, 1) 4 TB(B, b) (0, 2) d’opérations à effectuer.
5 VB(B) (0, 1) 5 RB(B) (5, 2)
6 TB(b, B) (1, 0) 6 TB(B, b) (4, 3)
7 RB(b) (1, 3)
8 TB(b, B) (4, 0)
19
20
II. Etapes de résolution d’un problème
Correction
Solution 2 : 9 opérations
Solution 1 : 10 opérations N° Opérations (B1, B2, B3)
N° Opérations (B1, B2, B3) 1 RB(B1) (3, 0, 0)
1 RB(B1) (3, 0, 0) 2 TB(B, B3) (0, 0, 3)
2 TB(B1, B2) (0, 3, 0) 3 RB(B1) (3, 0, 3)
3 RB(B1) (3, 3, 0) 4 TB(B1, B3) (0, 0, 6)
4 TB( B1 dans B2 (0, 6, 0) 5 RB(B1) (3, 0, 6)
5 TB( B2 dans B3 (0, 0, 6) 6 TB(B1, B3) (0, 0, 9)
6 RB(B1) (3, 0, 6) 7 TB(B3, B2) (0, 7, 2)
7 TB(B1, B2) (0, 3, 6) 8 RB(B1) (3, 7, 2)
8 RB(B1) (3, 3, 6) 9 TB(B1, B3) (0, 7, 5)
9 TB(B1, B2) (0, 6, 6)
10 TB(B3, B2) (0, 7, 5)
21
22
II. Etapes de résolution d’un problème
Etape 2 : Recherche d’un
2.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.
23
24
II. 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
25
26
II. Les étapes de la programmation
2.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 .
27
28
II. Les étapes de la programmation
2.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
29
30
III. Concepts de base du langage
3.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, ... ;
31
32
III. Concepts de base du langage
3.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
33
Lecture du tableau
A : code
= 41 en hexadécimal
= 65 en décimal
= 01000001 en binaire
INP-HB/DFRMI/K. M. BROU Langage algorithmique 34
34
III. Concepts de base du langage
Le code étendu (en hexa)
35
36
III. 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
37
38
III. Concepts de base du langage
Réponse Exercice 1
Le BTS en UCAP, est une
"excellente formation."
Réponse Exercice 2
54 65 63 68 6E 6F 6C 6F 67 69 65
20 31 39 38 39 20 22 4C 65 87 6F
6E 20 73 75 72 20 6C 65 73 20 43
4F 44 45 53 22 2E
39
Et ET Concaténation &
Ou OU +
Négation NON
40
III. Concepts de base du langage
3.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.
41
42
III. Concepts de base du langage
3.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).
43
44
III. Concepts de base du langage
CONST N = 2 (* objets globaux *)
3.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
45
46
IV. Partie déclaration
4.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ée. 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
47
Syntaxe :
TYPE identificateur = nom du type Standard Manufacturé Statique Dynamique
48
IV. Partie déclaration
4.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'
49
50
IV. Partie déclaration
4.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.
51
TYPE
Feux = (Orange, Vert, Rouge)
Banque = (BICICI, SIB, SGBCI, BIAO, BHCI, BCEAO)
Jour = (lundi, mardi, mercredi, jeudi, vendredi,
samedi, dimanche)
52
IV. 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
53
54
IV. 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
55
56
IV. 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
57
58
IV. Partie déclaration
4.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 59
59
V. Instructions exécutables
5.1. L’affectation Syntaxe :
Instruction la plus élémentaire Identificateur Expression
Cette instruction se lit :
Elle consiste à affecter à une
Identificateur reçoit la valeur de
variable la valeur d’une
Expression
expression de même type ou de
ou
type compatible.
Ranger la valeur de Expression
dans Identificateur
60
V. 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
61
V. Instructions exécutables
Exercices : Exercice 2 : Déterminer les valeur
Exercice 1 : Déterminer les des tableaux t1 et t2 après
valeurs des variables a, b, c et d exécution de cet algorithme.
après exécution de cet algorithme
ALGORITHME affectation1
ALGORITHME affectation2
VAR a, b, c, d : ENTIER
TYPE Vecteur = TABLEAU[1..3] DE ENTIER
DEBUT
VAR t1, t2 : Vecteur
a1
DEBUT
b3
t1[1] 1
ca+b
t1[2] 2
da-b
t1[3] 3
ac+2*b
t2[1] t1[1] + t1[2]
bc+b
t2[2] t1[1] + t1[3]
ca*b
t2[3] t2[1] + t1[3]
db+d
t2[1] t2[3] - t1[1]
ad*c
t1[2] 2 *t2[1] + t1[2]
SI (c > d) ALORS
t1[1] t2[2] + t1[1]
ca-d
FIN
SINON
cb-d
FIN
INP-HB/DFRMI/K. M. BROU Langage algorithmique 62
62
V. 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
63
V. Instructions exécutables
Exemple 1 : Exemple 2 :
ALGORITHME ecriture ALGORITHME ecriture
CONST Pi = 3.14 CONST Pi = 3.14
VAR omega : REEL VAR omega : REEL
DEBUT DEBUT
omega 100 * Pi omega 100 * Pi
ECRIRE('Valeur de PI = ', Pi) ECRIRE('Valeur de PI = ', Pi)
ECRIRE('Valeur de omega = ', omega) ECRIRE
FIN ECRIRE('Valeur de omega = ', omega)
FIN
Après Exécution
Valeur de PI = 3.14Valeur de omega = 314
Après Exécution
Valeur de PI = 3.14
Valeur de omega = 314
64
V. 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 65
65
V. Instructions exécutables
Exercices : Exercice 4 : Sans changer les
instructions de l’Exercice 3
Exercice 1 : Ecrire un algorithme
ajoutez d’autres instructions afin
permettant d’afficher le message
d’afficher le message suivant :
"Bonjour Fatou" à l’écran.
Exercice 2 : Ecrire un algorithme Bonjour M. BROU Konan
Votre devoir est vraiment facile
permettant de lire le nom de <<<<<<<<<<>>>>>>>>>>>>
l’utilisateur et de l’afficher à
l’écran précédé du mot Exercice 5 : Ecrire un algorithme
"Bonjour". qui calcule la somme de 2 réels
Exercice 3 : Ecrire un algorithme saisis au clavier.
permettant d’afficher le message Exercice 6 : Ecrire un algorithme
suivant : qui calcule l’expression suivante :
Bonjour M. BROU x*y +5, x et y sont saisis au
<<<<<<<<<<<<
clavier.
66
V. Instructions exécutables
5.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
67
V. Instructions exécutables
Les structures de contrôle
Un algorithme est dit structuré
s’il est écrit à l’aide des trois
structures de contrôle de base :
L’affectation
L’instruction conditionnelle
L’instruction itérative ou boucle
68
V. Instructions exécutables
5.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 69
69
V. Instructions exécutables
Exemple 1 : égalité de 2 nombres Exemple 2 : test complet d’égalité
entiers lus au clavier. de 2 nombres entiers lus au
clavier.
ALGORITHME egalite
VAR a, b : ENTIER
DEBUT ALGORITHME egalite
ECRIRE('Entrer deux nombres entiers : ' ) VAR a, b : ENTIER
LIRE(a, b) DEBUT
SI (a = b) ALORS ECRIRE('Entrer deux nombres entiers : ' )
ECRIRE('Les deux nombres sont égaux’) LIRE(a, b)
FIN SI (a = b) ALORS
ECRIRE('Les deux nombres sont égaux')
SINON
ECRIRE('Les deux nombres sont différents')
FIN
70
V. 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
71
V. Instructions exécutables
5.6. Le choix multiple Syntaxe :
ou aiguillage CHOISIR (expression) PARMI
C’est une généralisation de valeur1 : Bloc1
valeur2 : Bloc2
l’alternative complexe. …
Il permet de choisir une valeurn : Blocn
instruction à exécuter parmi [AUTRE : Blocn+1]
FIN
plusieurs selon la valeur d’une
expression.
Si la valeur de expression est
égale à une des valeursi, le bloci
correspondant est exécuté.
Dans le cas contraire, le blocn+1
est exécuté.
72
V. 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 73
73
V. Instructions exécutables
Exemple 2 :
La valeur de expression peut être
de type : ENTIER, CAR, TEXTE,
intervalle ou énuméré.
ALGORITHME Intervalle
VAR c : CAR
DEBUT
ECRIRE('Entrer un caractère : ' )
LIRE(c)
CHOISIR (c) PARMI
'A'.. 'Z', 'a'.. 'z' : ECRIRE('Lettre')
'0'.. '9' : ECRIRE('Chiffre')
'+','-', '*', '/' : ECRIRE('Opérateur arithmétique')
AUTRE : ECRIRE('Caractère spécial')
FIN
FIN
74
V. 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.
75
V. Instructions exécutables
Exercice 4 : Ecrire de deux façons Exercice 5 : Ecrire un algorithme
différentes (alternative et choix qui lit trois nombres entier x, y et
multiple) un algorithme z et permet de tester si x, y et z
permettant de simuler une peut être les longueurs de 3 côtés
calculette effectuant les d’un triangle. C’est le cas si et
opérations arithmétiques seulement si on a
élémentaires (+, -, *, /). Les simultanément :
opérandes et l’opérateur sont x>0
entrés au clavier. y>0
z>0
x + y >z
x+z>y
y+z>x
76
V. 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.
77
V. Instructions exécutables
Les instructions itératives On distingue 3 types de boucles :
ou boucles POUR : on connaît le nombre
d’itération à faire
Elles permettent de spécifier
REPETER..JUSQUA : on ne connaît
l’exécution d’un bloc d’instruction pas le nombre d’itération à faire
un certain nombre de fois. TANTQUE : on ne connaît pas le
nombre d’itération à faire
78
V. Instructions exécutables
Syntaxe 2 : pas décroissant
5.7. La boucle POUR
79
V. Instructions exécutables
Exemple 1 : Afficher le message Exemple 2 : Factorielle d’un
"Bonjour Fatou" 10 fois à l’écran. nombre.
Pas croissant
n ! = 1 x 2 x 3 x…x n
ALGORITHME Salutation ALGORITHME Salutation
CONST N = 10 ALGORITHME FactorielleCroissant
CONST N = 10
VAR i : ENTIER VAR i, n, fact : ENTIER
VAR i : ENTIER
DEBUT DEBUT
DEBUT
POUR i 1, N ECRIRE('Entrer un entier positif :' )
POUR i 1, N, 1
DEBUT LIRE(n)
DEBUT ou
ECRIRE('Bonjour Fatou' ) SI (n = 0) OU (n = 1) ALORS
ECRIRE('Bonjour Fatou' )
ECRIRE fact 1
ECRIRE
FIN SINON
FIN
FIN DEBUT
FIN
f act 1
POUR i 2, n
fact fact * i
FIN
ECRIRE(n, ' ! = ', fact)
FIN
INP-HB/DFRMI/K. M. BROU Langage algorithmique 80
80
V. 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
81
V. Instructions exécutables
4.8. La boucle TANTQUE Exemple :
Afficher le nom et le prénom de
On l’utilise quand on n’est pas sûr
l’utilisateur précédé du mot
que le corps de la boucle doit être
Bonjour autant de fois qu’il le
exécuté au moins une fois.
désire.
Syntaxe : ALGORITHME Salutation
TANTQUE (condition) VAR nom, prenom : TEXTE
Bloc reponse : TEXTE
DEBUT
Tant que la condition est vérifiée, reponse 'oui‘
le corps de la boucle (Bloc) est ECRIRE('Entrer votre nom et votre prénom :' )
exécuté. LIRE(nom, prenom)
TANTQUE(reponse = 'oui')
FAUX DEBUT
Condition vérifiée ? ECRIRE('Bonjour ',nom, ' ', prenom)
VRAI ECRIRE
ECRIRE('Continuer oui/non : ')
Bloc
LIRE(reponse)
Suite de FIN
INP-HB/DFRMI/K. M. BROU
l’algorithme Langage algorithmique FIN 82
82
V. Instructions exécutables
Le corps de la boucle est exécuté
5.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 83
83
V. Instructions exécutables
Exemple : ALGORITHME Salutation
Afficher le nom et le prénom de VAR nom, prenom : TEXTE
l’utilisateur précédé du mot reponse : TEXTE
Bonjour autant de fois qu’il le DEBUT
ECRIRE('Entrer votre nom et votre prénom :' )
désire.
LIRE(nom, prenom)
REPETER
ECRIRE('Bonjour ',nom, ' ', prenom)
ECRIRE
ECRIRE('Continuer oui/non : ')
LIRE(reponse)
JUSQUA(reponse = 'non')
FIN
84
V. Instructions exécutables
Exercices : Exercice 4 : Ecrire un algorithme
n
Exercice 1 : Ecrire un algorithme
permettant de calculer :
S (i 2)
permettant de calculer la somme i 0
85
V. Instructions exécutables
Exercice 8 : Résistance Exercice 8.3 : Exercice 8.1 et
Exercice 8.2 dans le même
équivalente
algorithme.
Ecrire un algorithme permettant
n et la valeur des résistances sont
de calculer la valeur de la
lus au clavier.
résistance équivalente à n
résistances placées :
Exercice 8.1 : en série
n
Rs Ri R1 R2 Rn
i 1
Exercice 8.2 en parallèle
R1
1
Rp n
1 R2
Ri
i 1
Rn
86
V. 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 87
87
V. Instructions exécutables
Exercice 13 ALGORITHME mystere2
Exercice 12 :
VAR x, y, z, u : ENTIER
DEBUT
ALGORITHME mystere1
LIRE(x, y)
VAR x, y : ENTIER
ux
DEBUT
z0
x0
TANTQUE(u 0)
REPETER
DEBUT
LIRE(y)
zz+y
SI( y > x) ALORS
uu-1
xy
FIN
JUSQUA(y = 0)
ECRIRE(z)
ECRIRE(x) Questions :
FIN
FIN
1. Que fait cet algorithme ?
Questions : 2. Que se passe t-il si x < 0 ?
Que fait cet algorithme ? 3. Proposer une solution
Remplacer la boucle 4. Proposer une solution pour les
REPETER..JUSQUA par une boucle valeurs de x et de y de signe
TANTQUE quelconque.
INP-HB/DFRMI/K. M. BROU Langage algorithmique 88
88
VI. Les sous-algorithmes
6.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.
89
max max2
ECRIRE('Maximum = ',max)
FIN
INP-HB/DFRMI/K. M. BROU Langage algorithmique 90
90
VI. Les sous-algorithmes
6.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.
91
92
VI. 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
93
94
VI. 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 95
95
96
VI. 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 97
97
ALGORITHME salutation
DEBUT
affMessage (*appel de la procedure affMessage*)
FIN
98
VI. 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 )!
99
100
VI. 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
101
102
VI. 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 )!
103
104
VI. 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 105
105
106
VI. 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
107
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.
108
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
109
VI. La récursivité
Exemple : n!
6.3. Récursivité directe
110
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.
111
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
112
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.
113
VI. La récursivité
114
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)
115
VI. La récursivité
Algorithmes
Analyse du problème
116
VI. La récursivité
Exécution : hanoi(3, A, B, C)
hanoi(3,A,B,C)
117
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.
118
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
119
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.
120
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.
121
122
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 123
123
124
VII. Méthode d’analyse des algorithmes
Procédure de saisie des éléments
d’un tableau
125
126
VII. Méthode d’analyse des algorithmes
Procédure tri par bulles Procédure de permutation de deux
valeurs
127
128
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.
129
130
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)
131
132
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
133
p2
c2 b
p3
p2
i 2
134
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.
135
136
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.
137
138
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.
139
140
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 :
141
142
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
143
144
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
145
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)
146
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
147
tête Pile
Chaque donnée de la pile contient une
valeur et un pointeur sur la donnée
précédemment empilée.
148
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
149
150
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
151
Ajout Retrait
D C B A
queue tête
152
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 153
153
Ancienne Ancien
file corps
Nouveau Nouvelle
corps file
Nouvelle
queue
154
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
155
sommet
A
pile sommet B
corps
sommet C
corps
sommet D
corps
corps vide
156
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
157
Cellule = ENREGISTREMENT
info :T
suivant :PtrFile
FIN
158
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 159
159
160
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
161
162
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
163
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
164