Vous êtes sur la page 1sur 8

Cours de Programmation par Ecclsiaste DEUDJUI (+237) 9 !

9 37 clesio7"#a$oo%&r


1
CHAPITRE 6 :
PROCDURES ET FONCTIONS


Tous les algorithmes que nous avons tudis jusqu prsent taient constitus dun
seul bloc (dit principal). Dans certains cas le programmeur peut vouloir dcrire et
sauvegarder un enchanement dactions qui nexiste pas de faon standard dans le
compilateur (ou linterprteur). Cette sauvegarde lui permettra dutiliser cet enchanement
autant de fois quil en aura besoin dans le programme, et cela au moyen dun simple appel.
Cet usage est pratique lorsquon fait face un algorithme complexe. Le programmeur
dcompose donc le problme en mini-blocs ayant chacun un rle bien prcis. Ces mini-
blocs sont des sous-programmes (sous-algorithmes) appels Procdures ou Fonctions.

I- PROCDURES
I-1) Dfinition :
Comme son nom lindique, une procdure cest le droulement classique dun
processus. Elle peut tre judiciaire, culinaire, mathmatique, informatique, etc. Mais dans
tous les cas elle est toujours dclenche par quelque chose ou bien par quelquun. On peut
galement dire quune procdure est une fonction qui ne renvoie pas de rsultat.
I-2) Structure :
Une procdure est un mini-programme quon dclare en gnral dans la partie rserve
aux variables, ce afin de pouvoir utiliser les variables globales. tant donn quil sagit dun
bloc part entire, elle possdera ventuellement un en-tte, une srie de traitements, et
une gestion des rsultats tout comme lalgorithme qui la contient. En outre, une procdure
peut galement recevoir des arguments qui lui seront alors passs en paramtres.
La dclaration dune procdure se fait comme suit :
Cours de Programmation par Ecclsiaste DEUDJUI (+237) 9 ! 9 37 clesio7"#a$oo%&r


2
PROCEDURE <nom_de_la_procedure> [ (liste des paramtres : type) ]
Var : liste des variables
DEBUT {corps de la procdure}
<LISTE DES ACTIONS> {la liste ne doit pas tre vide}
FINPROCEDURE
Remarques :
lorsque la dclaration ci-dessus est faite, il suffit ensuite dcrire le nom de la
procdure dans le bloc principal pour dclencher la liste des actions dcrites.
Une procdure peut appeler dautres sous-programmes dfinis avant elle.
La liste des paramtres est facultative. Mais quand elle existe, ces paramtres sont
dclars de la mme faon quon dclare une srie de variables de diffrents types.
Les variables dclares lintrieur de la procdure sont inutilisables lextrieur du
bloc. Si leur type est prdfini, alors ce type sera dclar dans len-tte du bloc
principal. Idem pour les paramtres de la procdure au cas o il en existe.

EXEMPLE : voici un algorithme utilisant une procdure qui fait une somme de N nombres.
Algorithme essai_procedure
Const N=100
Var i, s : entier
Procedure Somme
DEBUT
S 0
POUR i 1 A N FAIRE
S s + i
FINPOUR
Cours de Programmation par Ecclsiaste DEUDJUI (+237) 9 ! 9 37 clesio7"#a$oo%&r


3
Ecrire(La somme des , N, premiers nombres est , s)
FINPROCEDURE
DEBUT
somme
FIN

II- FONCTIONS
II-1) Dfinition :
De la mme manire quune procdure, une fonction est un sous-programme destin
effectuer un enchanement de traitements laide dun simple appel. Cependant, une
fonction a pour but principal deffectuer un calcul puis de renvoyer un rsultat.
II-2) Structure :
Une fonction est un mini-programme quon dclare dans la partie rserve aux
variables, ce afin de pouvoir utiliser les variables globales. tant donn quil sagit dun bloc
part entire, elle possdera ventuellement un en-tte, une srie de traitements, et une
gestion des rsultats tout comme lalgorithme qui la contient. En outre, une fonction peut
galement recevoir des arguments qui lui seront alors passs en paramtres. Dclaration :
FONCTION <nom_de_la_fonction> [ (liste des paramtres : type) ] : type_fonction
Var : liste des variables
DEBUT {corps de la fonction}
<LISTE DES ACTIONS> {la liste ne doit pas tre vide}
<nom_de_la_fonction> rsultat_des_calculs
FINFONCTION
Remarques :
Dans le bloc principal il suffit dcrire le nom de la fonction pour dclencher le calcul.
Cours de Programmation par Ecclsiaste DEUDJUI (+237) 9 ! 9 37 clesio7"#a$oo%&r


