Vous êtes sur la page 1sur 26

ALGORITHMIQUE ET STRUCTURES

DE DONNÉES 1

CHAPITRE 6: SOUS-PROGRAMMES

Préparé par: Dr. L. Ketari

Année Académique 2019 / 2020


Semestre I
PLAN
Introduction
Analyse Modulaire
Sous-Programmes
• Fonctions
• Procédures
Passage de Paramètres
• Passage par Valeur
• Passage par Variable (Adresse ou Référence)

2
INTRODUCTION
INTRODUCTION

Étapes de Résolution d’un Problème


1. Comprendre l’énoncé du problème.
2. Décomposer le problème en sous-problèmes plus
simple à résoudre.
3. Associer à chaque sous-problème, une spécification
(description) définie par:
• les données nécessaires,
• les données résultantes,
• la démarche à suivre pour arriver au résultat en
partant d’un ensemble de données.
4. Implémenter les sous-programmes répondant à la
spécification des différents sous-problèmes.
5. Coordonner le fonctionnement de tous les sous-
programmes développés dans un programme
principal.
4
INTRODUCTION

Analyse Modulaire
• La conception d’un algorithme repose sur l’analyse
modulaire:
o Affinements successifs: Le problème à résoudre est
décomposé en sous-problèmes, puis ces derniers à
leu tour, jusqu’à obtenir des sous-problèmes faciles
à résoudre.
– À chaque sous-problème on lui fait correspondre
un sous-programme.
• La résolution d’un problème sera composée d’un
algorithme principal et d’un certain nombre de
sous-programmes.
L’algorithme principal a pour but d’organiser
l’enchainement des sous-programmes.
5
INTRODUCTION

Avantages de l’Analyse Modulaire


• Répartir les difficultés.
• Faciliter la résolution d’un problème complexe.
• Pouvoir poursuivre l’analyse comme si les
sous problèmes étaient résolus.
• Faciliter l’écriture de l’algorithme en évitant les
duplications.
• Faciliter la localisation des erreurs.

6
SOUS-PROGRAMMES
DÉFINITION

Un sous-programme est une unité fonctionnelle


formée d’un bloc d’instructions, ayant un nom et
éventuellement des paramètres (ou arguments).
On distingue deux types de paramètres:
• Paramètres formels: Ils figurent dans l’entête de la
définition du sous-programme, et sont utilisés dans
les instructions du sous-programme.
o Les paramètres formels sont les variables locales du
sous-programme.
• Paramètres effectifs: Ils figurent dans l’instruction
d’appel du sous-programme et sont substitués aux
paramètres formels au moment de l’appel du sous-
programme.
8
DÉFINITION

Remarques
• Les paramètres effectifs et les paramètres
formels doivent s’accorder du point de vue
nombre et ordre.
• Les types des paramètres formels et
paramètres effectifs doivent être compatibles.

9
DÉFINITION

Types de Sous-Programmes
• Procédure
o Une procédure est un sous-programme
contenant un certain nombre d’instructions,
mais qui n’admet pas de valeur de retour.
• Fonction
o Une fonction est un sous-programme
contenant un certain nombre d’instructions
et qui retourne un et un seul résultat.

10
FONCTION

Définition
• Syntaxe
Fonction <nom_fonct>(<paramètres : types>) : <type_résultat>
Var
<Déclaration des objets internes>
Début
<Instructions>
retourner < valeur ou variable ou expression >
Fin
- La fonction peut retourner une valeur unique (et
donc se terminer) grâce au mot-clé retourner.
- Le type de la valeur retournée doit correspondre
à celui qui a été précisé dans le prototype (entête
ou signature) de la définition de la fonction. 11
FONCTION

Définition
• Exemple-1 : Valeur Absolue d’un réel
Fonction Valeur_Absolue(x: réel) : réel
Début
Si x > 0 alors Si x > 0 alors
retourner x retourner x
Sinon Finsi
retourner –x retourner –x
Finsi
Fin

12
FONCTION

Définition
• Exemple-1 : Fonction sans paramètres
Fonction Saisir_Entier() : entier
Var
nb: entier
Début
Répéter
Écrire (" Donner un entier");
Lire (nb);
Jusqu'à (nb>= 1 et nb <=100)
retourner nb
Fin
13
FONCTION

