Algorithmes et structures de données

publicité
1
Les Sous Algorithmes
Introduction
08/02/2012
13:15
Les Fonctions
Les Procédures
MABROUK
Mohamed
M.C.E.S.M.
1.INTRODUCTION
2

Lorsqu’une séquence d’opérations se répète plusieurs fois,
il est intéressant de faire un sous-algorithme
correspondant à ce bloc d’opérations et de l’utiliser autant
de fois que nécessaire.

Cette séquence d’opérations sera définie dans un sousalgorithme qui peut prendre la forme d’une fonction ou
d’une procédure.

De plus, un algorithme est presque toujours décomposable
en modules qui peuvent alors être définis de manière
indépendante. Cela permet de modifier éventuellement un
module sans pour autant changer le corps de l’algorithme
et de rendre l’algorithme plus compréhensible (lisibilité)

Un algorithme est alors un ensemble de procédures et/ou
de fonctions
08/02/2012
13:15
MABROUK
Mohamed
M.C.E.S.M.
3
08/02/2012
13:15
MABROUK
Mohamed
M.C.E.S.M.
2. NOTION DE BLOC DANS UN ALGORITHME
Algorithme Principal
------------Début
------------------------------------Appel_sous_algorithme 1
------------------------------------Fin
Sous_Algorithme 1
------------Début
------------------------Appel_sous_algorithme 2
--------------------Fin
Sous_Algorithme 2
------------Début
------------------------Fin
3. LES FONCTIONS
4
3.1. Définition et propriétés
•
Une fonction est un sous algorithme qui retourne une valeur
calculée en fonction des valeurs passées en entrée.
Paramètres
D’entrée
…. Fonction
Résultat
08/02/2012
13:15
•
•
MABROUK
Mohamed
M.C.E.S.M.
•
Une fonction prend zéro ou plusieurs paramètres et renvoie (ou
retourne) éventuellement un résultat .
Une fonction ne peut renvoyer qu’ une seule valeur (un seul
résultat ).
Une fonction qui ne retourne pas un résultat est une procédure.
5
3.2. Syntaxe de déclaration d’une fonction
Une fonction s'écrit en dehors de l’algorithme principal sous la forme
Fonction Identificateur(Paramètres et leurs types) : Type_retourné
<Déclaration des constantes et des variables locales et globales>
Début
<instructions constituant le corps de la fonctions>
retourner(…..)
08/02/2012
13:15
Fin.
Identificateur
: Nom que l’on doit donner à la fonction.
Paramètres et
leurs types
: Liste des paramètres formels donnés en entrée
avec leurs types.
Type_retourné : Type du résultat renvoyé par la fonction.
MABROUK
Mohamed
M.C.E.S.M.
Remarque : le corps de la fonction doit comporter une instruction de la
forme : retourner(expression) où expression est du même
type que le résultat de la fonction
6
Exemple de fonction
Soit la fonction Minimum2 suivante qui cherche et renvoie le minimum
parmi deux entiers.
Fonction Minimum2(a,b: entier) : entier
Début
Si(a ≤ b) alors
retourner(a)
08/02/2012
13:15
Sinon
retourner(b)
Finsi
Fin.
MABROUK
Mohamed
M.C.E.S.M.
Minimum2
: est le nom de la fonction.
a,b
: sont deux paramètres formels de type entier.
entier
: est le type du résultat renvoyé par Minimum2.
3.3. Variables locales et globales
7
 On peut manipuler 2 types de variables dans un module (procédure ou
fonction) : des variables locales et des variables globales. Elles se
distinguent par ce qu'on appelle leur portée (leur "champ de définition",
leur "durée de vie")
 Une variable locale n'est connue qu'à l'intérieur du module où elle a été
définie. Elle est créée à l'appel du module et détruite à la fin de son
08/02/2012
13:15
exécution
 Une variable globale est connue par l'ensemble des modules et l’algorithme
