Vous êtes sur la page 1sur 9

Les sous programmes 2ème T.

2ème année
L.S.IBN ELHAYTHEM Chapitre-12 Tech.info 3
Bengardane

Enseignant : LES SOUS  A.S. :


Mr BENZAIED PROGRAMMES 2008/2009
mohamed
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 T.D.O
Écrire (" a1 = ") ; Lire (a1) Objet Type/nature rôle
Écrire (" a2 = ") ; Lire (a2)
maxp1 entier Maximum paire1
Jusqu'à ( a1 > 0 ) ET ( a2 > 0 )
2) répéter Saisie maxp2 entier Maximum paire2
Écrire (" b1 = ") ; Lire (b1) a1 Entier Saisie de a1
Écrire (" b2 = ") ; Lire (b2)
Jusqu'à ( b1 > 0 ) ET ( b2 > 0 ) a2 Entier Saisie de a2
b1 Entier Saisie de b1
3) maxp1  a1 b2 Entier Saisie de b1
4) SI a2 > a1 ALORS
maxp1  a2
FIN SI Calcul
5) maxp2  b1
6) SI b2 > b1 ALORS
maxp2  b2
FIN SI
7) écrire ("Maximum pair1 = ", maxp1) Affichage
8) écrire ("Maximum pair2 = ", maxp2)
9) Fin maximum

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
Les sous programmes 2ème T.I
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_fonctionR
….
…..
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
Les sous programmes 2ème T.I
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

T.D.O
Objet Type/nature rôle
A1 Entier Saisie de A1
A2 Entier Saisie de A2
maximum fonction Retourne le maximum
de 2 entiers
B1 Entier Saisie de b1
B1 Entier 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
Les sous programmes 2ème T.I
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


T.D.O
Objet Type/nature rôle
max 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
Les sous programmes 2ème T.I
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
Les sous programmes 2ème T.I

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 …...; Déclaration
Var …..; locale
Function ……;
Procedure …..;

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
Les sous programmes 2ème T.I

Réponse Activité 1 :
Program permutation ; { entete du programme principal}
Uses wincrt ;
Var
pe1 , pe2 : integer ; { variables globales }
Procedure permut ( x , y : integer) ; { entete de la procedure }
Var
z : real ; { variables locales }
Begin { debut de la procedure}
z := x ;
x := y ;
y := z ;
Writeln(‘x = ’ ,x, ’ et y = ’, y );
End; { fin de la procedure}

Begin {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 );
End. {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 ; Illustration pour a = 4 et b = 11
Var
a , b : integer ;
Procedure permut ( x , y : integer) ; Avant appel de permut
Var
z : integer ; a = …… b = ……
Begin
z := x ; Exécution de permut
x := y ;
y := z ; a = …… b = ……
End;

Après appel de permut

a = …… b = ……

Begin
Write(‘ a = ’); readln(a);
Write(‘ b = ’); readln(b);
Permut ( a , b ) ;
Writeln(‘a = ’ , a , ‘ et b = ‘ , b );
End.

7
Les sous programmes 2ème T.I

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 ; Illustration pour a = 4 et b = 11
Var
a , b : integer ;
Procedure permut ( VAR x , y : integer) ; Avant appel de permut
Var
z : integer ; a = …… b = ……
Begin
z := x ; Exécution de permut
x := y ;
y := z ; a = …… b = ……
End;

Après appel de permut

a = …… b = ……

Begin
Write(‘ a = ’); readln(a);
Write(‘ b = ’); readln(b);
Permut ( a , b ) ;
Writeln(‘a = ’ , a , ‘ et b = ‘ , b );
End.

8
Les sous programmes 2ème T.I

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)