Appel de Fonction
• L’appel de fonction est une expression, dont la
valeur est le résultat retournée par cette
fonction.
o Son appel s’effectue comme si on va
évaluer une expression.
• Syntaxe
<Variable> ← <nom_fonct>([paramètres effectifs])
OU
Écrire (<nom_fonct>([paramètres effectifs]))

14
FONCTION

Résumé
Fonction val_absolue(x : réel) : réel
Var
a : réel /* variable interne pour la fonction */
Début
Si x > 0 Alors
a←x
Sinon
a ← -x
Finsi
Retourner(a)
Fin
Algorithme valeur_absolue
Var
v,y: réel
Début
Écrire(" Donner un réel ")
Lire(v)
y←val_absolue(v) /* Appel de la fonction */
Écrire("la valeur absolue de ", v , "est:", y)
15
Fin
FONCTION

Application
• Écrire un algorithme qui permet d’afficher si un
entier donné est premier ou nom. Pour ce
faire, définir une fonction est_premier(x) qui
permet de faire le test de parité d’un entier x.

16
PROCÉDURE

Définition
• Syntaxe
Procédure <nom_proc>(<Liste paramètres et leurs types>)
Var
<Déclaration des objets internes>
Début
<Instructions>
Fin

17
PROCÉDURE

Définition Paramètres formels


• Exemple
Procédure Affiche_Somme(a: entier, b: entier)
Var
S: entier
Début
S←a+b
Écrire(S)
Fin

18
PROCÉDURE

Appel de Procédure
• L’appel à une procédure consiste à indiquer le
nom de la procédure suivi d’un couple de
parenthèses contenant la liste des paramètres
effectifs:
Algorithme affiche
Var
x, y : entier
Début
Écrire(" Donnez un entier ")
Lire(x)
Écrire("Donnez un autre entier")
Lire(y)
Affiche_Somme(x, y) /* Appel de la procédure*/
Fin 19
PROCÉDURE

Application
• Écrire une procédure qui permet d’afficher les
entiers compris entre 1 et un certain entier
strictement positif passé en paramètre.

20
PASSAGE DE PARAMÈTRES
PASSAGE DE PARAMÈTRES

Types de Passage de Paramètres


• Il existe deux modes de passage (transmission)
de paramètres pour les sous-programmes:
o Passage par valeur (ou par copie) : Les valeurs
des paramètres effectifs sont affectées aux
paramètres formels correspondants au moment de
l'appel du sous-programme. Dans ce mode, le
paramètre effectif ne subit aucune modification.
o Passage par variable (ou par référence, ou par
adresse, ou par pointeur) : les adresses des
paramètres effectifs sont transmises au sous-
programme appelant. Dans ce mode, le
paramètre effectif subit les mêmes modifications
que le paramètre formel lors de l'exécution du
sous-programme. 22
PASSAGE DE PARAMÈTRES

Passage par Valeur


• Exemple
Procédure triple(i : entier)
Début
i ← i*3
Fin
Algorithme passage_par_valeur
Var
x : entier
Début @x 5 5 Paramètre formel
x← 5
triple(x) Paramètre effectif @i
Écrire(x) Affichage de 5 La variable i contient
une copie de la
Fin
valeur de x.
23
PASSAGE DE PARAMÈTRES

Passage par Variable


• Exemple
Procédure triple(Var i : entier)
Début
i ← i*3
Fin
Algorithme passage_par_adresse
Var
x : entier @x 5 15 @x Paramètre formel
Début
x← 5 Paramètre effectif @i
triple(x) La variable i contient
Écrire(x) Affichage de 15 l’adresse de la
variable x.
Fin 24
PASSAGE DE PARAMÈTRES

Application
• Écrire un algorithme qui permet de définir :
1. Une procédure qui permet de lire deux
entiers a et b strictement positifs.
2. Une procédure qui permet de permuter les
valeurs de a et b.
3. Une fonction qui retourne le maximum de a
et b.
4. Une fonction qui test si un entier est paire.
• Écrire l’algorithme utilisant ces sous programmes
et qui permute a et b si a est paire, et affiche le
maximum de a et b si a est impaire.
25
Merci!
Questions ?

26

Vous aimerez peut-être aussi