pdf - e-book - archive

1.5  Sous-Programmes


Voir les diapos


Dès qu’un programme nécessite une grande quantité de code, on se retrouve vite dans une situation où le code ressemble à un pâté. Posant ainsi de nombreux problèmes lorsqu’il s’agit de trouver des erreurs ou d’effectuer des modifications. Existe-t-il des moyens d’organiser ses instructions et de subdiviser un programme en plusieurs petits programmes ?

Nous allons utiliser des sous-programes pour subdiviser un programme. Il en existe deux types :

1.5.1  Les procédures

Définition

Une procédure est un ensemble d’instructions portant un nom

La syntaxe permettant d’en créer une est la suivante :

Par exemple,

Appel

On exécute une procédure en utilisant son nom.

On dit aussi que l’on appelle la procédure, ou encore qu’on l’invoque.

Par exemple, l’instruction.

exécute la procédure afficheBonjour, on dit aussi qu’on appelle la procédure afficheBonjour. Ainsi il existe deux façons de rédiger le même algorithme :

Sans procédure

et avec une procédure

Exemple

Vous pouvez définir autant de procédures que vous le voulez et vous pouvez appeler des procédures depuis des procédures :

1.5.2  Variables locales

Définition

Une variable locale est une variable déclarée dans une procédure.

On peut par exemple réaliser une procédure affichant les dix premiers nombres entiers en déclarant un compteur dans la procédure :

Visibilité

Attention : une procédure ne peut pas utiliser les variables locales d’une autre procédure. Par exemple, ceci est mal :

Identificateur

Un identificateur est un nom choisi par le programmeur.

Mots-clés

Tout ce qui n’est pas choisi par le programmeur entre dans la catégorie suivante : Un mot-clé (ou mot réservé) est un mot imposé par le langage de programmation.

Par exemple,

Les mots Si, fin, alors procedure... sont des mots-clés. Vous vous douterez que les mots réservés le sont parce qu’il est impossible de les choisir comme nom de variable.

1.5.3  Passage de paramètres

Définitions

Il y a passage de paramètre lorsque la procédure appelante transmet une information à la procédure appelée.

L’exemple suivant permet d’afficher une valeur déterminée en dehors de la procédure :

Dans l’exemple ci-avant, la valeur 4 est recopiée dans la variable x puis est affichée par la procédure afficheValeur. Cet extrait affiche donc la valeur 4.

Passage de paramètre par valeur

On aurait tout à fait pu utiliser une variable à la place du 4 :

Attention : titi et x sont deux variables différentes ! Modifier l’une n’a aucun effet sur l’autre. Certes titi est recopiée dans x lors de l’appel de la procédure afficheValeur, mais il ne s’agit de rien de plus que d’une affectation entre ces deux variables.

Paramètres formels et effectifs

Pour éviter toute confusion entre titi et x, nous utiliserons la terminologie suivante :

Dans l’exemple suivant, formel est le paramètre formel et effectif le paramètre effectif.

Passage de plusieurs paramètres

Il est possible de passer plusieurs valeurs en paramètre :

Cette procédure peut s’appeller de la façon suivante :

Lors de cet appel, A est recopié dans x et B est recopié dans y.

1.5.4  Passage de paramètres par référence

Exemple

Tentons d’échanger les valeurs de deux variables dans une procédure :

On peut appeler cette procédure de la façon suivante :

L’exécution de ce sous-programme laisse les valeurs de A et B inchangées :

Alias

Deux identificateurs de variables i et j sont des alias s’ils représentent la même variable.

Autrement dit, les valeurs de i et j sont liées, dans le sens ou modifier l’une revient aussi à modifier l’autre.

Dans le cas de l’échange de deux variables, pour que des modifications sur x et y soient répercutées sur A et B, il faudrait que x soit un alias de A et que y soit un alias de B. Pour ce faire, nous allons utiliser un passage de paramètre par référence :

Définition

Il y a passage de paramètre par :

Lors d’un passage de paramètres par référence, on transmet non pas les valeurs des variables, mais les variables elles-mêmes.

Passage de paramètres par valeur :

Passage de paramètres par référence.

Conventions

On résumera les choses ainsi :

Effet de bord

1.5.5  Fonctions

Définition

Il existe un autre mécanisme permettant au sous-programme appelé de transmettre une information au sous-programme appelant : celui des valeurs de retour. Une fonction est un sous-programme fait pour transmettre une unique valeur au sous-programme appelant. On dit que cette valeur est retournée.

La fonction Un() transmet 1 au sous-programme appelant.

Une fonction se déclare

On retourne une valeur avec l’instruction

La fonction carre prend en paramètre une valeur x et retourne la valeur x2.

Appel

On peut appeler une fonction de plusieurs façons :

On remarque que l’utilisation des fonctions est davantage souple que celle des procédures :

Parallèle avec les mathématiques

La notion de fonction en tant que sous-programme est à mettre en parallèle avec celle de fonction mathématique.

La fonction f(x) = 3x + 1 est une correspondance entre une valeur quelconque x et celle que l’on obtient en multipliant x par 3 et en lui ajoutant 1.

On l’appelle :

On peut considérer que l’antécédent est x et que la valeur retournée est l’image de la fonction.

Effets de bords