Vous êtes sur la page 1sur 34

Chap 2: Procédures et fonctions

«Pour maîtriser la complexité du problème à résoudre, diviser chacune des


Dificutés que j'examnerais en autant de parcelles qu'il pourrait et qu’il

serait requis pour mieux le résoudre» Descartes

◆ stratégie "diviser pour régner"

Code du cours : 3afjxem 1


Procédures et fonctions
◆ Si vous avez un gros programme à mettre au point, et que certaines

parties sont semblables, ou d'autres très complexes :

▪ répéter le code correspondant autant de fois que nécessaire.


▪ la structure d'un programme écrit de cette manière est lourde.

Solution:
▪ Séparer ce traitement du corps du programme et à regrouper les
instructions qui le composent en un module séparé.

permet d’alléger le programme, de faciliter sa maintenance, de


le structurer et d ’améliorer sa lisibilité.

Code du cours : 3afjxem 2


Procédures et fonctions
Analyse descendante :

◆ Objectifs: Méthode pour écrire un algorithme de qualité.

◆ Principe:
■ Décomposer: Décomposer la résolution en une suite de “sous-
problèmes” que l’on considère comme résolus.

■ Combiner: Résoudre le problème par combinaison des abstractions


des “sous-problèmes”.

Code du cours : 3afjxem 3


Procédures et fonctions
Exemple :
◆ Il nous est demandé d’écrire un algorithme qui calcul la partie entière de
deux nombres réels puis d’afficher la plus grande valeur des deux avant de
calculer la somme et la moyenne des deux nombres entiers obtenus.

■ Que faire ? décomposer le problème en sous problèmes et trouver une


solution à chacun puis regrouper le tout dans un seul algorithme

◆ En Algorithmique, chaque solution partielle donne lieu à un sous-algorithme


qui fera partie d’un algorithme complet pour pouvoir être exécuté.

Code du cours : 3afjxem 4


Procédures et fonctions
Exemple :
◆ Mauvaise structure :
...
Ecrire (" Etes-vous Informaticien ? ")
Rep1 ← " " ▪ Bonne structure :
Tantque rep1 <> "Oui" et rep1<> "Non" Sous-algorithme Réponse(): chaine
Ecrire ("Taper Oui ou Non :") Variable Rep:chaine
Lire (rep1) Début
FinTantQue
Rep← ""
...
Ecrire (" Avez-vous une licence SMI ? ") Tantque Rep <> "Oui" et Rep<> "Non"
Rep2 ← " " Ecrire ("Taper Oui ou Non :")
Tantque rep2 <> "Oui" et rep2<> "Non" Lire (Rep)
Ecrire ("Taper Oui ou Non :") FinTantQue
Lire (rep2) Retourne Rep
FinTantQue Fin
Code du cours : 3afjxem 5
Procédures et fonctions
Définitions :
◆ Un sous-algorithme est un bloc faisant partie d’un algorithme. Il est
déclaré dans la partie entête (avant le début de l’algorithme) puis
appelé dans le corps de l’algorithme.

◆ Étant donné qu’il s’agit d’un bloc à part entière, il possède


éventuellement un en-tête, une série de traitements, et une gestion
des résultats tout comme l’algorithme qui le contient.

Code du cours : 3afjxem 6


Procédures et fonctions
Définitions :
◆ Un sous-algorithme utilise les variables déclarées dans l’algorithme
(appelées variables globales).

◆ Il peut aussi avoir ses propres variables (dites locales) déclarées dans
l’espace qui lui est réservé ; mais qui ne peuvent être utilisées que
dans ce sous-algorithme et nulle part ailleurs car sa portée (visibilité)
est limitée au bloc qui la contient.

◆ L’espace de ces variables locales n’est réservé que lorsque le sous-


algorithme est appelé et est libéré dès la fin de l’exécution.

Code du cours : 3afjxem 7


Procédures et fonctions
Définitions :
◆ Un sous-algorithme est déclaré de manière générale c-à-d qu’il peut
être appelé plusieurs fois avec différentes valeurs grâce à des
arguments appelés aussi « paramètres ».

◆ On distingue deux types de paramètres:


■ Les paramètres formels

■ Les paramètres effectifs

Code du cours : 3afjxem 8