principale. Elle est définie durant toute l’application et peut être utilisée et
modifiée par les différents modules du programme
Conseil : Il faut utiliser autant que possible des variables locales plutôt que
des variables globales. Ceci permet d'économiser la mémoire et
MABROUK
Mohamed
M.C.E.S.M.
d'assurer l'indépendance de la procédure ou de la fonction.
8
3.3. Utilisation d’une fonction (Appel )
L’appel à une fonction se fait simplement en tapant le nom de la
fonction dans le corps de l’algorithme selon la syntaxe suivante
Nom_Variable  NomFonction (Paramètres effectifs)
08/02/2012
13:15
Les paramètres effectifs sont des expressions évaluées qui
remplacent les paramètres formelles dans la définition de la
fonction.
La valeur retournée par la fonction est affectée à la variable
«Nom_Variable ».
MABROUK
Mohamed
M.C.E.S.M.
9
Exemple d’utilisation de fonction
Si nous voulons faire un algorithme qui cherche le minimum parmi trois
entiers par exemple, on peut exploiter la fonction Minimum2 précédente.
Algorithme Minim
Variable
x et y vont remplacer respectivement
a et b dans la fonction Minimum2.
min2 va recevoir donc soit x soit y
x, y, z, min2,min3: entiers
08/02/2012
13:15
Début
Lire(x,y,z)
min2
Minimum2(x,y)
min3
Minimum2(min2,z)
Ecrire(min3)
Fin.
MABROUK
Mohamed
M.C.E.S.M.
min2 et z vont remplacer
respectivement a et b dans la
fonction Minimum2. min3 va
recevoir donc soit min2 soit z
ATTENTION
10
Soit la fonction Interdit suivante.
Fonction Interdit(x: entier) : entier
Début
x  x div 2
retourner(x)
08/02/2012
13:15
Fin.
L’appel de cette fonction pour x = 3 s’écrit y  Interdit(3).
L’exécution de la fonction conduit à 3  3 div 2 qui est absurde.
Dans le corps de la fonction, Il ne faut pas avoir une opération qui
MABROUK
Mohamed
M.C.E.S.M.
modifie la valeur du paramètre passé à la fonction par valeur.
REMEDE
11
Faire intervenir une autre variable locale t. On aura la fonction suivante :
Fonction Interdit(x: entier) : entier
Variable locale
t : entier
08/02/2012
13:15
Début
tx
t  t div 2
retourner(t)
Fin.
L’appel de cette fonction pour x = 3 par exemple s’écrit y  Interdit(3).
L’exécution de la fonction consiste à affecter 3 à t dans un premier temps
puis à affecter le quotion (entier) t div 2 = 1 à t et en fin à renvoyer la valeur
MABROUK
Mohamed
M.C.E.S.M.
de t (=1) à l’extérieur de la fonction Interdit. Donc y 1
12
Exemple d’exécution d’une fonction
08/02/2012
13:15
MABROUK
Mohamed
M.C.E.S.M.
08/02/2012 13:15
« Exemple de fonction»
13

But : Tester si un nombre est premier

