Vous êtes sur la page 1sur 8

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
Sa+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 (85)
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