Procédures et fonctions
Types de paramètres:
■ Les paramètres formels sont la définition du nombre et du type de
valeurs que devra recevoir le sous-algorithme pour se mettre en route
avec succès.
-On déclare les paramètres formels pendant la déclaration du sous-
algorithme => ils sont abstraits (n'existent pas réellement).

■ Les paramètres effectifs sont des valeurs réelles (constantes ou


variables) reçues par le sous-algorithme au cours de l’exécution du bloc
principal.
-On les définit indépendamment à chaque appel du sous-algorithme
dans l’algorithme principal.

les paramètres effectifs remplacent les paramètres formels au moment


de l'appel du sous algorithme
Code du cours : 3afjxem 9
Procédures et fonctions
Exemple:
■ Algorithme permettant de calculer le produit de deux nombres entiers

Sous-algorithme Produit(a:entier, b:entier): entier


Variable Res: entier
Début
Paramètres formels
Res ← 0
Res ← a*b
Retourne Res
Fin

….. // lors de l’exécution


Paramètres effectifs
Écrire(Produit (12,3))
Écrire(Produit(n, m))

……
Code du cours : 3afjxem 10
Procédures et fonctions

Types de sous-algorithmes :
Un sous-algorithme peut se présenter sous forme de
fonction ou de procédure.

Code du cours : 3afjxem 11


Procédures

◆ Dans certains cas, on peut avoir besoin de répéter une tache dans
plusieurs endroits du programme, mais que dans cette tache on ne
calcule pas de résultats ou qu'on calcule plusieurs résultats à la fois.

Dans ce cas on utilise une « Procédure »


◆ Une procédure est un bloc d’instructions nommé et déclaré dans
l’entête de l’algorithme et appelé dans son corps à chaque fois que le
programmeur en a besoin: Il ne retourne pas de résultats

Code du cours : 3afjxem 12


Procédures
◆ Quand réaliser une procédure
On doit réaliser une procédure à chaque fois que l ’analyse d’un
problème conduit à identifier une tâche.

◆ Spécifier une procédure : c ’est identifier :


1) l’action réalisé par cette procédure
2)les paramètres formels, c ’est à dire, l’ensemble des données
nécessaires, ainsi que leur type

Remarque :
■ Le nombre de paramètres effectifs doit être égal au nombre de paramètres
formels. L'ordre et le type des paramètres doivent correspondre

■ Une procédure peut ne pas avoir de paramètres


Code du cours : 3afjxem 13
Procédures
Déclaration d’une procédure :

Procédure Nom_Procédure (Nom_Paramètre1: Type_praramètre1,…)


Déclaration // Variables
Nom_variable : Type_variable Variables locales

Début

Instructions Corps de la procédure

Fin

◆ Remarque : On ne peut pas affecter la procédure appelée ou l'utiliser dans


une expression. L'appel d'une procédure est une instruction autonome

Code du cours : 3afjxem 14


Procédures
Exemple: Voici un algorithme utilisant une procédure qui calcule une somme
de 100 nombres.
Algorithme Test_Somme
Procedure Somme ()
Variables
I, S : entier
Debut /*Début de la Procédure*/
S ← 0
Pour I ← 1 a 100
Faire S ← S + i
FinPour
Ecrire ("La somme des 100 premiers nombres est:", S)
Fin /*Fin de la Procédure*/
Debut /*Début de l’algorithme principale*/
Somme()
Fin. /*Fin de l’algorithme principale */
Code du cours : 3afjxem 15
Procédures et fonctions
Variables locales et Variables globales
❖ Une variable locale est une variable qui pourra être reconnu uniquement à
l'intérieur d'un sous-programme (procédure ou fonction).

Exemple : la variable "i" dans la procédure fact ( )


❖ Contrairement, une variable globale est une variable qui est reconnu dans
tout l'algorithme (principal et sous-programmes)

Exemple : La variable "N"


➢ Exemple
Procedure fact(x:entier)
Variables f, i: entiers //Algorithme_principal
Algorithme calcul_Factorielle
Debut
f←1 Variables N : entier
pour i de 1 à x Faire Debut
f ← f*i ecrire("Entrez un nombre:")
FinPour lire(N)
ecrire("La factorielle de ",x," est ",f) fact(N)
Fin Fin
Code du cours : 3afjxem 16
Procédures et fonctions
Variables locales et Variables globales

■ Remarques
❖ Un bon programme doit contenir le minimum possible des variables globales
➢ Raison : une variable globale dure toute la vie du programme (c.à.d. elle
occupe une place mémoire du début jusqu'à la fin d'exécution d'un
programme)
tandis que
une variable locale prenne une place mémoire au moment de l'appel d'un
sous-programme et disparaisse après l'exécution de ce sous-programme.

