1. SOUS-PROGRAMMES
PARTIE 4 :
DIVERS & BONNES PRATIQUES
Réalisé par : OUZEGGANE Redouane
Département de Technologie
Faculté de Technologie – Université A.Mira, Bejaia
Année Universitaire 2015/2016
- Eviter d'accéder aux variables globales
- Eviter de réaliser deux traitements dans le même SP
- Comment utiliser le type tableau comme paramètre ?
- Comment transformer une procédure à une fonction ?
- Comment transformer une fonction à une procédure ?
2. ACCÈS AUX VARIABLES GLOBALES
1ère Année Technologie Année Universitaire : 2015/2016
01/11
Programme
principal
N : integer;
x , p: : real;
Données
Instructions
Read(N,X)
Puissance;
Write(P)
Procedure
Puissance
i : integer;
Données
Instructions
P := 1;
For i:=1 to N do
P := P*x;
1- La procédure Puissance dépends des variables N et P
2- On ne peut pas utiliser cette procédure dans une autre programme !
3. ACCÈS AUX VARIABLES GLOBALES
1ère Année Technologie Année Universitaire : 2015/2016
01/11
Programme
principal
N : integer;
x , p: : real;
Données
Instructions
Read(N, X)
Puissance;
Write(P)
Procédure
Puissance
x n
P = xn
Paramètre d’entrée
(passage par valeur)
Paramètre de sortie
(passage par variable)
4. ACCÈS AUX VARIABLES GLOBALES
1ère Année Technologie Année Universitaire : 2015/2016
01/11
Paramètre d’entrée
Paramètre de sortie
Un Sous-programme Communique avec l’environnement externe uniquement en
utilisant les paramètres (Paramètres entrées / Paramètre de sortie)
Paramètres effectifs
5. DEUX TRAITEMENTS DANS LE MÊME S.P.
1ère Année Technologie Année Universitaire : 2015/2016
01/11
Soit une procédure qui permet de calculer n! ainsi que la puissance xn :
Un sous programme doit avoir une seule
« RESPONSABILITÉ »
6. DEUX TRAITEMENTS DANS LE MÊME S.P.
1ère Année Technologie Année Universitaire : 2015/2016
01/11
On doit écrire deux procédures, par exemple :
7. TYPE TABLEAU DANS LES S.P.
1ère Année Technologie Année Universitaire : 2015/2016
01/11
ERREUR
8. TYPE TABLEAU DANS LES S.P.
1ère Année Technologie Année Universitaire : 2015/2016
01/11
1ère Solution
2ème Solution
9. TRANSFORMER UNE PROCÉDURE À UNE FONCTION
1ère Année Technologie Année Universitaire : 2015/2016
01/11
function facoriel(n:logint) : longint;
var
i:longint; f:longint;
Begin {Début de la fonction factoriel}
f := 1;
for i := 1 to n do
f := f*i;
factoriel := f; {Affecter le résultat à la fonction}
End; {Fin de la fonction factoriel}
Pour Tout appel à la procédure factoriel :
factoriel (m, fm);
Devient un appel à la fonction factoriel :
fm := factoriel (m);
10. Transformer une Procédure à une Fonction
1. remplacer le mot clé procedure par le mot clé function ;
2. supprimer le paramètre formel avec transmission par variable ;
3. le type du paramètre formel supprimé devient le type de la fonction ;
4. créer une variable locale dans le fonction (le même que le paramètre
formel supprimé) ;
5. ajouter, à la fin du corps de la fonction, l’instruction suivante :
<nom_fonction> := <parametre_formel_supprimé>;
6. Pour tout appel à la procédure de la forme suivante :
<Nom_Procedure>(p1, p2, …pn, PFR); devient:
PFR := <Nom_Fonction>(p1, p2, …pn);
TRANSFORMER UNE PROCÉDURE À UNE FONCTION
1ère Année Technologie Année Universitaire : 2015/2016
01/11
11. TRANSFORMER UNE FONCTION À UNE PROCÉDURE
1ère Année Technologie Année Universitaire : 2015/2016
01/11
procedure puissance(x:real; n:integer; var z :real);
var
i:longint; p:real;
Begin {Début de la procédure puissance}
p := 1;
for i := 1 to n do
p := p*i;
puissance := p; {Affecter le résultat à la fonction}
End; {Fin de la procédure puissance}
z := p;
12. TRANSFORMER UNE FONCTION À UNE PROCÉDURE
1ère Année Technologie Année Universitaire : 2015/2016
01/11
procedure puissance(x:real; n:integer; var p :real);
var
i:longint; p:real;
Begin {Début de la procédure puissance}
p := 1;
for i := 1 to n do
p := p*i;
puissance := p; {Affecter le résultat à la fonction}
End; {Fin de la procédure puissance}
Pour Tout appel à la fonction puissance :
p := puissance(5.25, 2+1);
Devient un appel à la procédure puissance:
puissance(5.25, 2+1, p);
13. Transformer une Fonction à une Procédure
1. remplacer le mot clé function par le mot clé procedure ;
2. supprimer le type de la fonction et ajouter un paramètre formel par variable, du
même type que la fonction, à la nouvelle procédure ;
3. si le paramètre formel (par variable) ajouté est un nouvel identificateur, on
replace la dernière instruction de la fonction par :
<paramètre_formel_ajouté> := <résultat_calculé>;
4. si le paramètre formel (par variable) ajouté a le même identificateur de la
variable local résultat, supprimer, la dernière instruction de la fonction
(Affectation du résultat à la fonction)
5. Pour tout appel à la fonction de la forme suivante :
<id_var_res> := <Nom_Fonction>(p1, p2, …pn); devient:
<Nom_Procedure>(p1, p2, …pn, <id_var_res>);
TRANSFORMER UNE FONCTION À UNE PROCÉDURE
1ère Année Technologie Année Universitaire : 2015/2016
12/13
14. RÉSUMÉ
1ère Année Technologie Année Universitaire : 2015/2016
13/13
Un Sous-programme Communique avec l’environnement externe uniquement
en utilisant les paramètres (Paramètres entrées / Paramètre de sortie)
1
Un Sous-programme doit réaliser un seul traitement et calculer un seul
résultat (Possède une seule RESPONSABILITÉ)
2
Pour utiliser le type Tableau (Vecteur / Matrice) comme paramètre, soit on
déclare un nouveau type, ou nous utilisons Array Of <type>
3
Pour transformer une procédure à une fonction (ou vise-versa), un ensemble
d’étapes doivent être appliquées
4