Académique Documents
Professionnel Documents
Culture Documents
Une définition de procédure est une déclaration qui associe un identificateur à un bloc.
L’identificateur est le nom de la procédure. Une procédure est donc un bloc d’instructions
auquel on a donné un nom. L’invocation de ce nom provoque l’exécution du bloc qui, de fait,
se comporte comme une instruction complexe.
Les procédures servent à programmer de manière structurée. C’est l’approche qui consiste à
décomposer un problème en sous-problèmes, puis résoudre ces sous-problèmes et enfin
combiner les solutions des sous-problèmes pour obtenir la solution du problème de départ.
Déclaration de procédure
Une déclaration de procédure comporte une en-tête et un corps.
L’en-tête comporte
le mot clé Procédure
le nom de la procédure
la liste des paramètres formels (entre parenthèses), avec pour chaque paramètre son
nom, son type et son mode d’utilisation au moment de l’appel. Les paramètres formels
qui apparaissent dans l’en-tête sont des variables fictives qui sont précisées au moment
de l’appel
o un paramètre passé par valeur : à l’appel, la variable envoie sa valeur mais
n'est pas impliquée dans l’exécution
o un paramètre résultat : après l’appel il récupère la valeur calculée ;
o un paramètre variable : il participe au calcul.
Une bonne pratique consiste à accompagner toute procédure d’une précondition et d’une
postcondition. Une procédure est alors vue comme un contrat :
1. La précondition fixe les obligations de l’utilisateur
2. La postcondition fixe les obligations du concepteur de la procédure.
Exemples :
1. Calcul du maximum de deux nombres A et B et stockage du résultat dans C :
Procédure Maximum (valeur A, B ; résultat C)
2. Échange de deux nombres A et B
Procédure Échange (variable A, B)
Exemple :
Program TOTO ;
Begin
Const x = 1 ;
Procedure P (Valeur y : integer) :
Begin
write (x+y)
End ;
Procedure Q ;
Var x : integer ;
Begin
X := 2 ;
P(3)
End ;
En liaison statique, P lie à l’appel, la variable globale x à celle qui est connue dans
l’environnement de déclaration, ci-dessous :
Program TOTO ;
Begin
Const x = 1 ;
Procedure P (Valeur y : integer) :
Begin
write (x+y)
End ;
c’est-à-d ‘’const x = 1’’. A l’appel P (y) donne alors ‘’write (1+y)’’ et le résultat est 4 puisque
y=3
En liaison dynamique, P lie à l’appel, la variable globale x à celle qui est connue dans
l’environnement de l’appel.
Var x : integer ;
Begin
x := 2 ;
P(3)
End ;
Une paramètre passé par valeur équivaut donc à une variable locale initialisée au moment de
l’appel. Le paramètre effectif communique sa valeur au bloc lors de l’appel mais ne participe
pas aux calculs. C’est une communication à sens unique entre le paramètre effectif et la
procédure. L’appel n’a donc aucun effet sur le paramètre effectif.
Exercices :
1) Exécuter le programme ci-dessous
Program TOTO
Procedure P (valeur a : integer)
Begin a := 1 ; write (a) End ;
Var x : integer ;
Begin
x := 2 ; P(x) ; write (x)
End.
Solution
C’est équivalent à
Program TOTO
Procedure P
Var a_loc : integer ;
Begin aa := 1 ; write (aa) End ;
Var x : integer ;
Begin
x := 2 ; (a_loc := 2 ; a_loc := 1 ; write (a_loc) ) ; write (x)
End.
Les valeurs écrites sont d’abord 1 puis 2.
Tout se passe donc comme si le paramètre effectif passait son adresse à la procédure. C’est le
sens du mot ‘’référence’’.
Solution
C’est équivalent à
Program TOTO
Procedure P (Var a : integer) ;
Begin a := 1 ; write (a) End ;
Var x : integer ;
Begin
x := 2 ; (x := 1 ; write (x) ) ; write (x)
End.
Les valeurs écrites sont d’abord 1 puis 1.
Exemple
Program TOTO
Procedure Echange (… x, y : integer) ;
Var aux : integer ;
Begin aux := y ; y := x ; x := aux End ;
Var i : integer ;
Var V : array 1 : 2 of integer ;
Begin i := 1 ; V1 := 2 ; V2 := 0 ;
Echange (if Vi = i+1 then Vi else i, i)
End.