Economiser la mémoire et assurer l'indépendance de la procédure ou de la


fonction

Code du cours : 3afjxem 17


Fonctions
En général, le rôle d'une fonction est le même que celui d'une procédure.

Il y a cependant quelques différences :


■ renvoi d'une valeur unique
◆ Une fonction n’affiche jamais la réponse à l’écran car elle la renvoie
simplement à l’algorithme appelant.
■ la fonction est typé
◆ Type de la fonction : entier, réel, booléen, chaine, …
◆ Exemple :
F: R → R
x → ax+b

■ Incorporation dans une expression :


Si F(x0) > 10 alors ...
■ Affectation:
val ← f(x0)
Code du cours : 3afjxem 18
Procédures et fonctions
Déclaration d’une fonction:

Fonction Nom_Fonction (Nom_Paramètre1:Type_praramètre1,…): Type_fonction


Déclaration
Nom_variable : Type_variable Variables locales

Début

Instructions Corps de la fonction
retourne Résultat
Fin

Appel de la fonction : La fonction est appelée depuis un algorithme principal,


ou depuis une autre fonction (ou procédure), dans l'expression où le résultat
qu'elle renvoie doit être utilisé.
Code du cours : 3afjxem 19
Procédures et fonctions
Exemple 1:Algorithme calculant 2n à l’aide d’une fonction :
Fonction DeuxPuiss(n: entier): entier
Variables locales puiss, i: entiers
Début
puiss ← 1
pour i ← 0 à n-1 pas 1 faire
puiss ← puiss * 2
finpour
retourne puiss
Fin
Algorithme Test_2 (programme principale)
Variables x, pce: entiers
Début
Lire(x)
pce ← DeuxPuiss(x) Lors de l'appel de DeuxPuiss(x) le
ecrire(pce) // ecrire(DeuxPuiss(x)) paramètre formel n est remplacé par
Fin le paramètre effectif x
Code du cours : 3afjxem 20
Procédures et fonctions
Exemple2: Le maximum de deux nombres réels

Fonction maxi(a:réel, b:réel):réel Algo_principal


Variables m : réel Algorithme maximum
Debut
Variables x,y : réels
Si a>b alors
m←a Debut
Sinon lire(x)
m←b lire(y)
FinSi
écrire("le maximum est :",maxi(x,y))
retourne m
Fin Fin

Code du cours : 3afjxem 21


Procédures et fonctions
Exemple3: Le maximum de trois nombres réels (fonction qui fait
appel à une fonction)

Fonction maxim(a:réel, b:réel, c:réel):réel Algo_principal


Variables m : réel Algorithme maximum
Debut Variables x,y,z : réels
Si c > maxi(a,b) alors Debut
m←c
lire(x)
Sinon
m ← maxi(a,b) lire(y)
FinSi lire(z)
retourne m Écrire ("le max est :", maxim(x,y,z))
Fin Fin

Code du cours : 3afjxem 22


Procédures et fonctions
Exemple4: La fonction Pair suivante détermine si un nombre est pair :

Fonction pair(n:entier):booléen //Algo_principal


Debut Algorithme test_pair
retourner(n%2=0) Variables x: entier
Fin
b: booléen
Debut
lire(x)
b ← pair(x)
print("le nombre",x," est-il pair?", b)
Fin

Code du cours : 3afjxem 23


Procédures et fonctions
◆ Mode de Transmission / Passage des paramètres
Il existe deux modes de transmission de paramètres dans les langages de
programmation :
◆ La transmission par valeur : les valeurs des paramètres effectifs
sont affectées aux paramètres formels correspondants au moment de
l'appel de la procédure ou de la fonction. Dans ce mode le paramètre
effectif ne subit aucune modification, car nous ne travaillons pas
directement avec la variable, mais sur une copie.
◆ Exemple 1:

24
Procédures et fonctions
◆ La transmission par valeur :
■ Exemple 2

Procédure Permuter (A: entier, B: entier)


Variables tamp: entier
Début
tamp ←A
A ← B
B ← tamp
Fin

- Nous appelons la fonction pour deux variables X et Y par: Permuter(X, Y)


- Résultat: X et Y restent inchangés !

25
Procédures et fonctions
◆ La transmission par adresse (ou par référence) :
■ les adresses des paramètres effectifs sont transmises à la procédure ou à
la fonction appelante.

■ Ici, il s’agit non plus d’utiliser simplement la valeur de la variable, mais


