le passage de paramètres:explication avancée
Page 1 sur 1
le passage de paramètres:explication avancée
on a deux modes de passages de paramètres : le passage par valeur et le passage par variable
Le passage de paramètre par valeur correspond à la traduction algorithmique des paramètres uniquement en entrée de la fonction (donnée).
Le passage de paramètre par variable correspond à la traduction algorithmique des paramètres en sortie de la fonction (résultat) ou en entrée et en sortie (donnée devenant un résultat données modifiées), caractérisé par le VAR précédant les paramètres dans l’entête de la fonction ou procédure.
Voyons ceci sur des programmes exemples :
Passage de paramètres par valeur.
Program TEST_PROCEDURE_VALEUR;
var A,B,C : real;
Procedure PROC1(X,Y,Z : real);
var A,B,C : real;
begin
writeln(' début procédure X:=',X:3:2,' Y= ',Y:3:2,' Z= ',Z:3:2);
A:=X;
B:=Y;
C:=Z;
A:=A * 2;
B:=B - 1;
C:=C + 10;
X:=A;
Y:=B;
Z:=C;
writeln(' fin procédure X:=',X,' Y= ',Y,' Z= ',Z);
end;
BEGIN
A:=1.5;
B:=0.5;
C:=100.25;
writeln('avant procédure A:=',A,' B= ',B,' C= ',C);
PROC1(A,B,C);
writeln('après procédure A:=',A,' B= ',B,' C= ',C);
END.
Résultats d'exécution
avant procédure A:=1.50, B= 0.50 et C= 100.25
début procédure X:=1.50 Y= 0.50 Z= 100.25
fin procédure X:=3.00 Y= -0.50 Z= 110.25
après procédure A:=1.50, B= 0.50 et C= 100.25
PROC1 est la procédure que nous étudions, on lui passe 3 paramètres réels par valeurs (aucune modification subie par).
Passage de paramètres par variable
Program TEST_PROCEDURE_ADRESSE;
var A,B,C : real;
Procedure PROC2( VAR X,Y,Z : real);
var A,B,C : real;
begin
writeln(' début procédure X:=',X:3:2,' Y= ',Y:3:2,' Z= ',Z:3:2);
A:=X;
B:=Y;
C:=Z;
A:=A * 2;
B:=B - 1;
C:=C + 10;
X:=A;
Y:=B;
Z:=C;
writeln(' fin procédure X:=',X:3:2,' Y= ',Y:3:2,' Z= ',Z:3:2);
end;
BEGIN
A:=1.5;
B:=0.5;
C:=100.25;
writeln('avant procédure A:=',A:3:2,' B= ',B:3:2,' C= ',C:3:2);
PROC2(A,B,C);
writeln('après procédure A:=',A:3:2,' B= ',B:3:2,' C= ',C:3:2);
END.
Résultats d'exécution.
avant procédure A:=1.50 B= 0.50 C= 100.25
début procédure X:=1.50 Y= 0.50 Z= 100.25
fin procédure X:=3.00 Y= -0.50 Z= 110.25
après procédure A:=3.00 B= -0.50 C= 110.25
PROC2 est identique à PROC1 du programme précédent, mais cette fois ci les paramètres sont passés par variable (on place le mot clé VAR avant l'énumération des variables à passer par adresse)
Observations comparatives
Þ L'observation des résultats montre, que même si le corps de PROC1 et de PROC2 sont identiques ; on obtient des résultats différents.
Analysons les deux précédents programmes
Ä dans les deux cas
On affecte les mêmes valeurs aux paramètres
affichage "Avant procédure"
On exécute la procédure, et l'on note que les paramètres sont bien transmis.
affichage "début procédure"
On transfère les paramètres dans des variables internes à la procédure.
On modifie par calcul les variables internes.
On transfère les valeurs obtenues dans les paramètres.
affichage "fin procédure"
On édite les valeurs des variables globales passées en paramètres de la procédure
affichage "après procédure"
a) Après la procédure PROC1 (paramètres passés par valeur)
Les valeurs des variables passées en paramètres n'ont pas été modifiées dans le programme principal par les calculs effectués dans la procédure.
b) Après la procédure PROC2 (paramètres passés par variable)
Les valeurs des variables passées en paramètres sont le résultat des calculs opérés dans la procédure.
Le passage de paramètre par valeur correspond à la traduction algorithmique des paramètres uniquement en entrée de la fonction (donnée).
Le passage de paramètre par variable correspond à la traduction algorithmique des paramètres en sortie de la fonction (résultat) ou en entrée et en sortie (donnée devenant un résultat données modifiées), caractérisé par le VAR précédant les paramètres dans l’entête de la fonction ou procédure.
Voyons ceci sur des programmes exemples :
Passage de paramètres par valeur.
Program TEST_PROCEDURE_VALEUR;
var A,B,C : real;
Procedure PROC1(X,Y,Z : real);
var A,B,C : real;
begin
writeln(' début procédure X:=',X:3:2,' Y= ',Y:3:2,' Z= ',Z:3:2);
A:=X;
B:=Y;
C:=Z;
A:=A * 2;
B:=B - 1;
C:=C + 10;
X:=A;
Y:=B;
Z:=C;
writeln(' fin procédure X:=',X,' Y= ',Y,' Z= ',Z);
end;
BEGIN
A:=1.5;
B:=0.5;
C:=100.25;
writeln('avant procédure A:=',A,' B= ',B,' C= ',C);
PROC1(A,B,C);
writeln('après procédure A:=',A,' B= ',B,' C= ',C);
END.
Résultats d'exécution
avant procédure A:=1.50, B= 0.50 et C= 100.25
début procédure X:=1.50 Y= 0.50 Z= 100.25
fin procédure X:=3.00 Y= -0.50 Z= 110.25
après procédure A:=1.50, B= 0.50 et C= 100.25
PROC1 est la procédure que nous étudions, on lui passe 3 paramètres réels par valeurs (aucune modification subie par).
Passage de paramètres par variable
Program TEST_PROCEDURE_ADRESSE;
var A,B,C : real;
Procedure PROC2( VAR X,Y,Z : real);
var A,B,C : real;
begin
writeln(' début procédure X:=',X:3:2,' Y= ',Y:3:2,' Z= ',Z:3:2);
A:=X;
B:=Y;
C:=Z;
A:=A * 2;
B:=B - 1;
C:=C + 10;
X:=A;
Y:=B;
Z:=C;
writeln(' fin procédure X:=',X:3:2,' Y= ',Y:3:2,' Z= ',Z:3:2);
end;
BEGIN
A:=1.5;
B:=0.5;
C:=100.25;
writeln('avant procédure A:=',A:3:2,' B= ',B:3:2,' C= ',C:3:2);
PROC2(A,B,C);
writeln('après procédure A:=',A:3:2,' B= ',B:3:2,' C= ',C:3:2);
END.
Résultats d'exécution.
avant procédure A:=1.50 B= 0.50 C= 100.25
début procédure X:=1.50 Y= 0.50 Z= 100.25
fin procédure X:=3.00 Y= -0.50 Z= 110.25
après procédure A:=3.00 B= -0.50 C= 110.25
PROC2 est identique à PROC1 du programme précédent, mais cette fois ci les paramètres sont passés par variable (on place le mot clé VAR avant l'énumération des variables à passer par adresse)
Observations comparatives
Þ L'observation des résultats montre, que même si le corps de PROC1 et de PROC2 sont identiques ; on obtient des résultats différents.
Analysons les deux précédents programmes
Ä dans les deux cas
On affecte les mêmes valeurs aux paramètres
affichage "Avant procédure"
On exécute la procédure, et l'on note que les paramètres sont bien transmis.
affichage "début procédure"
On transfère les paramètres dans des variables internes à la procédure.
On modifie par calcul les variables internes.
On transfère les valeurs obtenues dans les paramètres.
affichage "fin procédure"
On édite les valeurs des variables globales passées en paramètres de la procédure
affichage "après procédure"
a) Après la procédure PROC1 (paramètres passés par valeur)
Les valeurs des variables passées en paramètres n'ont pas été modifiées dans le programme principal par les calculs effectués dans la procédure.
b) Après la procédure PROC2 (paramètres passés par variable)
Les valeurs des variables passées en paramètres sont le résultat des calculs opérés dans la procédure.
Sujets similaires
» mode de passage de paramètres
» recherche dans un tableau
» les fonctions: explication simple et détaillée
» recherche dans un tableau
» les fonctions: explication simple et détaillée
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum