7. Passage de paramètres (1 heure)
7.1 Raison d'être
- Pour utiliser une procédure comme un bout de programme indépendant.
- Pour lui donner la possibilité de faire des entrées / sorties.
7.2 Passage par valeurs, par variables
- Différence : l'effet des modification des arguments à l'intérieur de
la procédure.
- Syntaxe : le mot clé
VAR
.
- Exemple :
PROCEDURE Swap(VAR x, y : INTEGER);
VAR temp : INTEGER;
BEGIN
temp := x;
x := y;
y := temp;
END;
- Exemple :
CONST Dim = 3;
TYPE Vecteur = ARRAY[1..Dim] OF REAL;
PROCEDURE AddVecteurs(a, b : Vecteur; VAR c : Vecteur);
VAR Indice : 1..Dim;
BEGIN
FOR Indice := 1 TO Dim DO
c[Indice] := a[Indice] + b[Indice];
END;
7.3 "Adresse" d'une case
- Passage par valeur : création d'une nouvelle case mémoire, recopie
de l'argument.
- Passage par variable : utilisation de la même case mémoire. On passe
l'"adresse" de cette case.
8. Rappels (1/2 heure)
8.1 Déclaration -- Instruction
- Un programme Pascal est composé d'une zone de déclarations,
suivie d'une zone d'instructions (délimitée par
BEGIN
et END.
).
- Les déclarations que nous avons vues sont :
-
PROGRAM
-
TYPE
-
CONST
et VAR
-
PROCEDURE
et FUNCTION
- Les instructions que nous avons vues sont :
- Affectation (
:=
)
- Appel de procédure
- Séquence d'instructions (
BEGIN ... END
)
- Sélection (
IF
)
- Itération (
WHILE
, REPEAT
, FOR
)
- La déclaration d'une procédure doit contenir sa description,
sous la forme d'une xone de déclarations locales et une zone
d'instructions locales.
8.2 Instruction -- Expression
- Une instruction est une commande exécutée par le programme.
Une expression est une formule ayant une certaine valeur.
- Les expressions que nous avons vues sont :
- Constante : valeur numérique, booléenne ou chaîne de caractères
- Appel de fonction
- Expression composée, à l'aide d'opérateurs, unaires ou binaires
- Les opérateurs que nous avons vus sont :
- Pour les entiers : +, -, *,
DIV, MOD
- Pour les flottants : +, -, *,
/
- Pour les booléens : NOT, AND, OR,
XOR
- Ayant un résultat booléen : =, <>,
<, <=, >, >=
8.3 Mots clés
- Ce sont des mots ayant une signification réservée, ne pouvant servir
d'identificateur.
- Nous avons par exemple vu :
- BEGIN, END
- PROGRAM, PROCEDURE, FUNCTION
- IF, THEN, ELSE
- FOR, WHILE, REPEAT, UNTIL,
DO, TO
- VAR, CONST, TYPE
- INTEGER, LONGINT, BYTE, REAL,
BOOLEAN, CHAR, STRING, ARRAY
- DIV, MOD, NOT, AND,
OR, XOR
TP5. Conception de procédures
TP5.1 Tri de deux variables entières, avec échange si nécessaire
PROCEDURE TrieDeux(VAR x, y ; INTEGER);
VAR Temp : INTEGER;
BEGIN
IF x > y THEN
BEGIN
Temp := x;
x := y;
y := Temp;
END
END;
TP5.2 Fonction Max d'un tableau entier
NB: le nombre d'éléments du tableau doit être une constante N
.
CONST N = 100;
FUNCTION MaxTableau(Tab : ARRAY[1..N] OF INTEGER) : INTEGER;
VAR Indice : 1..N;
Maxi : INTEGER;
BEGIN
Maxi := Tab[1];
FOR Indice := 2 TO N DO
IF Tab[Indice] > Maxi THEN
Maxi := Tab[Indice];
MaxTableau := Maxi;
END;
TP5.3 Tableau des différences
On a des entiers x[i]
dans un tableau numéroté de
0
à N-1
. Faire une procédure qui remplace
x[i]
par x[i]-x[i+1]
, sachant que x[N-1]
est remplacé par x[N-1]-x[0]
.
Par exemple, [1 4 6 -3 5 2] devient [-3 -2 9 -8 3 1].
PROCEDURE Difference(VAR x : ARRAY[0..N-1] OF INTEGER);
VAR i : 0..N-1;
x0 : INTEGER;
BEGIN
x0 := x[0];
FOR i := 0 TO N-2 DO
x[i] := x[i] - x[i+1];
x[N-1] := x[N-1] - x0;
END;