également son emplacement dans la mémoire (d’où l’expression « par
adresse »). En fait, le paramètre formel se substitue au paramètre effectif
durant le temps d’exécution du sous-programme et à la sortie il lui
transmet sa nouvelle valeur.

Remarque : le paramètre effectif doit être une variable (et non une valeur)
lorsqu'il s'agit d'une transmission par adresse

Code du cours : 3afjxem 26


Procédures et fonctions
◆ La transmission par adresse:
■ Exemple

Procédure Permuter (A: *entier, B: *entier)


Variables tamp: entier
Début
tamp ← *A
*A ← *B
*B ← tamp
Fin

- Nous appelons la fonction pour deux


variables X et Y par: Permuter(&X, &Y)

- Résultat: Le contenu des variables X et


Y est échangé !

27
Procédures et fonctions
◆ Exemple: Procédure qui calcule la somme et le produit de deux entiers:

Procédure SommeProduit (x,y: entiers, som, prod : *entiers)


Début
Transmission par valeur Transmission par adresse
*som ← x+y
*prod ← x*y
Fin

Code du cours : 3afjxem 28


Procédures et fonctions
Passer un tableau en paramètre à une fonction /procédure ?

◆ Lorsqu'un tableau figure en paramètre d'une fonction, il est


automatiquement converti en son adresse (plus précisément en l'adresse

de son premier élément). Passage par adresse


◆ Un tableau n'est donc jamais copié par une fonction.
◆ La méthode généralement utilisée pour passer un tableau à une fonction
c'est de passer un pointeur vers son premier élément et sa taille (si
nécessaire) comme paramètres.

Code du cours : 3afjxem 29


Procédures et fonctions
Passer un tableau en paramètre à une fonction /procédure ?
✓ Étant donné qu'un tableau est toujours converti en un pointeur vers son
premier élément, les prototypes suivants sont strictement les mêmes :

■ Procédure augmenter_tab(ptr: *entier, n_elements: entier)

■ Procédure augmenter_tab(tableau ptr[]: entier, n_elements: entier)

Procédure augmenter_tab(ptr: *entier, n_elements: entier)


Variable i: entier
Début
pour(i ← 0, i < n_elements, i++) faire
*ptr[i] ← i+2 // *(ptr+i) ← i+2
Fin

Code du cours : 3afjxem 30


Procédures et fonctions
Exemple 1: Fonction qui retourne la somme d’un tableau passer en paramètres
Algorithme Test_Tableau
Variables
(Tableau T[3]: entiers)←{2,-3,4}
som_t: entier
Fonction somme_elts (tab: *entier, n_elt: entier): entier
Variable som, i: entiers
Début
som ← 0
pour(i ← 0, i < n_elements, i++) faire
som+ ← *tab[i] // ou *(tab+i)
retourne som
Fin
Début //Appel de la fonction:
som_t←somme_elts(T,3) /* sum_t ← somme_elts(&T[0],3 ) */
Fin
Code du cours : 3afjxem 31
Procédures et fonctions
Passer un tableau en paramètre à une fonction/procédure ?
✓ Exemple 2: Fonction qui retourne le produit des éléments d’un tableau de
réels passer en paramètres

Code du cours : 3afjxem 32


Procédures et fonctions
◆ Résumé 1:
■ Un morceau de mémoire indépendant par fonction/action
■ La mémoire pour les variables locales est libérée après la fin de
l’appel de fonction.
■ Passage par valeur des paramètres :
◆ Paramètre effectifs (passé) non modifiable par la fonction

■ Lors d’un passage par valeur, il y a une copie des valeurs


◆ Variables locales et protection des paramètres effectifs
■ Passage par adresse des paramètres :
◆ paramètre effectif modifiable par la fonction en utilisant indirection (*)
sur les pointeurs

■ Lors d’un passage par adresse, il y a une copie des adresses

Code du cours : 3afjxem 33


Fonctions & Procédure
Résumé 2: Avantages des fonctions & Procédure
◆ Ne pas dupliquer du code
◆ Offrir une meilleure lisibilité car le lecteur peut comprendre ce que fait
une fonction, uniquement à la lecture de son nom, sans avoir à
déchiffrer du code.
■ Permettent de protéger les données de chaque fonction (visibilité).
◆ Partager le développement entre différentes équipes qui se
spécialisent. => Facilitent la distribution du travail.
◆ Construire des bibliothèques de fonction pour réutiliser ce qui a déjà
été fait.
• Les fonctions nous permettent de factoriser nos problèmes en
parties gérables et compréhensibles.

Code du cours : 3afjxem 34

Vous aimerez peut-être aussi