Chapitre 5
Notion de sous-programmes :
Procédures et Fonctions
I. Introduction & Définition d’un sous-programme
Rappelons que la méthodologie utilisée, pour résoudre algorithmiquement les problèmes,
était de les décomposer en sous problèmes moins compliqués à résoudre.
Un des mécanismes utilisé pour cela est les sous programmes.
Le but de ces sous programmes est donc :
définir des algorithmes indépendants réutilisables dans plusieurs contextes.
décomposer logiquement un algorithme volumineux en plusieurs parties.
Exercice : Ecrire un programme permettant de calculer le nombre de combinaison de P
dans N.
Algorithme calcul_CNP
Var
Analyse du problème : I, N, P, FN, FP, FNP, CNP: entiers;
Début
n! Lire(N) ;
CNP C np
p!(n p )! Lire(P) ;
FN (* calcule du factoriel de N : FN*)
CNP
On pose FP * FNP
FN←1 ;
Objet d’Entrées : N,P Pour i←1 à N Faire
Objet de Sortie : CNP
FN←FN*i ;
Objet Intermédiaire : FN,FP,FNP
Formules : Fin Pour
Fx=1*2*3*…………….*x ; (* calcule du factoriel de P : FP*)
FN
CNP FP←1 ;
FP * FNP . Pour i←1 à P Faire
FP←FP*i ;
Fin Pour
(*calcule du factoriel de (N-P) : FNP*)
FNP←1 ;
Pour i←1 à N-P Faire
FNP←FNP*i ;
Fin Pour
CNP←FN/(FP*FNP) ;
1 Pr. R.Allaoui
Ecrire(CNP) ;
Fin
2 Pr. R.Allaoui
Dans cet algorithme, on a calculé le factoriel de 3 nombres. Ce qui induit la répétition des
mêmes lignes (du calcul factoriel) 3 fois dans le même programme. Donc l’algorithme n’est
pas bien structuré car il contient des répétitions.
On peut structurer cet algorithme en remplaçant ces lignes (dans le programme principale) par
l’appel d’un sous-algorithme (du calcul du factoriel). Cette opération nous permettra
d’économiser beaucoup de lignes de programmation et ainsi structuré le programme.
Définition
Un sous-programme (sous-algorithme) est un ensemble de lignes qui se répètent plusieurs
fois à des endroits différents et avec des valeurs différentes dans un programme.
On prend ces lignes et on les met dans un programme à part dont le but est de constituer
un sous-programme qu’on appellera à chaque fois que l’on a besoin.
En programmation on distingue deux types de S.P : les procédures et les fonctions. Leur
différence réside dans le fait qu’une fonction renvoie une valeur résultante et peut faire partie
d’une expression alors qu’une procédure ne renvoie pas directement de valeur et ne peut pas
faire partie d’une expression.
II- Les procédures
1. Définition d’une procédure
Pour définir une procédure, il faut lui attribuer un nom (son identificateur), définir ces
paramètres et les tâches (les instructions) choisis à mettre dans cette procédure.
e1
e2
en Nom_proc
S1
S2
Sm
3 Pr. R.Allaoui
Procédure Nom_proc (e1 : type e1 , e2 : type e2 , …………….,en : type en ) (S1 : type
S1 , S2 : type S2 , …………….,Sm : type Sm )
(* déclaration des variables locales*)
Début
(*corps de la procédure*)
Fin
Les ei sont des paramètres d’entrée. La procédure (Nom_proc) a besoin des paramètres
d’entrées pour s’exécuter.
Les Si sont des paramètres de sortie et ils font partie des résultats de la procédure Nom_proc.
Exemple :
Procédure somme (a : entier, b : entier)(S :entier)
Début
Sa+b ;
Fin
( La procédure somme a besoin des paramètres d’entrées a et b pour nous préparer le résultat
qu’on récupère dans le paramètre de sortie S).
Les cas particulier :
P1()() ; (ni paramètres d’entrées ni paramètres de sorties)
P2(e1 :type e1 )() ; (pas de paramètres de sortie)
P3()(S1 :type S1 ) ; (pas de paramètres d’entrée)
2. Appel d’une procédure
' ' ' ' ' '
Nom_proc (e1 , e2 ,..........en )( S1 , S 2 ,........., S m ) ;
' '
Il doit y avoir obligatoirement correspondance entre le nombre d’éléments d’appel (ei , S i ) et
ceux de la définition (ei , S i ) ainsi que les types des différents paramètres de même ordre.
4 Pr. R.Allaoui
Remarque
Les ei et les Si sont appelés paramètres formels ou paramètres de définition car ils
interviennent dans la forme de la définition de la procédure.
' '
Les ei et les S i sont appelés paramètres réels ou paramètres d’appel car c’est eux qui
contiennent les valeurs à transmettre aux paramètres formels de la procédure.
3. Variables locales et variables globales
Reprenons l’algorithme permettant de calculer CNP en utilisant la procédure qui calcul le
factoriel. Comme les variables, une procédure avant d’être utilisée doit être déclarée c'est-à-
dire définir le nom (identificateur) et les paramètres de la procédure.
Algorithme calcul_CNP
procédure factoriel(m : entier)(F : entier) ; x
Factoriel
Var FX
N, P, FN, FP, FNP, CNP: entiers;
procédure factoriel(X : entier)(Fx : entier)
Début
Lire(N) ; Var
Lire(P) ; i: entier ;
Début
factoriel(N)( FN) ;
Fx←1 ;
factoriel(P)( FP) ; Pour i←1 à X Faire
factoriel(N-P)( FNP) ; Fx←Fx*i ;
CNP←FN/(FP*FNP) ; Fin Pour
fin
Ecrire(CNP) ;
Fin
On appelle variable locale à la procédure toute variable déclarer et utiliser à l’intérieur de la
procédure et qui ne peut pas être utilisé à l’extérieur de cette procédure c'est-à-dire à
l’intérieur du programme appelons cette procédure (programme principale, procédure ou
fonction). On appelle variable globale toute variable qui peut être utilisé partout dans le
programme.
Exemple :
Dans le cas du programme ci-dessus la variable i est une variable locale à la procédure
factorielle tandis que la variable N est une variable globale.
5 Pr. R.Allaoui
II. Les fonctions
1. Définition d’une fonction
Une fonction se définie de la même manière que la procédure, on rajoutant à la définition de
la procédure le type de la fonction c'est-à-dire le type du résultat que la fonction retourne et
l’instruction « retourne ( valeur) » dans le corps de la fonction.
e1
e2
en Nom_fonct
S1
S2
Sm
Valeur retournée par la fonction
Fonction Nom_fonct (e1 : type e1 , e2 : type e2 , …………….,en : type en ) (S1 : type S1 , S2 : type S2 ,
…………….,Sm : type Sm ) : Type_fonction
(* déclaration des variables locales*)
Var
valeur : Type_fonction ;
Début
(*corps de la procédure*)
retourne(valeur) ;
Fin
2. Appel de la fonction
Le résultat de l’appel de la fonction est une valeur. On peut trouver ces appels par tous où
l’on peut trouver consultation d’une variable. Les mécanismes mis en œuvre de l’appel sont
identiques à ceux mis en œuvre pour une procédure.
6 Pr. R.Allaoui
Exemple :
' ' '
- l’affectation R nom _ fonction(e1 , e2 )( S1 ) (R doit avoir le même type que
type_fonction).
' ' '
- Dans une expression R(2* nom _ fonction(e1 , e2 )( S1 ) )-4*a)/(c*b) ;
' ' '
- Instruction de test si nom _ fonction(e1 , e2 )( S1 ) =3 alors………
' ' '
- Affichage : écrire ( nom _ fonction(e1 , e2 )( S1 ) ) ;
Remarque :
nom _ fonction(e1' , e2' )( S1' ) 5 (85)
Cette affectation n’a aucun sens car dans ce cas on cherche à affecter une valeur à la fonction
et on ne cherche pas à consulter la valeur de la fonction (c’est comme si on voulait changer la
valeur d’une constante).
3. Résultat de la fonction
Retourne(valeur) ;
Règle :
La dernière instruction d’une fonction doit être le retour d’une valeur résultat du calcul
effectué par la fonction.
Exercice :
Ecrire une fonction permettant de calculer 2n, (n un paramètre de la fonction).
fonction calcul 2n
n
Puissance de 2
R
Fonction puissance_de_2 (n :entier)() :entier
Var
i, R :entier ;
Début
R←1 ;
Pour i←1 à n Faire
R←R*2 ;
Fin Pour
Retourne (R) ;
Fin
7 Pr. R.Allaoui
Structure d’un programme appelant cette fonction
Algorithme calcul
Var
a, p : entier ;
Début
Lire(a) ;
P←puissance_de_2(a);
Ecrire(‘le resultat est :’, P) ;
Fin
8 Pr. R.Allaoui