Académique Documents
Professionnel Documents
Culture Documents
COURS ALGORITHME.STRUCTURE DE
DONNÉES ET PROGRAMMATION
Chapitre 2
Fonctions et Procédures
July 8, 2019
Plan
1
Motivation
Les Fonctions
Les procédures
La Récursivité
Conclusion
• Structure
Fonction Nom_fonction (Paramètres formels) : type
Les déclarations
Début
Instructions de la procédure
Nom_fonction ← Résultat
Fin
• Appel
Remarques :
I Le nom de la fonction joue un double rôle, c’est à la fois
l’identifiant de la fonction et une variable locale.
I Dans une fonction, le passage de tous les paramètres se
fait par valeur.
• Déclarations
Procédure Nom_Procédure (arg1 : type1 , . . ., argn : typen )
Les déclarations
Début
Instructions de la procédure
Fin
• Appel
La première ligne s’appelle l’en-tête de la procédure. La liste
d’arguments est une suite de données à échanger avec
d’autres programmes.
Remarques
I La structure d’une procédure est analogue à celle d’un
algorithme. Elle possède une entête, une partie
déclarative et un corps.
I Pour appeler une procédure simple, il suffit d’écrire le nom
de cette procédure.
I Une variable locale (privée) est déclarée dans une
procédure et ne peut être utilisée qu’à l’intérieur de celle-ci.
Exemple : « i » est une variable locale à la procédure «
Centré ».
remarques
I Une variable globale (publique) est déclarée au début de
l’algorithme. Elle peut être utilisée dans le corps principal
de l’algorithme ou par les différentes procédures.
Exemple : « titre » est une constante globale.
I Il est fortement recommandée d’utiliser autant que
possible des variables locales pour rendre les modules
plus autonomes et par conséquent utilisables dans
d’autres programmes.
Définition
Une procédure paramétrée est un module qui utilise des
paramètres pour faire passer des informations entre la
procédure appelée et le programme appelant.
Nom_Procédure(pe1 , pe2 , . . . )
Remarques
I Les paramètres formels et les paramètres effectifs
correspondants doivent coïncider en nombre et en type.
I La liaison entre paramètre effectif et paramètre formel
correspondant est déduite de la position du paramètre
effectif, respectivement, formel, dans la liste des
paramètres effectifs, respectivement, formels.
Interprétation :
I Le passage de paramètres par valeur permet au
programme appelant de transmettre une valeur à la
procédure appelée.
I Le paramètre formel « i » est une variable simple.
I Le paramètre effectif correspondant « x » est une
expression de même type que le paramètre formel.
I Avant d’exécuter les instructions de la procédure la valeur
du paramètre effectif est affectée au paramètre formel.
Dans ce cas, le paramètre formel est considéré comme
une variable locale qui est initialisée lors de l’appel.
I Avant appel x = 10
I Après appel x = 10
Remarques:
I Les paramètres effectifs et les paramètres formels doivent
s’accorder du point de vue nombre et ordre.
I Leurs types doivent être identiques selon le mode de
passage des paramètres
Maroua Ben Slimane | Fonctions et Procédure
Passage de paramètres par valeur
26
conclusion
1. Le transfert d’information est effectué dans un seul sens,
du programme principal vers la procédure.
Sens de transfert :
Interprétation :
I Le passage de paramètres par variable permet au
programme appelant de transmettre une valeur à la
procédure appelée et vice-versa.
I Le paramètre formel « i » est une variable.
I Le paramètre effectif correspondant « x » doit également
être une variable du même type que le paramètre formel.
I Pendant l’exécution des instructions de la procédure, le
paramètre formel fait référence au même contenant
variable que celui désigné par le paramètre effectif.
I Avant appel x = 10
I Après appel x = 30
conclusion
1. Le transfert d’information est effectué dans les deux sens,
du programme principal vers la procédure et vice-versa.
Sens de transfert :
Énoncé
On se propose d’échanger les valeurs de deux variables a et b
saisies par l’utilisateur.
1. Écrire un algorithme Swapping1 qui contient une
procédure swap1 qui échange de valeurs de deux
variables avec un passage de paramètres par valeur.
2. Écrire un algorithme Swapping2 qui contient une
procédure swap2 qui échange de valeurs de deux
variables avec un passage de paramètres par variable.
Énoncé
Deux entiers naturels sont dit amicaux s’il sont distincts et si
chacun des deux entiers est égal à la somme des diviseurs
stricts de l’autre.
Proposez un algorithme qui détermine si deux entiers naturels,
saisis par l’utilisateur, sont amicaux ou pas.
Indication: définissez une fonction pour effectuer le calcul qui
vous semble le plus récurent.
Énoncé
Écrire une procédure PUISSANCE à 3 paramètres a, b et P qui
calcule P = ab = a ∗ a ∗ a ∗ . . . ∗ a(b fois)
Écrire l’ Algorithme principal qui permet :
I De saisir deux entiers positifs (x, et y )
I D’afficher x y
Variables Globales
I Les variables déclarées dans la rubrique variable de
l’algorithme principal sont des variables globales à tout
l’algorithme.
⇒ possible de les utiliser dans les différents modules de
traitement de l’algorithme.
I Il est rare de se trouver dans une situation où il est
indispensable d’utiliser des variables globales en dehors
du corps de l’algorithme principal.
Variables locales
I Dans un module de traitement, il est possible de déclarer
des variables dites locales au module.
I De telles variables ne peuvent être utilisées que dans le
corps de ce module.
I Si par hasard, des variables de l’algorithme principal
portent les mêmes noms que des variables locales à un
module M alors les variables de l’algorithme principal
seront masquées pendant le déroulement du module M et
on ne pourra y accéder de nouveau qu’à la fin du
déroulement du module M.
Définition
Le contexte d’un module de traitement est constitué de
l’ensemble des paramètres de ce module ainsi que de ses
variables locales.
I À titre d’exemple, le contexte de la fonction perm de
l’exemple se compose des paramètres n et x et de la
variable locale m.
Définition
Un module de traitement récursif est dit à récursion terminale
si l’appel récursif est la dernière instruction exécutée par le
module et elle est isolée
plus(4,2)=plus(5,1)=plus(6,0)=6
Maroua Ben Slimane | Fonctions et Procédure
Récursivité Non Terminale
52
Définition
L’appel récursif n’est pas la dernière instruction et/ou elle n’est
pas isolée (fait partie d’une expression)
plus(4,2)=1+plus(4,1)=1+1+plus(4,0)=1+1+4=6
Énoncé
Il s’agit d’une fonction récursive qui calcule les valeurs d’une
suite mathématique connue sous le nom de suite de Syracuse,
en référence à la ville américaine qui porte le même nom. Les
termes de cette suite sont définis par:
1 si n = 1
Un = U si n = 0 [2]
n/2
U3n+1 sinon
Dérécursification
I La dérécursification a ses avantages car, en général, une
itération est plus rapide et plus économique en espace
mémoire qu’une récursion.
I Toutefois, bien qu’il est toujours possible de dérécursifier
un module récursif, la tâche est beaucoup plus complexe
quand il s’agit d’une récursion non terminale.
Problématiques
I L’une des énigmes classiques, qui se résolvent aisément
en utilisant une récursion, est celle connue sous le nom
des tours de Hanoi.
I Il s’agit de faire déplacer un ensemble de n disques, tous
de diamètres différents, d’un pieu de départ vers un pieu
d’arrivée.
I La difficulté de la tâche provient du fait qu’il est interdit
d’empiler un disque de diamètre plus grand sur un disque
de diamètre plus petit.
I On dispose, néanmoins, d’un pieu supplémentaire qui va
permettre de contourner la difficulté.