4
tant donn quune fonction a pour but principal de renvoyer une valeur, il est donc
ncessaire de prciser le type de la fonction qui est en ralit le type de cette valeur.
Une fonction peut appeler dautres sous-programmes dfinis avant elle.
On peut utiliser le nom dune fonction presque comme une variable globale,
puisquelle renferme une valeur (affectation, affichage, mais pas lecture)
La liste des paramtres est facultative. Mais quand elle existe, ces paramtres sont
dclars de la mme faon quon dclare une srie de variables de diffrents types.
Les variables dclares lintrieur de la fonction sont inutilisables lextrieur du
bloc. Si leur type est prdfini, alors ce type sera dclar dans len-tte du bloc
principal. Idem pour les paramtres de la fonction au cas o il en existe.
lintrieur du sous-programme le nom de la fonction ne doit figurer quen recevant
le rsultat final ; sinon la fonction risque de sappeler indfiniment et donc de
provoquer un bug (voir Rcursivit).

EXEMPLE : voici un algorithme utilisant une fonction qui calcule la somme de N nombres.
Algorithme essai_fonction
Const N=100
Var i : entier
Fonction Somme : entier
Var s : entier
DEBUT
S 0
POUR i 1 A N FAIRE
S s + i
FINPOUR
Somme s
Cours de Programmation par Ecclsiaste DEUDJUI (+237) 9 ! 9 37 clesio7"#a$oo%&r


5
FINFONCTION
DEBUT
Ecrire(La somme des , n, premiers nombres entiers est , somme)
FIN

III- LES PARAMTRES DUN SOUS-PROGRAMME
III-1) Gnralits :
Avant de voir comment un sous-bloc exploitera ses paramtres, voici quelques notions :
Une variable globale est une variable dfinie dans len-tte du programme principal.
Elle est utilisable dans nimporte quel sous-programme sans ncessit de redfinition.
Toutefois, si dans un sous-bloc il existe une variable qui porte le mme nom que la variable
globale, alors cest cette variable locale qui sera considre lintrieur du sous-bloc.
Une variable locale est une variable dfinie lintrieur dun sous-programme. Sa
porte (visibilit) est limite au bloc qui la contient. Il serait donc erron de lutiliser dans le
bloc principal ou dans un autre sous-bloc appartenant lalgorithme.
Considr comme une variable locale, un paramtre est une valeur du bloc principal
dont le sous-programme a besoin pour excuter avec des donnes relles lenchanement
dactions quil est charg deffectuer. On distingue 2 types de paramtres :
o Les paramtres formels qui sont la dfinition du nombre et du type de valeurs que
devra recevoir le sous-programme pour se mettre en route avec succs. On dclare les
paramtres formels pendant la dclaration du sous-programme.
o Les paramtres effectifs qui sont des valeurs relles (constantes ou variables) reues
par le sous-programme au cours de lexcution du bloc principal. On les dfinit
indpendamment chaque appel du sous-programme dans lalgorithme principal.
III-2) Fonctionnement et utilisation des paramtres :
Lorsque la dclaration dun sous-programme comporte des paramtres formels, ceux-ci
doivent tre reprsents chacun par son identificateur ainsi que par son type.
Cours de Programmation par Ecclsiaste DEUDJUI (+237) 9 ! 9 37 clesio7"#a$oo%&r


