You are on page 1of 6

ECO 2 Mathématiques Année scolaire 2010-2011

PASCAL - TD N˚2
Procédures et fonctions - Variables globales, locales
Rappels de cours - Exercices

1 Cours
1.1 Introduction
Les procédures et fonctions sont des sous-programmes écrits avant le programme principal mais appelés depuis ce programme
principal, d’une autre procédure ou même d’une autre fonction. Le nom d’une procédure ou d’une fonction est un identifiant
qui ne de doit pas excéder 127 caractères, ne pas contenir d’accent ni de caractères spéciaux ($,#, ...). Ce nom doit, en outre,
être différent de celui d’une instruction en Pascal.

Les procédures et les fonctions acceptent des paramètres d’entrée (envoyés par le programme principal).

Le langage Pascal dispose de fonctions et de procédures prédéfinies, comme par exemple LN, SQRT, ODD, ...

Le Pascal permet de déclarer ses propres fonctions et procédures.

Structure d’un programme avec fonction/procédure

PROGRAM nom_du_programme; {déclaration du nom du programme}


VAR ... ; {déclaration des variables globales}

{Déclaration des procédures et des fonctions}

BEGIN {Programme principal}


...
END.

1.2 Procédure
1.2.1 Syntaxe
PROCEDURE nom_de_la_procedure(parametres_d_entree); {Déclaration de la procédure}
VAR ... ; {Déclaration des variables locales}
BEGIN
instruction1;
... ;
END;

1.2.2 Appel d’une procédure depuis le programme principal


Cas d’une procédure sans paramètre d’entrée

nom_de_la_procedure; {Appel de la procédure}

Cas d’une procédure avec paramètres d’entrée

nom_de_la_procedure(param1,param2,...); {Appel de la procédure avec la liste des paramètres d’entrée}

J. Bourdon http://www.lycee-militaire-aix.fr/professeurs/bourdon/ -1-


ECO 2 Mathématiques Année scolaire 2010-2011

1.2.3 Exemple

1 PROGRAM TP2;
2

3 PROCEDURE Affiche;
4 VAR i:INTEGER;
5

6 BEGIN
7 FOR i:=1 TO 5 DO
8 WRITELN(i);
9 END;
10

11 BEGIN
12 Affiche; {Appel de la procédure Affiche}
13 READLN;
14 END.

1.3 Fonction
Une fonction requiert un certains nombre de paramètres d’entrée et retourne au programme principal une valeur d’un type
défini (INTEGER, REAL, ...)

1.3.1 Syntaxe
FUNCTION nom_de_la_fonction(parametres_d_entree): type_valeur_de_retour; {Déclaration de la fonction}
VAR ... ; {Déclaration des variables locales}
BEGIN
instruction1;
... ;
nom_de_la_fonction:=valeur_de_retour; {Valeur retournée par la fonction}
END;

Dans une fonction, l’instruction nom_de_la_fonction:=valeur_de_retour; est celle qui permet d’affecter la valeur de
retour dans le programme principal. Sans cette instruction, la fonction ne retourne aucune valeur.

1.3.2 Récupération de la valeur retournée par une fonction dans le programme principal
Cas d’une fonction sans paramètre d’entrée

ma_variable:=nom_de_la_fonction; {Affectation de la valeur de retour à la variable ma_variable}

Cas d’une fonction sans paramètre d’entrée

ma_variable:=nom_de_la_fonction(param1,param2,...);
{Affectation de la valeur de retour à la variable ma_variable}

1.3.3 Exemple

1 PROGRAM TP2;
2 VAR x:INTEGER;
3 FUNCTION AjouteUn(i:INTEGER): INTEGER;
4

5 BEGIN
6 AjouteUn:=i+1;
7 END;
8

9 BEGIN
10 x:=AjouteUn(4);
11 WRITELN(’x= ’,x);
12 READLN;
13 END.

J. Bourdon http://www.lycee-militaire-aix.fr/professeurs/bourdon/ -2-


ECO 2 Mathématiques Année scolaire 2010-2011

1.4 Variables locales, variables globales ?


Les variables déclarées grâce à la l’instruction VAR en en-tête du programme principal sont des variables globales qui sont
connues dans le programme principal ainsi que dans toutes les procédures et fonctions.

Les variables déclarées grâce à la l’instruction VAR en en-tête d’une fonction et/ou d’une procédure sont des variables locales
qui ne sont connues que dans la procédure/fonction dans lesquelles elles sont définies. Si une procédure modifie une variable
locale, cette modification ne sera effective que dans la procédure.
Voici deux exemples pour illustrer cette notion.

1 PROGRAM TP2;
2 VAR i:INTEGER;
3

4 PROCEDURE Affiche;
5 VAR i:INTEGER;
6

7 BEGIN
8 FOR i:=1 TO 5 DO
9 WRITELN(’i= ’, i);
10 END;
11

12 BEGIN
13 Affiche;
14 WRITELN(’i= ’, i);
15 READLN;
16 END.

1 PROGRAM TP2;
2 VAR i:INTEGER;
3

4 PROCEDURE AjouteUn;
5 BEGIN
6 i:=i+1;
7 END;
8

9 BEGIN
10 i:=0;
11 AjouteUn;
12 WRITELN(’i= ’,i);
13 READLN;
14 END.

Attention ! Il faut éviter de donner le même nom à une variable globale et à une variable locale.

J. Bourdon http://www.lycee-militaire-aix.fr/professeurs/bourdon/ -3-


ECO 2 Mathématiques Année scolaire 2010-2011

1.5 Passage en valeur, passage en adresse


Il existe deux manières de fournir des paramètres d’entrée à une procédure/fonction depuis le programme principal.

1.5.1 Paramètres d’entrée déclarés en valeur


PROCEDURE nom_de_la_procedure(variable1:type1; variable2:type2; ...);

FUNCTION nom_de_la_fonction(variable1:type1; variable2:type2; ...):type_valeur_de_retour;

Dans ce cas, les variables passées en valeurs (variable1, variable2, ...) seront considérées comme des variables locales et
leur modification dans la procédure ne sera pas répercutée sur les variables passées en paramètres dans le programme principal.

1 PROGRAM TP2;
2 VAR x,y:INTEGER;
3

4 PROCEDURE Remplace(a,b:INTEGER);
5 BEGIN
6 a:=b;
7 b:=2*b;
8 END;
9

10 BEGIN
11 x:=3;
12 y:=5;
13 Remplace(x,y);
14 WRITELN(’x=’,x,’ y=’,y );
15 READLN;
16 END.

1.5.2 Paramètres d’entrée déclarés en adresse


PROCEDURE nom_de_la_procedure(VAR variable1:type1; VAR variable2:type2; ...);

FUNCTION nom_de_la_fonction(VAR variable1:type1; VAR variable2:type2; ...):type_valeur_de_retour;

Dans ce cas, les variables passées en adresses (variable1, variable2, ...) seront considérées comme des variables globales et
leur modification dans la procédure sera répercutée sur les variables passées en paramètres d’entrée dans le programme principal.

1 PROGRAM TP2;
2 VAR x,y:INTEGER;
3

4 PROCEDURE Remplace(VAR a,b:INTEGER);


5 BEGIN
6 a:=b;
7 b:=2*b;
8 END;
9

10 BEGIN
11 x:=3;
12 y:=5;
13 Remplace(x,y);
14 WRITELN(’x=’,x,’ y=’,y );
15 READLN;
16 END.

J. Bourdon http://www.lycee-militaire-aix.fr/professeurs/bourdon/ -4-


ECO 2 Mathématiques Année scolaire 2010-2011

2 Exercices
Exercice 1
Dans le programme suivant, identifier toutes les variables, préciser si elles sont locales ou globales et donner leur valeur à
l’issue de l’exécution du programme.
1 PROGRAM EXO;
2 VAR x,y:INTEGER;
3

4 PROCEDURE Procedure1(a:INTEGER; VAR b:INTEGER);


5 BEGIN
6 a:=b*a;
7 b:=a;
8 END;
9

10 BEGIN
11 x:=3;
12 y:=2;
13 Procedure1(x,y);
14 END.

Exercice 2
Même exercice avec le programme suivant.
1 PROGRAM EXO;
2 VAR x,y,k:INTEGER;
3

4 FUNCTION MaFonction(VAR a:INTEGER):INTEGER;


5 VAR k:INTEGER;
6 BEGIN
7 FOR k:=1 TO 5 DO
8 a:=a+k;
9 MaFonction:=a;
10 END;
11

12 BEGIN
13 x:=3;
14 y:=MaFonction(x);
15 END.

Exercice 3
Ecrire une fonction Min, de paramètres d’entrée a et b de type REAL qui retourne le minimum de a et de b.

Exercice 4
Ecrire une procédure Echange de paramètres d’entrée a et b de type REAL qui échange le contenu des deux paramètres
d’entrée a et b.

J. Bourdon http://www.lycee-militaire-aix.fr/professeurs/bourdon/ -5-


ECO 2 Mathématiques Année scolaire 2010-2011

Exercice 5 (La conjecture de Collatz)


On considère la fonction f définie sur N∗ par
 n
 si n est pair,
2

f (n) =

3n + 1 sinon

1. Déterminer f (N∗ ).

On considère la suite (an )n∈N définie par

a0 ∈ N∗ , et an+1 = f (an ) ∀n ≥ 0

Voici la conjecture de Collatz 1 , appelée également conjecture de Syracuse :

”This sequence will eventually reach the number 1, regardless of which positive integer is chosen initially.”
2. Traduire la phrase ci-dessus et vérifier la conjecture pour les entiers a0 = 1, 2, 3, 4, 5 et 6.
3. Que se passe-t’il après avoir atteint 1 pour la première fois ?
4. Ecrire une fonction en Pascal f qui calcule f (n) pour un entier naturel n :
FUNCTION f(n:integer):integer;
5. L’entier a0 est appelée altitude initiale et la durée du vol est le plus petit entier naturel n vérifiant an = 1. On appelle
vol la donnée des entiers a0 , . . . , an , où n est la durée du vol.
Décrire le vol et déterminer la durée de celui-ci pour l’altitude initiale a0 = 7.
Pour quelles valeurs de l’altitude initiale le vol est-il décroissant, ie vérifie a0 > a1 > . . . > an−1 > an = 1 ?
Quelle est la durée du vol pour une altitude initiale a0 = 2m (m ∈ N) ?
6. A l’aide de la fonction f, écrire une procédure collatz qui affiche les termes de la suite (an ) , en fonction de l’altitude
initiale a0 entrée par l’utilisateur, jusqu’à ce que la valeur 1 soit atteinte.
PROCEDURE collatz(a0:INTEGER);
7. Ecrire une fonction Pascal duree_du_vol qui renvoie la durée du vol, en fonction de l’altitude initiale a0 .
FUNCTION duree_du_vol(a0:INTEGER):INTEGER;
8. Donner les durées de vol pour les altitudes initiales a0 = 11, 27 et 171.
9. On appelle altitude maximale du vol le plus grand entier obtenu au cours du vol. Quelle est l’altitude maximale du vol
pour une altitude initiale a0 = 6 ?

Ecrire une fonction Pascal altitude_maximale qui retourne la hauteur maximale du vol, en fonction de l’altitude initiale
a0 .
FUNCTION altitude_maximale(a0:INTEGER):INTEGER;
10. Quelle est la hauteur maximale de vol pour l’altitude initiale a0 = 27 ? a0 = 990 ?

1. Lothar Collatz (6 juillet 1910 - 26 septembre 1990) était un mathématicien allemand. A ce jour, sa conjecture n’est toujours pas démontrée.

J. Bourdon http://www.lycee-militaire-aix.fr/professeurs/bourdon/ -6-

You might also like