Les fonctions en général
159
demande que la variable n soit rémanente. Utilisons cette possibilité dans notre fonction
bizarre du paragraphe 4.1.1, page 156 :
bizarre (vrai)
.....
bizarre (faux)
fonction bizarre (booléenn nouveau)
{ entier rémanent n
si nouveau alors lire n
écrire n
}
Cette fois, le second appel de bizarre affiche la même valeur que le premier.
On peut initialiser une variable locale rémanente au moment de sa déclaration mais il faut
bien voir que cette initialisation n’a lieu qu’une seule fois, avant le premier appel de la fonction (sinon, la variable ne serait plus rémanente !).
Voici un exemple de fonction qui comptabilise ses appels en utilisant une variable rémanente
initialisée (une seule fois) à 0 :
fonction compte
{ entier rémanent nbAppels := 0
n := n + 1
écrire «appel numéro » , n
}
Fonction comptabilisant ses appels
Exercice 8.7 Écrire une fonction nommée cumul qui lit un nombre réel et qui fournit en résultat la moyenne de tous les nombres lus depuis son premier appel.
4.2 Propriétés du résultat
Comme on s’y attend, le résultat d’une fonction peut être d’un type de base quelconque
(entier, réel, caractère, booléen). On pourrait envisager un résultat qui soit un
tableau. Mais, dans ce cas, il faudrait alors s’interroger sur la nature de l’emplacement
mémoire correspondant.
Plus précisément, s’il s’agit d’un tableau local à la fonction, la seule façon de le fournir en
résultat serait d’en recopier les valeurs. En effet, la solution qui consisterait à n’en renvoyer
que la référence n’est pas utilisable puisque l’on a supposé que les tableaux locaux, pas plus
que les variables locales, ne sont pas rémanents. Cela signifie qu’après l’exécution de la
fonction, on aura aucune garantie ni sur l’emplacement mémoire correspondant (qui peut très
bien être « récupéré » pour autre chose) et encore moins sur les valeurs.
En toute rigueur, dans les langages qui disposent de la gestion dynamique, on peut envisager
qu’une fonction alloue dynamiquement un emplacement pour un tableau et qu’elle en renvoie la référence. Nous n’examinerons pas ce point dans le cas des tableaux puisque nous
159
demande que la variable n soit rémanente. Utilisons cette possibilité dans notre fonction
bizarre du paragraphe 4.1.1, page 156 :
bizarre (vrai)
.....
bizarre (faux)
fonction bizarre (booléenn nouveau)
{ entier rémanent n
si nouveau alors lire n
écrire n
}
Cette fois, le second appel de bizarre affiche la même valeur que le premier.
On peut initialiser une variable locale rémanente au moment de sa déclaration mais il faut
bien voir que cette initialisation n’a lieu qu’une seule fois, avant le premier appel de la fonction (sinon, la variable ne serait plus rémanente !).
Voici un exemple de fonction qui comptabilise ses appels en utilisant une variable rémanente
initialisée (une seule fois) à 0 :
fonction compte
{ entier rémanent nbAppels := 0
n := n + 1
écrire «appel numéro » , n
}
Fonction comptabilisant ses appels
Exercice 8.7 Écrire une fonction nommée cumul qui lit un nombre réel et qui fournit en résultat la moyenne de tous les nombres lus depuis son premier appel.
4.2 Propriétés du résultat
Comme on s’y attend, le résultat d’une fonction peut être d’un type de base quelconque
(entier, réel, caractère, booléen). On pourrait envisager un résultat qui soit un
tableau. Mais, dans ce cas, il faudrait alors s’interroger sur la nature de l’emplacement
mémoire correspondant.
Plus précisément, s’il s’agit d’un tableau local à la fonction, la seule façon de le fournir en
résultat serait d’en recopier les valeurs. En effet, la solution qui consisterait à n’en renvoyer
que la référence n’est pas utilisable puisque l’on a supposé que les tableaux locaux, pas plus
que les variables locales, ne sont pas rémanents. Cela signifie qu’après l’exécution de la
fonction, on aura aucune garantie ni sur l’emplacement mémoire correspondant (qui peut très
bien être « récupéré » pour autre chose) et encore moins sur les valeurs.
En toute rigueur, dans les langages qui disposent de la gestion dynamique, on peut envisager
qu’une fonction alloue dynamiquement un emplacement pour un tableau et qu’elle en renvoie la référence. Nous n’examinerons pas ce point dans le cas des tableaux puisque nous