6
Ainsi pendant la construction de lalgorithme principal, il faudra toujours veiller ce que
chaque appel du sous-programme soit suivi dune liste de paramtres effectifs
correspondant (en nombre, rang, et type) la liste des paramtres formels. Cependant les
noms des paramtres de mme ordre ne sont pas obligatoirement identiques.
On a vu plus haut quun paramtre effectif pouvait tre une constante ou une variable.
Lorsquil sagit dune variable, 2 cas de figures se proposent :
1) Utiliser la valeur de la variable et la sortie du sous-programme lui restituer cette
valeur malgr les ventuelles modifications subies. On parle de passage de
paramtre par valeur.
2) Utiliser la variable elle-mme et lui attribuer dans le bloc principal les
modifications rencontres dans le sous-programme. On parle de passage de
paramtre par adresse.
NB : un sous-programme avec paramtres est trs utile parce quil permet de rpter
une srie doprations complexes pour des valeurs quon ne connat pas lavance.
A- Passage de paramtres par valeur
Comme on la dit, passer un paramtre par valeur revient nutiliser que la valeur de la
variable au moment o elle est passe en paramtre. la fin de lexcution du sous-
programme, la variable conservera sa valeur initiale.
Syntaxe : PROCEDURE <nom_procdure> (param1 :type1 ; param2, param3 :type2)
B- Passage de paramtres par adresse (ou par variable)
Ici, il sagit non plus dutiliser simplement la valeur de la variable, mais galement son
emplacement dans la mmoire (do lexpression par adresse ). En fait, le paramtre
formel se substitue au paramtre effectif durant le temps dexcution du sous-programme.
Et la sortie il lui transmet sa nouvelle valeur.
Un tel passage de paramtre se fait par lutilisation du mot-cl var (uniquement sur le
paramtre formel, et jamais sur un paramtre effectif).
Syntaxe : FONCTION <nom_fonction> (VAR param1 :type1 ; param2 :type2) : entier
NB : les paramtres passs par valeur et par adresse peuvent cohabiter lintrieur dun
mme sous-programme.
Cours de Programmation par Ecclsiaste DEUDJUI (+237) 9 ! 9 37 clesio7"#a$oo%&r


7

EXEMPLE : crire un algorithme dans lequel une fonction utilise le rsultat dune procdure
Produit de 2 entiers pour en calculer le carr. Calculer ensuite le carr de ce carr.
Algorithme produit_carre
Var nbre1, nbre2 : entier
produit : rel
Procedure multiplier(nbre1, nbre2 : entier)
DEBUT
produit nbre1 * nbre2
Ecrire(Le rsultat de ce produit est , produit)
FINPROCEDURE
Fonction carre(var racine : rel) : rel
DEBUT
Racine racine * racine
carre racine
FINFONCTION
DEBUT
Ecrire(entrer les deux nombres quil faudra multiplier)
Lire(nbre1, nbre2)
Multiplier(nbre1, nbre2)
Ecrire(Le carr de cette multiplication est , carre(produit))
Ecrire(Le carr de ce carr sera alors , carre(produit))
FIN

Cours de Programmation par Ecclsiaste DEUDJUI (+237) 9 ! 9 37 clesio7"#a$oo%&r


8

TRAVAUX DIRIGS
1. crire un algorithme utilisant une procdure qui permet de saisir un nombre entier positif
et dafficher un message indiquant si ce nombre est premier ou pas.
2. crire programme permettant lutilisateur de saisir un nombre entier positif. En se
servant dune fonction boolenne, le programme principal affichera ensuite un message
indiquant si cet entier est premier ou pas.
3. crire un programme dans lequel une procdure prend en paramtres un prnom et un
ge. La procdure affichera ensuite un message disant BONJOUR, PRENOM, puis
indiquera sil sagit dun enfant (-20), dun adulte (-50), ou dune personne ge.
4. crire un programme dans lequel une fonction prend 3 paramtres a, b et c, et renvoie
ensuite le rsultat de lquation ax+b=c
5. crire un sous-programme (procdure ou fonction) qui prend en paramtres 2 entiers p et
n rentrs par lutilisateur dans le bloc principal, et qui calcule ensuite la valeur p
n
. p devra
changer de valeur pour prendre cette nouvelle valeur.
6. Concevoir une fonction boolenne qui prend en paramtre une variable de type tableau, et
qui prend la valeur VRAI si la somme des lments contenus dans ce tableau est paire.
7. crire une procdure qui prend en paramtres une matrice M et un entier i, et qui ensuite
permet de remplir uniquement les cases de la i
me
ligne.