Cours 3 Fonctions Procedures
Cours 3 Fonctions Procedures
Cours 3 Fonctions Procedures
Fonctions et procédures
1
Fonctions et procédures
⚫ Certains problèmes conduisent à des programmes longs, difficiles à
écrire et à comprendre. On les découpe en des parties appelées
sous-programmes ou modules
2
Fonctions
⚫ Le rôle d'une fonction en programmation est similaire à celui d'une
fonction en mathématique : elle retourne un résultat à partir des
valeurs des paramètres
⚫ Dans ces cas on ne peut pas utiliser une fonction, on utilise une procédure
FinProcédure
⚫ Remarque : une procédure peut ne pas avoir de paramètres
6
Appel d'une procédure
⚫ L'appel d'une procédure, se fait dans le programme principale ou dans une
autre procédure par une instruction indiquant le nom de la procédure :
Procédure exemple_proc (…)
…
FinProcédure
Algorithme exepmleAppelProcédure
Début
exemple_proc (…)
…
Fin
7
Paramètres d'une procédure
⚫ Les paramètres servent à échanger des données entre le programme
principale (ou la procédure appelante) et la procédure appelée
8
Transmission des paramètres
Il existe deux modes de transmission de paramètres dans les langages de
programmation :
• Remarque : le paramètre effectif doit être une variable (et non une
valeur) lorsqu'il s'agit d'une transmission par adresse
Algorithme Test_incrementer1
variables n, m : entier
Début
n←3
m←3
incrementer1(n, m) résultat :
écrire (" n= ", n, " et m= ", m) n=3 et m=4
Fin
Remarque : l'instruction x ← x+1 n'a pas de sens avec un passage par valeur
10
Transmission par valeur, par adresse : exemples
Procédure qui calcule la somme et le produit de deux entiers :
Procédure SommeProduit (x,y: entier par valeur, som, prod : entier par adresse)
som ← x+y
prod ← x*y
FinProcédure
11
Variables locales et globales (1)
⚫ 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 ou elle a été
définie. Elle est créée à l'appel du module et détruite à la fin de son exécution
12
Variables locales et globales (2)
⚫ La manière de distinguer la déclaration des variables locales et globales
diffère selon le langage
• 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
13
Fonctions et procédures en Maple (1)
⚫ En Maple, il n'y a pas de distinction entre les notions de fonction et
procédure. Les deux se déclarent de la même façon comme suit :
⚫ Les paramètres, les variables locales et globales sont facultatifs, ils peuvent
ne pas figurer dans la déclaration
⚫ Une procédure Maple peut rendre un seul résultat (comme une fonction),
plusieurs résultats ou aucun résultat
15
Procédures Maple : remarques
⚫ Maple interdit la modification de la valeur d'un paramètre à
l'intérieur d'une procédure (pas de transmission par adresse)
⚫ En Maple, une procédure peut être appelée sans être affectée. Elle
peut aussi être affectée à une variable
> carre(1,2); 5
> a:=carre(3,3); a := 18
16
Procédures Maple : exemples (1)
> exemple:=proc(a,b)
> local c,d,e;
> c:=a+b; d:=a-b; e:=a*b;
> RETURN(c,d,e);
> d:=c+e;
> end:
17
Procédures Maple : exemples (2)
Exemple : procédure qui calcule la somme des n premiers entiers
> somme:=proc()
> local n,i,som;
> som:=0;
> n:=readstat(`entrez la valeur de n : `);
> for i from 1 to n do
> som:=som+i;
> od;
> print(`somme=`,som);
> end;
18
Récursivité
⚫ Un module (fonction ou procédure) peut s'appeler lui-même: on dit
que c'est un module récursif
⚫ Tout module récursif doit posséder un cas limite (cas trivial) qui
arrête la récursivité
20
Fonctions récursives : exercice (suite)
⚫ Une fonction itérative pour le calcul de la suite de Fibonacci :
Fonction Fib (n : entier ) : entier
Variables i, AvantDernier, Dernier, Nouveau : entier
Si (n=1 OU n=0) alors retourne (1)
Finsi
AvantDernier ←1, Dernier ←1
Pour i allant de 2 à n
Nouveau← Dernier+ AvantDernier
AvantDernier ←Dernier
Dernier ←Nouveau
FinPour
retourne (Nouveau)
FinFonction
Remarque: la solution récursive est plus facile à écrire
21
Procédures récursives : exemple
⚫ Une procédure récursive qui permet d'afficher la valeur binaire d'un entier n
22