Stratégie : Supposer que le nombre est premier jusqu’à on a trouvé un
diviseur.
Fonction Premier(Nombre : entier) : booléen
P
Vrai
Diviseur
2
Tantque (diviseur≤(Nombre div 2)) et (P = Vrai) Faire
08/02/2012
13:15
Si (Nombre Mod Diviseur = 0) Alors
P
Faux
Finsi
Diviseur
Diviseur + 1
FinTantQue
RETOURNER P;
MABROUK
Mohamed
M.C.E.S.M.
FinPremier
14
08/02/2012
13:15
Exemple d’appel de la fonction Premier :
Résultat
Premier(9)
Fonction Premier(Nombre: entier) : booléen
P
Vrai
Diviseur
2
Tantque (diviseur≤(Nombre div 2)) et (P = Vrai) Faire
Si (Nombre Mod Diviseur = 0) Alors
P
Faux
Finsi
Diviseur
Diviseur + 1
FinTantQue
RETOURNER P;
FinPremier
Trace
Nombre
9
MABROUK
Mohamed
M.C.E.S.M.
P
Diviseur
Résultat
15
08/02/2012
13:15
Exemple d’appel de la fonction Premier :
Résultat
Premier(9)
Fonction Premier(Nombre: entier) : booléen
P
Vrai
Diviseur
2
Tantque (diviseur≤(Nombre div 2)) et (P = Vrai) Faire
Si (Nombre Mod Diviseur = 0) Alors
P
Faux
Finsi
Diviseur
Diviseur + 1
FinTantQue
RETOURNER P;
FinPremier
Trace
Nombre
P
9
Vrai
MABROUK
Mohamed
M.C.E.S.M.
Diviseur
Résultat
16
08/02/2012
13:15
Exemple d’appel de la fonction Premier :
Résultat
Premier(9)
Fonction Premier(Nombre : entier) : booléen
P
Vrai
Diviseur
2
Tantque (diviseur≤(Nombre div 2)) et (P = Vrai) Faire
Si (Nombre Mod Diviseur = 0) Alors
P
Faux
Finsi
Diviseur
Diviseur + 1
FinTantQue
RETOURNER P;
FinPremier
Trace
Nombre
P
Diviseur
Vrai
2
9
MABROUK
Mohamed
M.C.E.S.M.
Résultat
17
08/02/2012
13:15
Exemple d’appel de la fonction Premier :
Résultat
Premier(9)
Fonction Premier(Nombre : entier) : booléen
P
Vrai
Diviseur
2
Tantque (diviseur≤(Nombre div 2)) et (P = Vrai) Faire
Si (Nombre Mod Diviseur = 0) Alors
P
Faux
Finsi
Diviseur
Diviseur + 1
FinTantQue
RETOURNER P;
FinPremier
Trace
Nombre
P
Diviseur
Vrai
2
9
MABROUK
Mohamed
M.C.E.S.M.
Résultat
18
08/02/2012
13:15
Exemple d’appel de la fonction Premier :
Résultat
Premier(9)
Fonction Premier(Nombre : entier) : booléen
P
Vrai
Diviseur
2
Tantque (diviseur≤(Nombre div 2)) et (P = Vrai) Faire
Si (Nombre Mod Diviseur = 0) Alors
P
Faux
Finsi
Diviseur
Diviseur + 1
FinTantQue
RETOURNER P;
FinPremier
Trace
Nombre
P
Diviseur
Vrai
2
9
MABROUK
Mohamed
M.C.E.S.M.
Résultat
19
08/02/2012
13:15
Exemple d’appel de la fonction Premier :
Résultat
Premier(9)
Fonction Premier(Nombre : entier) : booléen
P
Vrai
Diviseur
2
Tantque (diviseur≤(Nombre div 2)) et (P = Vrai) Faire
Si (Nombre Mod Diviseur = 0) Alors
P
Faux
Finsi
Diviseur
Diviseur + 1
FinTantQue
RETOURNER P;
FinPremier
Trace
Nombre
P
Diviseur
Vrai
2
9
3
MABROUK
Mohamed
M.C.E.S.M.
Résultat
20
08/02/2012
13:15
Exemple d’appel de la fonction Premier :
Résultat
Premier(9)
Fonction Premier(Nombre : entier) : booléen
P
Vrai
Diviseur
2
Tantque (diviseur≤(Nombre div 2)) et (P = Vrai) Faire
Si (Nombre Mod Diviseur = 0) Alors
P
Faux
Finsi
Diviseur
Diviseur + 1
FinTantQue
RETOURNER P;
FinPremier
Trace
Nombre
P
Diviseur
Vrai
2
9
3
MABROUK
Mohamed
M.C.E.S.M.
Résultat
21
08/02/2012
13:15
Exemple d’appel de la fonction Premier :
Résultat
Premier(9)
Fonction Premier(Nombre : entier) : booléen
P
Vrai
Diviseur
2
Tantque (diviseur≤(Nombre div 2)) et (P = Vrai) Faire
Si (Nombre Mod Diviseur = 0) Alors
P
Faux
Finsi
Diviseur
Diviseur + 1
FinTantQue
RETOURNER P;
FinPremier
Trace
Nombre
P
Diviseur
Vrai
2
9
3
MABROUK
Mohamed
M.C.E.S.M.
Résultat
22
08/02/2012
13:15
Exemple d’appel de la fonction Premier :
Résultat
Premier(9)
Fonction Premier(Nombre : entier) : booléen
P
Vrai
Diviseur
2
Tantque (diviseur≤(Nombre div 2)) et (P = Vrai) Faire
Si (Nombre Mod Diviseur = 0) Alors
P
Faux
Finsi
Diviseur
Diviseur + 1
FinTantQue
RETOURNER P;
FinPremier
Trace
Nombre
P
Diviseur
Vrai
2
9
3
MABROUK
Mohamed
M.C.E.S.M.
Faux
Résultat
23
08/02/2012
13:15
Exemple d’appel de la fonction Premier :
Résultat
Premier(9)
Fonction Premier(Nombre : entier) : booléen
P
Vrai
Diviseur
2
Tantque (diviseur≤(Nombre div 2)) et (P = Vrai) Faire
Si (Nombre Mod Diviseur = 0) Alors
P
Faux
Finsi
Diviseur
Diviseur + 1
FinTantQue
RETOURNER P;
FinPremier
Trace
Nombre
P
Diviseur
Vrai
2
9
3
MABROUK
Mohamed
M.C.E.S.M.
Faux
4
Résultat
24
08/02/2012
13:15
Exemple d’appel de la fonction Premier :
Résultat
Premier(9)
Fonction Premier(Nombre : entier) : booléen
P
Vrai
Diviseur
2
Tantque (diviseur≤(Nombre div 2)) et (P = Vrai) Faire
Si (Nombre Mod Diviseur = 0) Alors
P
Faux
Finsi
Diviseur
Diviseur + 1
FinTantQue
RETOURNER P;
FinPremier
Trace
Nombre
P
Diviseur
Vrai
2
9
3
MABROUK
Mohamed
M.C.E.S.M.
Faux
4
Résultat
25
08/02/2012
13:15
Exemple d’appel de la fonction Premier :
Résultat
Premier(9)
Fonction Premier(Nombre : entier) : booléen
P
Vrai
Diviseur
2
Tantque (diviseur≤(Nombre div 2)) et (P = Vrai) Faire
Si (Nombre Mod Diviseur = 0) Alors
P
Faux
Finsi
Diviseur
Diviseur + 1
FinTantQue
RETOURNER P;
FinPremier
Trace
Nombre
P
Diviseur
Vrai
2
Résultat
9
3
MABROUK
Mohamed
M.C.E.S.M.
Faux
4
Faux
26
08/02/2012
13:15
Exemple d’appel de la fonction Premier :
Résultat
Premier(9)
Fonction Premier(Nombre : entier) : booléen
P
Vrai
Diviseur
2
Tantque (diviseur≤(Nombre div 2)) et (P = Vrai) Faire
Si (Nombre Mod Diviseur = 0) Alors
P
Faux
Finsi
Diviseur
Diviseur + 1
FinTantQue
RETOURNER P;
FinPremier
Trace
Nombre
P
Diviseur
Vrai
2
Résultat
9
3
MABROUK
Mohamed
M.C.E.S.M.
Faux
4
Faux
4. LES PROCEDURES
27
Dans certains cas, on peut avoir besoin de répéter une tâche dans
plusieurs endroits d’un algorithme, mais que dans cette tâche on ne
calcule pas de résultats ou qu'on calcule plusieurs résultats à la fois.
08/02/2012
13:15
Dans ces cas on ne peut pas utiliser une fonction
on utilise donc une procédure
4.1. Définition
Une procédure est un sous-algorithme semblable à une fonction
MABROUK
Mohamed
M.C.E.S.M.
mais qui ne retourne rien à l’extérieur de la procédure.
28
4.2. Syntaxe de déclaration d’une procédure
Une Procédure s'écrit en dehors de l’algorithme principal sous la forme
Procédure Identificateur(Paramètres et leurs types)
<Déclaration des constantes et des variables locales et globales>
Début
08/02/2012
13:15
<instructions constituant le corps de la procédure>
Fin.
Identificateur
: Nom que l’on doit donner à la procédure.
Paramètres et
: Liste des paramètres formels donnés en entrée
leurs types
MABROUK
Mohamed
M.C.E.S.M.
avec leurs types.
Remarque : une procédure peut ne pas avoir des paramètres formels.
29
4.3. Utilisation d’une Procédure (Appel )
 L'appel d'une procédure, se fait dans l’algorithme principale
