Académique Documents
Professionnel Documents
Culture Documents
Algorithmique II
Semestre 3
Algorithmique II
Introduction générale
Fonctions et Procédures
La récursivité
Enregistrements et fichiers
La complexité
Preuves d'algorithmes
C. EL-KASRI 2
M15: Algorithmique II
Objectifs du module
3 C. EL-KASRI
Objectifs du cours
Au cours de ce semestre, nous nous positionnerons sur les 6 niveaux
de la taxonomie de Bloom1 :
1. Connaissance : mémorisation et restitution d’informations dans les
mêmes termes.
2. Compréhension : restitution du sens des informations dans d’autres
termes.
3. Application : utilisation de règles, principes ou algorithmes pour
résoudre un problème, les règles n’étant pas fournies dans l’énoncé.
4. Analyse : identification des parties constituantes d’un tout pour en
distinguer les idées.
5. Synthèse : réunion ou combinaison des parties pour former un tout.
6. Evaluation : formulation de jugements qualitatifs ou quantitatifs.
4 C. EL-KASRI
Objectifs du cours
6 C. EL-KASRI
Chapitre 1
Introduction générale
7 C. EL-KASRI
Algorithmes classiques
9 C. EL-KASRI
Algorithme
10 C. EL-KASRI
Algorithme versus programme
11 C. EL-KASRI
Algorithme
12 C. EL-KASRI
Algorithme
15 C. EL-KASRI
Chapitre 2
Les procédures et les fonctions
16 C. EL-KASRI
Plan
17 C. EL-KASRI
Pourquoi les procédures et les fonctions?
Deux raisons:
R1
Algorithme de grande taille => plus de complexité
Difficile à gérer => découper le en sous-algorithme (solution!)
R2
Une suite d'actions se répète plusieurs fois.
Ce bloc d'instruction sera réutilisé dans plusieurs endroits pour effectuer
les mêmes calculs avec des données différentes.
Solution
Il serait donc très judicieux de n'écrire ce bloc d'instructions
qu'une seule fois, et de l’utiliser autant de fois que c'est
nécessaire.
Il existe deux sorte de sous-algorithme : les procédures et les fonctions
18 C. EL-KASRI
Pourquoi les procédures et les fonctions?
Exemple : calcul de
Commet découper l’exemple précédent en sous-
algorithme?
Trois bénéfices :
améliorer la lisibilité des programmes,
optimiser le nombre d'instructions dans un
programme,
faciliter la mise au point et la correction des
erreurs.
19 C. EL-KASRI
les procédures
Définition et syntaxe
Définition:
Une procédure est une série d’instructions regroupées sous un nom, qui
permet d’effectuer des actions par un simple appel de la procédure dans un
algorithme ou dans un autre sous-algorithme
Une procédure renvoie plusieurs valeurs (pas une) ou aucune valeur
Syntaxe:
Procédure nom_proc (liste de paramètres)
Variables identificateurs: type
Debut
Instruction(s)
FinProc
Apres le nom de la proc, il faut donner la liste des paramètres (s’il y en a) avec leur
type respectif. Ces paramètres sont appelés paramètres formels. Leur valeur n’est
pas connue lors de la création de la procédure.
20 C. EL-KASRI
les procédures
Définition et syntaxe : Exemple
Exemple
Début
Pour i 1 jusqu’à 15 Faire
Ecrire("*");
FinPour
Ecrire("\n");
FinProc
21 C. EL-KASRI
les procédures
l’appel d’une procédure
23 C. EL-KASRI
les procédures
l’appel d’une procédure: Remarques
Remarque 1
Pour exécuter un algo qui contient des procédures et des
fonctions, il faut commencer l’exécution à partir de la partie
principale
Remarque 2
Lors de la conception d’un algo deux aspects
apparaissent :
La définition (déclaration) de la procédure ou fonction
L’appel de la procédure ou fonction au sein de l’algorithme
principal
24 C. EL-KASRI
les procédures
passage de paramètres
C’est quoi?
Les échanges d’informations entre une procédure et
l’algorithme appelant se font par l’intermédiaire de
paramètres.
Les paramètres formels déclarés dans une procédure doivent
être représentés leurs noms et leurs types.
Avant l'appel de la procédure dans le programme principal on
doit déclarer une liste de paramètres effectifs correspondant
(en nombre, rang, et type) à la liste des paramètres formels.
Deux types de passage
Passage par valeur
Passage par référence ou adresse
25 C. EL-KASRI
les procédures
passage de paramètres (par valeur)
26 C. EL-KASRI
les procédures
passage de paramètres (par valeur)
Exemple (TD) suite
Algorithme passage_par_valeur Appel de Proc1:
Variables n: entier
La valeur du paramètre effectif n est
// declaration de la proc
Procédure Proc1(a: entier)
recopié dans le paramètre formel a.
Variables i: entier Proc1 effectue alors le traitement et
Début
a a*2; affiche la valeur de a. Dans ce cas
Ecrire(a); 10
FinProc
// algo principal Apres l’appel de Proc1, l’algo
Début
n 5;
affiche la valeur de n. dans ce cas 5.
Proc1(n); La procédure ne modifie pas le
Ecrire(n);
Fin paramètre qui est passé par valeur.
les procédures
passage de paramètres (par valeur)
Algorithme Echange
Variables a, b, i: entiers
Exemple 2 (TD) si on donne respectivement aux
// declaration de la proc variables a et b les valeurs 8 et 3.
Procédure Proc2(x: entier, y: entier)
Variables tampon: entier
Le programme
Début affiche I=5 (le résultat de a-b).
tampon x;
Après l'appel de la procédure Proc2
x y;
y tampon; normalement a devient 3 et b
FinProc
// algo principal
devient 8 après permutation et I
Début devient -5.
Lire(a);
Mais comme le passage utilisé dans
Lire(b);
i a-b; cet exemple est un passage par
Ecrire(i);
valeur a et b reste sans
Proc2(a,b);
i a-b; changement.
Ecrire(i);
I=a-b reste tel qu'il est aussi.
Ecrire(a);
Ecrire(b);
28 C. EL-KASRI
les procédures
passage de paramètres
Remarques
Les paramètres effectifs et les paramètres formels
doivent s'accorder du point de vue nombre et ordre.
Leurs types doivent être identiques selon le mode de
passage des paramètres
Le transfert d'information est effectué dans un seul sens,
du programme principal vers la procédure.
Toute modification du paramètre formel est sans
conséquence sur le paramètre effectif.
30 C. EL-KASRI
les procédures
passage de paramètres
31 C. EL-KASRI
les procédures
passage de paramètres
Exemple
Algorithme passage_par_valeur
Variables n: entier
Appel de Proc1:
Affiche 10 : de la procédure
// declaration de la proc
Procédure Proc1(Var a: entier) Dans le PP affiche aussi 10
Variables i: entier Passage par référence (adresse).
Début
a a*2;
Ecrire(a);
FinProc
// algo principal
Début
n 5;
Proc1(n);
Ecrire(n);
Fin
32 C. EL-KASRI
les procédures
passage de paramètres
Exemple 2
Faire une exécution avec a=8 et
b=3
Interprétation :
le programme affiche les
résultats suivants :
I=5
I= -5
a=3
b=8
Ce qui explique le changement
réel des valeurs de a et b.
33 C. EL-KASRI
les procédures
passage de paramètres
Exercice
Qu’affiche à l’ecran l’algorithme
suivant?
Eléments de réponse
La présence du mot clé Var
passage de paramètre par adresse
Résultat
Avant l’appel 10 20
Début echange 10 20
Fin echange 20 10
Fin echange 20 10
Exercice 2
Enlever le mot Var et faire une
comparaison des deux algo
34 C. EL-KASRI
Les fonctions
Définition
Une fonction est une procédure particulière.
Les fonctions sont des sous algorithmes admettant des
paramètres et retournant un seul résultat de type simple
qui peut apparaitre dans une expression, dans une
comparaison, à la droite d’une affectation.
Il est obligatoire de préciser le type de la fonction(type du
résultat à retourner).
35 C. EL-KASRI
Les fonctions
Déclaration
Syntaxe
Proche de celle d’une procédure
On ajoute un type qui représente le type de retour de la
fonction.
La dernière instruction renvoie au programme appelant le
résultat de l’expression placée à la suite du mot clé Retourner.
Fonction nom_Fonction (liste de paramètres): type
Variables identificateurs: type
Debut
Instruction(s)
Retourner Expression
FinFonct
36 C. EL-KASRI
Les fonctions
Déclaration
Exemple:
Définir une fonction qui renvoie la plus grand de deux nombres différents.
// declaration de la fonction
Fonction Max (x: réel, y: réel): réel
Début
Si x > y Alors
Retourner x;
SiNon
Retourner y;
FinSi
FinFonction
37 C. EL-KASRI
Les fonctions
Appel d’une fonction
Syntaxe
Via son nom suivi des paramètres effectifs.
nom_Fonction (liste de paramètres)
Une variable locale n'est connue qu'à l'intérieur du module ou elle a été définie. Elle
est créée à l'appel du module et détruite à la fin de son exécution
Une variable globale est connue par l'ensemble des modules et le programme
principale. Elle est définie durant toute l’application et peut être utilisée et modifiée
par les différents modules du programme
29/10/2019 39
Variables locales et globales (2)
La manière de distinguer la déclaration des variables locales et globales diffère selon
le langage
En général, les variables déclarées à l'intérieur d'une fonction ou procédure sont
considérées comme variables locales
Accessible qu’à la procédure au sein de laquelle elle est définie
Les autres procédures n’y ont pas accès
Le durée de vie d’une variable locale est limité à la durée de l’exécution de la
procédure.
• En pseudo-code, on va adopter cette règle pour les variables locales et on déclarera
les variables globales dans le programme principale
Accessible de n’importe où dans l’algorithme, même depuis les procédures et les
fonction
Il existe pendant toute la durée de vie 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 d'assurer l'indépendance
de la procédure ou de la fonction
29/10/2019 40
Les fonctions
Portée des variables
Exemple