Sign in Join
Wiki copytemporary

Basic Pascal Tutorial/Chapter 4/Parameters/fr: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11[[Basic Pascal Tutorial/fr|Tutoriel de Pascal Objet]] : Sous-programmes / **Paramètres**
22
33Une liste de paramètres peut être ajoutée dans l'en-tête de la procédure. La liste permet de transférer des valeurs du programme principal vers la procédure. Le nouvel en-tête de la procédure est :
44
55``` pascal
66procedure Name (formal_parameter_list);
77```
88
99La liste de paramètres consiste en plusieurs groupes de paramètres, séparés par des points-virgules :
1010
11-`param_group_1; param_group2; ... ; param_groupn`
11+```
12+param_group_1; param_group2; ... ; param_groupn
13+```
1214
1315Chaque groupe de paramètres a la forme :
1416
15-`identifier_1, identifier_2, ... , identifier_n : data_type`
17+```
18+identifier_1, identifier_2, ... , identifier_n : data_type
19+```
1620
1721La procédure est appelée en passant des arguments (liste appelée paramètres effectifs) identiques en nombre, type et position aux paramètres formels de la liste :
1822
1923``` pascal
2024procedure Name (a, b : integer; c, d : real);
2125begin
2226 a := 10;
2327 b := 2;
2428 writeln (a, b, c, d)
2529end;
2630```
2731
2832Supposez que vous appelez la procédure du dessus depuis le programme principal comme suit :
2933
3034``` pascal
3135alpha := 30;
3236Name (alpha, 3, 4, 5);
3337```
3438
3539Quand vous revenez au programme principal, quelle est la valeur d'`alpha` ? 30. D'abord, `alpha` est passé par `a`, auquel est affecté de la valeur 10. Ce qui se passe là est que `a` et `alpha` sont totalement distinctes. La valeur dans le programme principal n'a pas été affectée par ce qu'il s'est passé dans la procédure.
3640
3741C'est un **appel par valeur**. La valeur est passée à la procédure.
3842
3943Une autre façon de passer les paramètres est l**'appel par variable** (**appel par référence** convient aussi). Cela crée un **lien** entre les paramètres formels et les paramètre effectifs. Quand le paramètre formel est modifié dans la procédure, le paramètre effectif l'est de la même manière. L'appel par variable est activé en faisant précéder le groupe de paramètre par `VAR` :
4044
4145``` pascal
4246VAR identifier1, identifier2, ..., identifiern : datatype;
4347```
4448
4549Dans ce cas, les constantes et les littéraux ne sont pas admis ici pour être utilisés comme paramètres effectifs car ils doivent pouvoir être changés dans la procédure.
4650
4751Voici un exemple qui mélange *appel par valeur* et *appel par variable* :
4852
4953``` pascal
5054procedure Name (a, b : integer; VAR c, d : integer);
5155begin
5256 c := 3;
5357 a := 5
5458end;
5559
5660begin
5761 alpha := 1;
5862 gamma := 50;
5963 delta := 30;
6064 Name (alpha, 2, gamma, delta);
6165end.
6266```
6367
6468Tout de suite après que la procédure a été exécutée, `gamma` a la valeur 3 car `c` était un paramètre par variable, mais `alpha` est encore 1 car c'était un paramètre par valeur.
6569
6670Cela est un peu confus. Pensez que l'appel par valeur comme une copie de variable qui est donnée à la procédure. La procédure travaille sur la copie et l'abandonne quand c'est fini. La variable originale demeure inchangée.
6771
6872L'appel par variable donne la variable réelle à la procédure. La procédure travaille directement sur la variable et la retourne au programme principal.
6973
7074En d'autres mots, l'appel par valeur est un transfert de donnée dans un seul sens. L'appel par variables va dans les deux sens.
7175
7276---
7377*From the Free Pascal wiki, page "Basic Pascal Tutorial/Chapter 4/Parameters/fr", as it stood on 2022-08-20 after a change by Kai Burghardt, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history