Chapitre 4
Algorithmique & Programmation en C
Sous-algorithme
(Fonctions et procédures)
1
Prof: R. EL AYACHI
Définition
• Un sous-algorithme est un bloc à part entière qui
est destiné à réaliser une tâche précise. Cette tâche
peut être exécutée plusieurs fois.
• L’exécution d’un sous-algorithme s’effectue par
un appel en précisant les paramètres
• Il est déclaré dans la partie en-tête de l’algorithme
en déterminant les caractéristiques suivantes:
– En-tête( l’identificateur, les arguments et le
type de résultat à retourner)
– Corps (Traitements)
2
Prof: R. EL AYACHI
Types de sous-algorithme
Un sous-algorithme peut se présenter sous forme:
•Fonction: un sous-algorithme qui retourne un
résultat après l’exécution.
• Procédure: un sous-algorithme qui ne retourne
rien après l’exécution.
3
Prof: R. EL AYACHI
Procédure
Déclaration:
Procédure Nom_Procédure(Nom_Argum:Type_Argum;….);
Variable Nom_Var: Type;
… Nom de la
procédure
Début
instruction1;
Variables
instruction2; locale
…
Fin;
Corps de la
procédure
4
Prof: R. EL AYACHI
Procédure
Appel:
L’appel de la procédure s’effectue (au moment souhaité) par
son nom et éventuellement ses paramètres. Cet appel
déclenche l’exécution des instructions de la procédure.
Nom_Procédure(Param1;Param2;….);
Nom de la Liste des
procédure paramètres
5
Prof: R. EL AYACHI
Procédure
Exemple: (Calculer la surface d’un rectangle)
Algorithme Recangle; larg 5; long 7;
Variable larg,long: Réel; Surface(larg,long); //Appel
Procédure Surface(A:Réel;B:Réel);
Variable S:Réel; larg 8; long 9;
Début Surface(larg,long); //Appel
S A*B;
Ecrire(‘La surface est: ’,S); larg 6; long 4; //Appel
Fin; Surface(larg,long);
Début Fin
6
Prof: R. EL AYACHI
Fonction
Déclaration:
Fonction Nom_Fonction(Nom_Argum:Type_Argum;….):Type_Ret;
Variable Nom_Var: Type; Nom de la
fonction
…
Début
Type du résultat
Variables
instruction1; à retourner
locale
instruction2;
… Corps de la
fonction
Nom_FonctionRésultat;
Fin;
7
Prof: R. EL AYACHI
Fonction
Appel:
L’appel de la fonction s’effectue (au moment souhaité) par
son nom, ses paramètres et en affectant le résultat retourné
à une variable. Cet appel déclenche l’exécution des
instructions de la fonction.
Nom_Variable Nom_Fonction(Param1;Param2;….);
Variable stockant le
résultat retourné Liste des
paramètres
Nom de la
fonction
8
Prof: R. EL AYACHI
Fonction
Exemple: (Calculer la surface d’un rectangle)
Algorithme Recangle; larg 5; long 7;
Variable larg,long,res: Réel; resSurface(larg,long); //Appel
Fonction Surface(A:Réel;B:Réel):Réel; Ecrire(‘Résultat’,res);
Variable S:Réel; larg 8; long 9;
Début res Surface(larg,long); //Appel
S A*B; Ecrire(‘Résultat’,res);
Surface S; larg 6; long 4; //Appel
Fin; res Surface(larg,long);
Début Ecrire(‘Résultat’,res);
Fin
9
Prof: R. EL AYACHI
Exercice
On veut résoudre une équation du premier
degré en utilisant la notion des sous-
algorithmes.
Ecrire deux sous-algorithmes comme suit:
• Une fonction lecture(): saisir et
retourner un réel
• Une procédure solution(float,float):
résoudre une équation du premier degré.
10
Prof: R. EL AYACHI
Exercice (Solution)
Fonction lecture():
Fonction lecture( ):Réel;
Variable val: Réel;
Début
Ecrire(‘Entrer une valeur’);
Lire(val);
lectureval;
Fin;
11
Prof: R. EL AYACHI
Exercice (Solution)
Procédure solution():
Procédure solution(a: Réel, b: Réel);
Variable x: Réel;
Début
Si a <> 0 alors
x-b/a; Ecrire(x);
Sinon
Si b=0 alors Ecrire(‘IR’);
Sinon Ecrire(‘Ensemble vide’);
Finsi
Finsi
Fin;
12
Prof: R. EL AYACHI
Exercice (Solution)
Conception:
Algorithme Equation; Si a <> 0 alors
Variable A,B: Réel; x-b/a; Ecrire(x);
Fonction lecture( ):Réel; Sinon
Variable val: Réel; Si b=0 alors Ecrire(‘IR’);
Début SinonEcrire(‘Ensemble vide’);
Ecrire(‘Entrer une valeur’); Finsi
Lire(val); Finsi
lectureval; Fin;
Fin; Début
Procédure solution(a:Réel, b:Réel); A lecture();
Variable x: Réel; B lecture();
Début solution(A,B);
Fin
13
Prof: R. EL AYACHI
Récursivité
Fonction récursive:
C’est une fonction qui contient un appel à elle même.
Fonction Nom_Fonction(Nom_Argum:Type_Argum;….):Type_Ret;
Variable Nom_Var: Type;
… Appel de la fonction
Début elle même
instruction1;
instruction2;
…
Nom_FonctionNom_Fonction(param,…);
Fin; 14
Prof: R. EL AYACHI
Récursivité
Exemple: Calculer: 1*2*3*….*N
Fonction Factoriel(N:Entier;….):Entier;
Début
Si N = 1 alors Factoriel 1;
Sinon Factoriel N*Factoriel(N-1);
Finsi
Fin;
15
Prof: R. EL AYACHI