ou dans une autre procédure ou fonction par une instruction
.
indiquant le nom de la procédure selon la syntaxe suivante.
NomProcédure (Paramètres effectifs)
08/02/2012
13:15
 Les paramètres effectifs (ou paramètres d’appels) sont des
expressions évaluées qui remplacent les paramètres formelles
dans la définition de la procédure.
Remarque :
contrairement à l'appel d'une fonction, une procédure
ne peut pas être affectée ou utilisée dans une expression.
MABROUK
Mohamed
M.C.E.S.M.
L'appel d'une procédure est une instruction autonome.
30
4.4. Paramètres d’une procédure
 Les paramètres servent à échanger des données entre l’algorithme
principale (ou la procédure appelante) et la procédure appelée.
 Comme avec les fonctions :
08/02/2012
13:15
• Les paramètres placés dans la déclaration d'une procédure sont
appelés paramètres formels. Ces paramètres peuvent prendre
toutes les valeurs possibles mais ils sont abstraits (n'existent pas
réellement).
• Les paramètres placés dans l'appel d'une procédure sont appelés
paramètres effectifs (ou paramètres d’appels). Ils contiennent les
valeurs pour effectuer le traitement.
 Le nombre de paramètres effectifs doit être égal au nombre de
paramètres formels. L'ordre et le type des paramètres doivent
correspondre.
MABROUK
Mohamed
M.C.E.S.M.
31
4.5. Exemple d’application
Soit la procédure Produit suivante qui calcule et affiche le produit de deux
valeurs réelles.
Procédure Produit(a,b: réels)
Variable locales
Exemple d’appel :
P : réel
08/02/2012
13:15
Produit(2.5,9)
Début
P  a*b
Résultat de l’exécution :
Ecrire("P = ",P)
Fin.
MABROUK
Mohamed
M.C.E.S.M.
Produit
: est le nom de la procédure.
a,b
: sont deux paramètres formels de type réel.
P = 22.5
32
5. TRANSMISSION DE PARAMETRES
Il existe deux modes de transmission de paramètres :
 La transmission par valeur : les valeurs des paramètres effectifs sont
