2ème T.I
Les sous programmes
L.S.IBN ELHAYTHEM Bengardane Enseignant : Mr BENZAIED mohamed
2ème année Tech.info 3
Chapitre-12 LES SOUS PROGRAMMES
A.S. : 2008/2009
Activité 1 Ecrire une analyse puis un algorithme maximum qui permet de lire deux paires d'entiers strictement positif et d'afficher le maximum de chaque paire.
Réponse (1ere solution) Spécification du problème Résultats : écrire ("Maximum pair1 = ", maxp1) écrire ("Maximum pair2 = ", maxp2) maxp1 = [ maxp1 a1 ] SI a2 > a1 ALORS maxp1 a2 FIN SI maxp2 = [ maxp2 b1] SI b2 > b1 ALORS maxp2 b2 FIN SI ( a1 , a2 ) = [ ] répéter a1 = donnée ( " a1 = " ) a2 = donnée ( " a2 = " ) Jusqu'à ( a1 > 0 ) ET ( a2 > 0 ) ( b1 , b2 ) = [ ] répéter b1 = donnée (" b1 = ") b2 = donnée (" b2 = ") Jusqu'à ( b1 > 0 ) ET ( b2 > 0 ) Algorithme 0) Début maximum 1) répéter Écrire (" a1 = ") ; Lire (a1) Écrire (" a2 = ") ; Lire (a2) Jusqu'à ( a1 > 0 ) ET ( a2 > 0 ) 2) répéter Écrire (" b1 = ") ; Lire (b1) Écrire (" b2 = ") ; Lire (b2) Jusqu'à ( b1 > 0 ) ET ( b2 > 0 ) 3) maxp1 a1 4) SI a2 > a1 ALORS maxp1 a2 Calcul FIN SI 5) maxp2 b1 6) SI b2 > b1 ALORS maxp2 b2 FIN SI 7) écrire ("Maximum pair1 = ", maxp1) 8) écrire ("Maximum pair2 = ", maxp2) 9) Fin maximum
Saisie
Objet maxp1
T.D.O Type/nature rôle entier Maximum paire1
maxp2
entier
Maximum paire2
a1
Entier
Saisie de a1
a2 b1
Entier Entier
Saisie de a2 Saisie de b1
b2
Entier
Saisie de b1
Affichage
I. INTRODUCTION Un programme est souvent composé d'un ensemble de taches distinctes. Il est donc préférable de séparer ces taches et les mettre chacune dans un sous-programme. Le programme sera donc composé d'un ensemble de sous-programmes appelés modules. On distingue deux types de sous-programmes : Les fonctions et les procédures. On les déclare puis on les appelle quand c'est nécessaire. 1
2ème T.I
Les sous programmes Utilité des sous programmes :
Faciliter la tache de résolution. Éviter la répétition d'un même traitement dans un programme. Réutiliser des sous-programmes déjà définis. Faciliter la localisation des erreurs ainsi que leurs corrections.
II. LES FONCTIONS : 1) définition : Une fonction est un sous-programme qui renvoie (retourne) une seule valeur de type simple (entier, réel, caractère, booléen, chaîne).
2) Vocabulaire et syntaxe a) déclaration d'une fonction : * Syntaxe en analyse : Spécification de la fonction nom_procedure Fonction nom_fonction (pf1,pf2,… :type1 ; pf1,pf2,… :type2 ;…) : type résultat Résultat : nom_fonction nom_fonctionR …. ….. Fin nom_fonction * Syntaxe en algorithme : 0) Fonction nom_fonction (pf1,pf2,… :type1 ; pf1,pf2,… :type2 ;…) : type résultat 1) …. 2) …. …. n-1) nom_fonction résultat n) fin nom_fonction NB : dans la déclaration de la fonction [ fonction nom_fonction( pf1,pf2 : type1) : type résultat ] : les objets pf1 et pf2 sont appelées paramètre formels * Syntaxe en Pascal Function nom_fonction (pf1,pf2,… :type1 ; pf1,pf2,… :type2 ;…) : type résultat ; { déclaration des objets locaux } Begin …… ; …… ; nom_fonction := résultat ; End; RQ : La déclaration d’une fonction comprend : L’entête de la fonction La déclaration des objets locaux. Le corps de la fonction b) L'appel d'une fonction L'appel d'une fonction permet d'exécuter les instructions de la fonction (par le programme principal), en remplaçant les paramètres formels par les paramètres effectifs. •
En algorithmique : R FN nom_foction(pe1,pe2,…) Exemple : S FN somme( a , b ) 2
2ème T.I
Les sous programmes NB : - Dans l'appel de la fonction somme [ S somme( a , b)] : a et b sont appelés paramètres effectifs. - les paramètres effectifs et les paramètres formels doivent se correspondre en nombre, type et ordre. •
En pascal : R := nom_fonction(pe1, pe2, ….) ; Exemple : S := somme( a , b ) ;
Réponse Activité 1 (2ème solution) Analyse du programme principal Résultats : écrire ("Maximum pair1 = ", FN maximum ( a1 , a2 ) ) écrire ("Maximum pair2 = ", FN maximum ( b1 , b2 )) ( a1 , a2 ) = [ ] répéter a1 = donnée ( " a1 = " ) a2 = donnée ( " a2 = " ) Jusqu'à ( A1 > 0 ) ET ( a2 > 0 ) ( b1 , b2 ) = [
] répéter b1 = donnée (" b1 = ") b2 = donnée (" b2 = ") Jusqu'à ( b1 > 0 ) ET ( b2 > 0 )
Algorithme 0) Début maximum 1) répéter Écrire (" a1 = ") ; Lire (A1) Écrire (" a2 = ") ; Lire (A2) Jusqu'à ( A1 > 0 ) ET ( a2 > 0 ) 2) répéter Écrire (" b1 = ") ; Lire (b1) Écrire (" b2 = ") ; Lire (b2) Jusqu'à ( b1 > 0 ) ET ( b2 > 0 ) 3) écrire ("Maximum pair1 = ", FN maximum ( a1 , a2 ) ) 4) écrire ("Maximum pair2 = ", FN maximum ( b1 , b2 )) 5) FIN maximum Tableau de déclaration des objets globaux Objet A1
T.D.O Type/nature rôle Entier Saisie de A1
A2
Entier
Saisie de A2
maximum
fonction
B1 B1
Entier Entier
Retourne le maximum de 2 entiers Saisie de b1 Saisie de b2
Analyse de la fonction maximum ( n , m : entier ) : entier Résultats : maximum max Traitement : max n Si m > n Alors max m FIN SI
3
2ème T.I
Les sous programmes
Algorithme 0) Fonction maximum (n , m : entire ) : entier 1) max n 2) Si m > n Alors
max m FIN SI 3) maximum max 4) Fin maximum Tableau de déclaration des objets locaux à la fonction maximum Objet max
T.D.O Type/nature rôle Entier Maximum de 2 entiers
Turbo Pascal Program maximum10 ; Uses wincrt ; Var a1 ,a2 , b1 , b2 : integer ; Function maximum (n , m : integer ) : integer; Var max : integer ; Begin max := n ; If ( m > n) then max := m ; maximum:= max ; End; Begin Repeat Write(' a1 = '); readln(a1); Write(' a2 = '); readln(a2); Until ( a1 > 0) and ( a2 > 0) ; Repeat Write(' b1 = '); readln( b1 ); Write(' b2 = '); readln( b2 ); Until ( b1 > 0 ) and ( b2 > 0 ); Writeln(‘maximum pair 1 = ’ , maximum ( a1 , a2 )) ; Writeln(‘maximum pair 1 = ’ , maximum ( b1 , b2 )); End.
3- Déclaration et accès aux objets : a/ les objet locaux : Dans la fonction max, la variable m de type entier est déclarée dans le tableau de déclarations des objets locaux de cette fonction. C’est une variable locale à la fonction max, elle est accessible seulement par cette fonction. Tous les objets tels que les constantes, les types, les variables et éventuellement d’autres sous programmes déclarés dans un sous programme sont dits locaux à celui-ci. b/ les objets Globaux : Dans l'appel de la fonction max, les variables a1, b1, a2 et b2 sont déclarés dans la partie déclarative de programme principal (maximum). Ces variables sont appelées des objets globaux. Les objets utilisés dans un sous programme et non déclarés dans celui-ci sont des objets globaux déclarés dans la zone déclaration du programme principal. 4
2ème T.I
Les sous programmes
4 Les paramètres formels et les paramètres effectifs : a/ les paramètres formels : Dans la déclaration de la fonction max les objets x et y sont appelés paramètres formels. Les paramètres formels sont les paramètres qui se trouvent dans l’entête du sous programme. b/ les paramètres effectifs : a1, b1, a2 et b2 sont deux objets globaux utilisés pour l’appel de la fonction max, ces objets sont appelés paramètres effectifs Les paramètres effectifs sont les paramètres qui figurent (dans le programme ou sous-programme appelant) au niveau de l’appel du sous-programme. Ils viennent se substituer aux paramètres formels au moment de l’appel du sous-programme.
Remarque : Il ne faut pas déclarer les paramètres formels dans le tableau de déclaration d'objets locaux. Dans la déclaration de la fonction, les paramètres formels de même type sont séparés par des virgules, tan disque les paramètres de types différents sont séparés par des points virgules. Lors de l’appel, les paramètres effectifs sont séparés par des virgules. Applications : Exercice N°1 (Série N°5) 11), 12), 13) et 14)
5
2ème T.I
Les sous programmes
III. LES PROCÉDURES : Activité 2 : Ecrire une STAP d’un programme qui permet de permuter deux entiers a et b saisis au clavier. 1) Définition : une procédure est un sous-programme qui peut avoir un ou plusieurs résultats de type
simple ou composée. 2) Vocabulaire et syntaxe a) Déclaration d’une procédure •
Syntaxe en spécification
Spécification de la procédure nom_procedure Procedure nom_procedure(pf1,pf2 : type1 ; pf3 :type2 ;…) Résultat : le(s) resultat(s) de la procédure Traitement_1 …. Traitement_n Fin nom_procedure •
Syntaxe en algorithme
0) Procedure nom_procedure (pf1, pf2 : type1 ; pf3 : type2 ; …)
1) … … n) Fin nom_procedure N.B : Dans la déclaration de la procédure [Procedure nom_procedure(pf1,pf2 : type1 ; pf3 :type2 ;…)] : les objets pf1, pf2 et pf3 sont appelées paramètre formels. •
Syntaxe en Pascal
Procedure nom_procedure ( pf1, pf2 : type1 ; pf3 : type2 ; … ) ;
Entête
Const …..; Type …...; Var …..; Function ……; Procedure …..;
Déclaration locale
Begin ……; ……;
Corps de la procédure
End ; b) L’appel d’une procédure
L’appel d’une procédure permet d’exécuter les instructions de la procédure (par le programme appelant), en remplaçant les paramètres formels par les paramètres effectifs. •
En spécification et en algorithme : nom_procedure ( pe1 , pe2 , ….)
•
En Pascal: Nom_procedure( pe1 , pe2 , ….) ;
Remarque : Dans l’appel de la procédure [nom_procedure ( pe1 , pe2 , ….)] : pe1 et pe2 sont appelés paramètres effectifs.
6
2ème T.I
Les sous programmes
Réponse Activité 1 : Program permutation ; Uses wincrt ; Var pe1 , pe2 : integer ; Procedure permut ( x , y : integer) ; Var z : real ; Begin z := x ; x := y ; y := z ; Writeln(‘x = ’ ,x, ’ et y = ’, y ); End; Begin
End.
{ entete du programme principal} { variables globales } { entete de la procedure } { variables locales } { debut de la procedure}
{ fin de la procedure}
{debut du programme principal} Write(‘ a = ’); readln(a); Write(‘ b = ’); readln(b); Permut ( a , b ) ; {appel de la procedure permute} Writeln(‘a = ’ , a , ‘ et b = ‘ , b ); {fin du programme praincipal}
3) Modes de passage des paramètres : Lors de l'appel d'un sous-programme, un échange de données est établi entre le programme (ou le module) appelant et le module appelé. Cet échange s'appel aussi passage des paramètres. On distingue deux modes de passage de paramètres : le mode de passage par valeur et le mode de passage par variable. a) Passage par valeur : Exemple : Program permutation ; Uses wincrt ; Var a , b : integer ; Procedure permut ( x , y : integer) ; Var z : integer ; Begin z := x ; x := y ; y := z ; End;
Illustration pour a = 4 et b = 11 Avant appel de permut a = ……
b = ……
Exécution de permut a = ……
b = ……
Après appel de permut a = ……
Begin Write(‘ a = ’); readln(a); Write(‘ b = ’); readln(b); Permut ( a , b ) ; Writeln(‘a = ’ , a , ‘ et b = ‘ , b ); End. 7
b = ……
2ème T.I
Les sous programmes
Les paramètres transmis par valeur font communiquer l’information dans un seul sens : du programme (ou sous-programme) appelant vers le sous-programme appelé Programme appelant
Sous-programme appelé
Toute modification des paramètres formels est sans effet sur les paramètres effectifs. b) Passage par variable :
Exemple : Program permutation ; Uses wincrt ; Var a , b : integer ; Procedure permut ( VAR x , y : integer) ; Var z : integer ; Begin z := x ; x := y ; y := z ; End;
Illustration pour a = 4 et b = 11 Avant appel de permut a = ……
b = ……
Exécution de permut a = ……
b = ……
Après appel de permut a = ……
Begin Write(‘ a = ’); readln(a); Write(‘ b = ’); readln(b); Permut ( a , b ) ; Writeln(‘a = ’ , a , ‘ et b = ‘ , b ); End.
8
b = ……
2ème T.I
Les sous programmes
Le passage par variable permet au programme de transmettre une valeur a la procédure et vis versa : le transfert d’information s’effectue dans les deux sens.
Les paramètres transmis par variable font communiquer l’information dans les deux sens : du programme (ou sous-programme) appelant vers le sous-programme appelé et inversement. Programme appelant
Sous-programme appelé
N.B : • •
Dans l’entête de la procédure, on doit précéder chacun des paramètres formels transmis par variable par le mot clé VAR. Si les paramètres formels transmis par variable sont d’un même type, on pourra les regrouper après un même VAR, en les séparant par des virgules.
Application 1 : Exercice N°1 (Série N°5) 1), 5), 10) et 16) Application 2 : Exercice N° 17 (Série N°5)
9