Cliquez ici pour retourner aux thèmes
d'exercices : ....
n s’intéresse ici
aux langages impératifs de la famille des ALGOL (avec des structures
de contrôle classiques). On envisage les rapports qu’il y a entre
un programme appellant et un sous-programme appelé.
La notion de paramètre formel associée à la notion de paramètre effectif, permet de définir par des variables muettes le moyen de communiquer entre un programme appellant et un sous-programme appelé. |
En réalité toutes les questions que l’on se pose
reviennent à celle-ci :
Quel est l’effet sur un paramètre effectif transmis à un sous-programme, d’une modification éventuelle de la valeur du paramètre formel correspondant dans le corps du sous-programme. |
l faut retenir qu’un paramètre
effectif transmis au sous-programme appelé est un mécanisme
d’accès à une information appartenant au programme appelant
(ce peut être une valeur, ou un algorithme utilisé pour chaque
accès à l’information transmise). Ci-dessous les 5 grand
modes de passages des paramètres en programmation.
LECTURE SEULEMENT / PASSAGE PAR VALEUR |
ans un passage par valeur, le paramètre formel est traité comme une variable locale dans le corps du sous-programme; valeur initialisée au début de chaque exécution du sous-programme avec la valeur du paramètre effectif correspondant.
en ALGOL W : procedure sp(... REAL VALUE x ....)
en Pascal : procedure sp(... x: real
....)
en Java : void sp( ... float x ...)
ECRITURE SEULEMENT / PASSAGE PAR RESULTAT |
ans un passage par résultat, le paramètre formel est traité comme une variable locale au sous-programme, dont la valeur initiale à chaque appel est indéfinie, et dont la valeur finale est affectée au paramètre effectif correspondant.
Remarque : l’utilisation comme paramètre, d’une constante ou d’une expression est une erreur
en ALGOL W : procedure sp(... REAL RESULT x ....)
en Pascal : pas de représentation
en java : pas de représentation
LECTURE / ECRITURE |
PASSAGE PAR VALEUR-RESULTAT
ans un passage comme valeur-résultat le paramètre formel est traité comme une variable locale au corps du sous-programme, elle reçoit au moment de chaque appel la valeur du paramètre effectif correspondant et sa valeur finale est affectée au paramètre effectif après chaque exécution du sous-programme. Ce passage est la combinaison des passages par valeurs et par résultat.
en ALGOL W procedure sp(... REAL VALUE RESULT x ....)
en Pascal : pas de représentation
en java : pas de représentation
PASSAGE PAR ADRESSE (ou PAR REFERENCE)
ans un passage par adresse le paramètre formel est traité comme une variable dont l’adresse qui est transmise au moment de chaque appel, est celle du paramètre effectif correspondant.
Attention : ce mode est dangereux à cause de la non protection des données et de la nécessité qu’il y a de connaître la façon dont sont implantées physiquement les données sur la machine.
en ALGOL W pas de représentation
en Pascal procedure sp (....var x :
real .....)
en FORTRAN et en PL/1 c’est le mode habituel
en java : seuls les objets sont passés par
référence
PASSAGE PAR NOM :
e mode correspond à une véritable substitution textuelle du paramètre formel par le paramètre effectif.
dans un passage par nom l’exécution de toute instruction du sous-programme faisant intervenir le paramètre formel est équivalente à l’exécution de la même instruction où l’on aurait remplaçé le nom du paramètre formel par celui du paramètre effectif.
en ALGOL W : c’est le mode habituel
en Pascal : pas de représentation
en java : pas de représentation
Remarque
ans le passage par nom,
si le sous-programme possède une variable locale de nom “n”,
il n’y a pas d’ambiguïté, car il suffit de façon abstraite
de renommer nLoc cette variable, car c’est effectivement ce qu’il se passe.
En pascal, dans une même en-tête de procédure on peut trouver les deux mmodes de passage des paramètres effectifs (par valeur et par référence) :
ici x et y sont passés par valeur et t par référence.
'assistant vous propose 8 exercices sous formes de petit programme pascal contenant des fonctions ou des procédures avec en bleu les paramètres formels proposé et en rouge un appel avec des paramètres effectifs dans le programme principal. Certains de ces appels sont corrects d'autres sont incorrects à vous de déterminez la justesse deu programme :
Une fois votre choix arrêté, vous cliquez sur l'un des
deux boutons radio rouges (correct
ou incorrect), l'assistant vous
renvoie alors une réponse auditive assortie d'une explication sur
le passage de paramètre.