Vous êtes sur la page 1sur 22

Université de Sousse

Institut Supérieur des Sciences Appliquées et de Technologie de Sousse

MODULE : ALGORITHMIQUE & STRUCTURES DE


DONNÉES

PROCÉDURES ET FONCTIONS

D. JEBALI EP SAAD

FILIÈRE: LEEA-A1

2022-2023
Ch 4:
2

Procédures et Fonctions

Les méthodes sont les habitudes de l'esprit et les économies de


la mémoire.
Citations d' Antoine Rivaroli

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

Il existe deux sortes de sous-algorithmes :


 Les fonctions
 Les procédures
Les fonctions et les procédures sont des modules (groupe d'instructions)
indépendants désignés par un nom. Elles ont plusieurs intérêts :
 Permettent de "factoriser" l'algorithme(Programme), c’est à dire de mettre en
commun les parties qui se répètent.
 Permettent une structuration et une meilleure lisibilité des algorithmes
(Programmes).
 Facilitent la maintenance du code (il suffit de modifier une seule fois).
 Ces procédures et fonctions peuvent éventuellement être réutilisées dans d'autres
algorithmes (programmes).

LEEA-A1 D.JEBALI
Utilité des Procédures et Fonctions
en C
5

Le langage C ne comporte pas le concept de procédure. Cependant, les


fonctions pouvant réaliser sans aucune restriction tout effet de
bord qu'elles désirent, le programmeur peut réaliser une procédure à
l'aide d'une fonction qui ne rendra aucune valeur.

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

A l'appel d'une procédure, l'algorithme interrompt son déroulement normal,


exécute les instructions de la procédure, puis retourne au programme appelant et
exécute l'instruction suivante.
SYNTAXE :
nom_Prcocedure (Pram1, Param2, …)

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.

Les paramètres formels :


Les paramètres placés dans la déclaration d'une procédure ou d'une fonction sont
appelés paramètres formels. Ces paramètres peuvent prendre toutes les valeurs
possibles mais ils sont abstraits (n'existent pas réellement)

Les paramètres effectifs :


Les paramètres placés dans l'appel d'une procédure ou d'une fonction sont appelés
paramètres effectifs. Ils contiennent les valeurs pour effectuer le traitement.

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

Contrairement à l'appel d'une fonction, 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

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.

2. Passage par référence ou par adresse :


Dans ce type de passage, la procédure utilise l'adresse du paramètre effectif.
Lorsqu'on utilise l'adresse du paramètre, on accède directement à son contenu. La
valeur de la variable effective sera donc modifiée.
Les paramètres passés par adresse sont précédés de @.

LEEA-A1 D.JEBALI
La récursivité
19

La récursion est la racine du calcul car elle échange la


description contre du temps
Citations d' Alan Jay Perlis

LEEA-A1 D.JEBALI
Définition de a récursivité
20

C’est un moyen simple et élégant de résoudre certain problème.


Définition On appelle récursive toute fonction ou procédure qui s’appelle elle même.

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

La Pile d’exécution du programme en cours est un emplacement mémoire


destiner à mémoriser les paramètres, les variables locales ainsi que l’adresse de
retour de chaque fonction en cours d’exécution. Elle fonctionne selon le principe
LIFO (Last-In-First-Out) : dernier entré premier sorti.
Attention !
 La pile à une taille fixée, une mauvaise utilisation de la récursivité peut
entraîner un débordement de pile.
Comme dans le cas d’une boucle, il faut un cas d’arrêt où l’on ne fait pas
d’appel récursif

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

Vous aimerez peut-être aussi