.
affectées aux paramètres formels au moment de l'appel de la procédure.
Le paramètre effectif ne subit aucune modification.
08/02/2012
13:15
 La transmission par adresse (ou par référence) : les adresses des
paramètres effectifs sont transmises à la procédure appelante. Le
paramètre effectif doit donc être une variable et non une valeur.
Le paramètre effectif subit les mêmes modifications que
le paramètre formel lors de l'exécution de la procédure.
Convention d’écriture en algorithmique
En pseudo-code (algorithmique), on va préciser explicitement le mode
MABROUK
Mohamed
M.C.E.S.M.
de transmission dans la déclaration de la procédure ou de la fonction.
5.1. Exemples de définition de procédures
33
Exemple 1: procédure de calcule de la somme et du produit de deux entiers.
Procédure SommeProduit (x,y: entier par valeur, som, prod : entier par adresse)
Début
som ← x+y
prod ← x*y
Fin
08/02/2012
13:15
Exemple 2 : Procédure qui échange le contenu de deux variables.
Procédure Echange (x : réel par adresse, y : réel par adresse)
variables
Début
z←x
x←y
y←z
MABROUK
Mohamed
M.C.E.S.M.
Fin
z : réel
34
5.2. Exemple de transmission des paramètres
Procédure incrémenter (x : entier par valeur, y : entier par adresse)
Début
x ← x+1
y ← y+1
Fin
Algorithme Test_incrémenter
08/02/2012
13:15
variables
Exemple
d’appel
n, m : entier
Début
n←3
m←3
MABROUK
Mohamed
M.C.E.S.M.
Résultat
n=3 et m=4
Conclusion
incrémenter(n, m)
l'instruction x ← x+1
écrire (" n= ", n, " et m= ", m)
n'a pas de sens avec
Fin
un passage par valeur
35
Ce cours est téléchargeable à partir du site :
http://www.mabrouk.sitew.com
08/02/2012
13:15
MABROUK
Mohamed
M.C.E.S.M.
Téléchargement