Académique Documents
Professionnel Documents
Culture Documents
PROCÉDURES ET FONCTIONS
D. JEBALI EP SAAD
FILIÈRE: LEEA-A1
2022-2023
Ch 4:
2
Procédures et Fonctions
LEEA-A1 D.JEBALI
Utilité des Procédures et Fonctions
3
Pourquoi écrire une fonction ?
Une fonction va permettre de réutiliser plusieurs fois du code déjà écrit (et donc, il n'est pas nécessaire de
le réécrire) Une fonction va permettre aussi de faciliter la lecture du code source et en faciliter ainsi le
débogage.
Le corps du programme s’appelle alors la procédure principale, et ces groupes d’instructions auxquels
on a recours s’appellent des fonctions et des sous-procédures
LEEA-A1 D.JEBALI
Utilité des Procédures et Fonctions
en Algorithmique
4
LEEA-A1 D.JEBALI
Utilité des Procédures et Fonctions
en C
5
LEEA-A1 D.JEBALI
LES FONCTIONS
6
Fonction est une partie d'un algorithme (ou un sous-programme) ; qui reçoit des
valeurs suite un appel.
Le type de fonction est le type du résultat retourné (Entier, réel, booléen, etc.)
L'instruction retourner sert à retourner la valeur du résultat
Une fonction peut avoir de 0 à N paramètres
Param1, param2, …, sont appelés paramètres(Arguments) : ce sont des variables
qui permettent à la fonction de communiquer avec l’extérieur.
Ces paramètres déclarés lors de la définition de la fonction sont appelés
paramètres formels.
SYNTAXE : SYNTAXE :
Fonction nom_Fonction (parm1, parm2, …) : Type_résultat Type_résultat nom_Fonction (type1 parm1, type2
parm2, …)
Début
{
Instruction 1
Instruction 1
Instruction 2 Instruction 2
...... ......
Instruction n Instruction n
Retourner résultat return résultat ;
Fin }
LEEA-A1 D.JEBALI
L’APPEL D’UNE FONCTION
en Algorithmique
7
Pour exécuter une fonction, il suffit de faire appel à elle en écrivant son nom suivi des
paramètres effectifs dans le programme principal.
Le résultat d'une fonction étant une valeur, devra être affecté à une variable où être utilisé
dans une expression, calcul, affichage, test, …etc.
Exemple1: Appel de la fonction sommeCarre qui renvoie la somme carré deux nombres.
Algorithme : Somme_deux_carre
//Déclaration de la fonction sommeCarre()
Fonction sommeCarre (x : réel, y : réel):réel
Début:
Resultat ← x*x + y*y //Algorithme principal
Retourner Resultat Début
Fin Ecrire("saisir une valeur de X ") Lire(x)
Ecrire("saisir une valeur de Y ") Lire(y)
//Appel de la fonction sommeCarre()
Rst ← sommeCarre(x, y)
Ecrire("La somme carré est :", Rst)
Fin
LEEA-A1 D.JEBALI
L’APPEL D’UNE FONCTION
en C
8
Exemple1: Appel de la fonction sommeCarre qui renvoie la somme carré deux nombres.
#include <stdio.h>
#include <stdlib.h>
//Déclaration de la fonction sommeCarre()
int sommeCarre (int x,int y)
{int Resultat; int main()
Resultat = x*x + y*y ; { int x,y, Rst;
return Resultat; printf("saisir une valeur de X ");
} scanf("%d",&x);
printf("saisir une valeur de Y ");
scanf("%d",&y);
//Appel de la fonction sommeCarre()
Rst = sommeCarre(x, y) ;
printf("La somme carré est :%d", Rst) ;
}
LEEA-A1 D.JEBALI
L’APPEL D’UNE FONCTION
en Algorithmique
9
EXEMPLE 2 :
Appel de la fonction maximum qui renvoie le maximum deux nombres.
Algorithme : maximum_deux_nombres
//Déclaration de la fonction maximum()
Fonction maximum(A : entier, B : entier) : entier
max: entier
Début //Algorithme principal
Si A>B alors Variable A,B,max : entier
max ← A Début:
sinon Ecrire("saisir une valeur de A ") Lire(A)
max ← B Ecrire("saisir une valeur de B ") Lire(B)
Fin Si //Appel de la fonction maximum()
Retourne max max ← maximum(A, B)
Fin Ecrire("Le maximum est: ",max)
Fin
LEEA-A1 D.JEBALI
L’APPEL D’UNE FONCTION
en C
10
EXEMPLE 2 :
Appel de la fonction maximum qui renvoie le maximum deux nombres.
//programme : maximum_deux_nombres
//Déclaration de la fonction maximum()
int maximum(int A , int B)
{int max;
if( A>B) max = A ;
else max = B ; // programme principal
return max ; int main()
} {
int A,B,max;
printf(" saisir une valeur de A et B ");
scanf("%d%d",&A,&B);
//Appel de la fonction maximum()
max =maximum(A, B) ;
printf("Le maximum est: %d ",max);
}
LEEA-A1 D.JEBALI
L’APPEL D’UNE FONCTION
en Algorithmique
11
EXEMPLE 3 :
Appel de la fonction saisi_max(int tmax) qui renvoie le la taille n d’un tableau qui ne
dépasse pas tmax.
Algorithme : maximum_deux_nombres
//Déclaration de la fonction maximum()
Fonction saisi_taille (tmax : entier) : entier
n: entier
Début //Algorithme principal
Repeter Variable T[1,…,30],N : entier
Ecrire(donner n <tmax) Début:
Lire (n) N← saisi_taille (30)
Jusqu’a(n>tmax) …..
Retourne n ….
Fin Fin
LEEA-A1 D.JEBALI
L’APPEL D’UNE FONCTION
en C
12
EXEMPLE 3 :
Appel de la fonction saisi_taille(int tmax) qui renvoie le la taille n d’un tableau qui ne
dépasse pas tmax.
//programme : maximum_deux_nombres
//Déclaration de la fonction maximum()
int saisi_taille (int tmax)
{int n;
Do{
Printf("donner n <%d« ); // programme principal
Scanf("%d ",&n); int main()
} {
return n; int T[30],N;
} //Appel de la fonction maximum()
N = saisi_taille (30) ;
…….
}
LEEA-A1 D.JEBALI
LES PROCEDURES
13
Une procédure est une série d'instructions regroupés sous un nom, qui permet
d'effectuer des actions par un simple appel de la procédure dans un algorithme
ou dans un autre sous-algorithme.
SYNTAXE :
Procédure nom_Procédure (parm1, parm2, …)
Début
Instruction 1
Instruction 2
......
Instruction n
Fin Procédure
LEEA-A1 D.JEBALI
L’APPEL D’UNE PROCEDURES
14
Appel de la procédure afficher qui prend en paramètres deux nombres A et B de type entier
puis affiche le résultat le maximum des deux.
Algorithme : affiche -maximum
//Déclaration de la fonction maximum()
Procedure affiche -maximum (A: entier, B : entier)
max: entier
Début
Si A>B alors //Algorithme principal
max ← A Variable A,B : entier
sinon Début:
max ← B Ecrire("saisir une valeur de A ") Lire(A)
Fin Si Ecrire("saisir une valeur de B ") Lire(B)
Ecrire("Le maximum est: ",max) //Appel de la fonction maximum()
Fin affiche -maximum(A, B)
Fin
LEEA-A1 D.JEBALI
L’APPEL D’UNE PROCEDURES
15
Appel de la procédure afficher qui prend en paramètres deux nombres A et B de type entier
puis affiche le résultat le maximum des deux.
//programme : maximum_deux_nombres
//Déclaration de la fonction affiche-maximum()
void Affiche-maximum(int A , int B)
{ int max;
if( A>B) max = A ;
else max = B ;
// programme principal
printf("Le maximum est: %d ",max);
int main()
}
{
int A,B;
printf(" saisir une valeur de A et B ");
scanf("%d%d",&A,&B);
//Appel de la fonction affiche-maximum()
Affiche-maximum(A, B) ;
}
LEEA-A1 D.JEBALI
PARAMÈTRES D'UNE FONCTION OU D'UNE PROCÉDURE
16
Les paramètres servent à échanger des données entre l'algorithme principal et la
procédure ou la fonction appelée.
Lors de l'appel d'une fonction ou d'une procédure, deux formes de paramètres
entrent en jeu : les paramètres formels et les paramètres effectifs.
Remarque :
Les paramètres formels et les paramètres effectifs doivent correspondre en nombre,
en type et en ordre. Les noms peuvent se différer
LEEA-A1 D.JEBALI
L’APPEL D’UNE PROCEDURES
17
Appel de la procédure permuter qui prend en paramètres deux nombres A et B de type
entier puis affiche le résultat de permutation.
Algorithme : permutation
//Déclaration de la procédure permuter()
Procédure permuter (@A : entier, @B : entier)
Début
C←A
A← B //Algorithme principal
Début
B←C
Ecrire("saisir une valeur de A ")
Ecrire("La nouvelle valeur de A :", A) Lire(A)
Ecrire("La nouvelle valeur de B :", B) Ecrire("saisir une valeur de B ")
Fin Lire(B)
//Appel de la procédure permuter()
Permuter(A, B)
Fin
LEEA-A1 D.JEBALI
PARAMÈTRES D'UNE FONCTION OU D'UNE PROCÉDURE
18
Il existe deux principaux types de passages de paramètres qui permettent des usages
différents :
1. Passage de valeur :
Dans ce type de passage, le paramètre formel reçoit uniquement une copie de la
valeur du paramètre effectif. La valeur du paramètre effectif ne sera jamais modifiée.
LEEA-A1 D.JEBALI
La récursivité
19
LEEA-A1 D.JEBALI
Définition de a récursivité
20
Algorithme Fact
Entrée : un entier positif N int fact( int N)
Sortie : factorielle de N {
Fonction Fact(N) if (N == 0)
debut return 1;
si N = 0 retourner 1 else
sinon retourner N x Fact(N-1) return N*fact(N-1);
Fin }
LEEA-A1 D.JEBALI
Comment ça marche ?
21
Appel à fact(4)
4*fact(3) = ?
Appel à fact(3)
3*fact(2) = ?
Appel à fact(2)
2*fact(1) = ?
Appel à fact(1)
1*fact(0) = ?
Appel à fact(0)
Retour de la valeur 1
1*1
Retour de la valeur 1
2*1
Retour de la valeur 2
3*2
Retour de la valeur 6
4*6
Retour de la valeur 24
LEEA-A1 D.JEBALI
Notion de pile d’exécution
22
procédure récursive(paramètres)
si TEST_D’ARRET: instructions du point d’arrêt
sinon
instructions récursive(paramètres changés); // appel récursif instructions
finsi
LEEA-A1 D.JEBALI