L'entête d'une fonction spécifie son nom, le type de son résultat,
et les paramètres (avec leurs types). Ces paramètres sont considérés
comme les données transmises à la fonction, c'est à dire
l'entrée de la fonction. Il peut arriver que la fonction modifie ces
paramètres lors de l'exécution de son algorithme. On parle alors
de paramètre modifiable : il s'agit à la fois d'une entrée
et d'une sortie de l'algorithme. La déclaration d'un tel paramètre
dans la liste des paramètres se fait de la manière suivante :
fonction nom(nom_param InOut : type_param):type_résultat
La fonction suivante prend deux paramètres réels et les modifie
de manière à ce qu'ils soient dans l'ordre croissant (N.B. : elle
ne retourne pas de résultat) :
fonction ordonner2Réels(x InOut : réel, y InOut : réel) début si x > y alors tmp <- x x <- y y <- temp fsi fin Lexique : - x : réel, valeur fournie, est modifiée (éventuellement) en le minimum de x et y - y : réel, valeur fournie, est modifiée (éventuellement) en le maximum de x et y - tmp : réel, variable de stockage temporaire
Il est évidemment possible d'avoir des paramètres modifiables et des paramètres non modifiables dans une même fonction.
La fonction suivante prend trois paramètres réels : les deux premiers
sont les bornes d'un intervalle, et le troisième est (éventuellement)
modifié de manière à rester dans l'intervalle spécifié.
fonction seuillerRéel(inf : réel, sup : réel, x InOut : réel) début si x < inf alors x <- inf sinon si x > sup alors x <- sup fsi fsi fin Lexique : - inf : réel, borne inférieure de l'intervalle - sup : réel, borne supérieure de l'intervalle - x : réel, valeur fournie, est modifiée (éventuellement) par seuillage
Enfin, une fonction qui utilise des paramètres modifiables peut égallement renvoyer un résultat.
La fonction suivante est similaire à celle de l'exemple précédent.
Elle renvoie en plus un booléen égal à vrai si et seulement
si le paramètre x a été effectivement modifié.
fonction modifierRéelParSeuillage(inf : réel, sup : réel, x InOut : réel):booléen début res <- faux si x < inf alors x <- inf res <- vrai sinon si x > sup alors x <- sup res <- vrai fsi fsi retourne res fin Lexique : - inf : réel, borne inférieure de l'intervalle - sup : réel, borne supérieure de l'intervalle - x : réel, valeur fournie, est modifiée (éventuellement) par seuillage - res : booléen, résultat vrai si x est modifié
Les fonctions ont jusqu'à présent été utilisées
de façon à présenter certains algorithme de manière
autonome (données fournies, résultat calculé). Plus générallement,
les fonctions sont utilisées pour décrire les différentes
étapes d'un algorithme plus complexe. On peut alors appeler ces
fonctions pour réaliser les étapes de calcul correspondantes :
lors de l'appel, on indique grâce aux paramètres les données
sur lequelles la fonction doit travailler, puis on récupère le
résultat retourné. Un appel de fonction provoque donc l'exécution
complète du corps de cette fonction.
Le passage des paramètres sera décrit ici de manière intuitive.
Chaque langage de programmation traite cet aspect d'une manière rigoureuse,
ce qui nécessite d'aborder les notions plus détaillées
(paramètres formels et effectifs, passage par valeur ou par adresse,
portée des paramètres, compatibilité des types, ...).
Décrire un algorithme qui calcule le maximum de 4 réels saisis
au clavier. Le calcul du maximum de deux valeurs sera décrit par une fonction.
fonction calculerMax2Réels(x : réel, y : réel):réel début si x > y alors res <- x sinon res <- y fsi retourne res fin Lexique : - x : réel, - y : réel, - res : réel, maximum trouvé Algorithme début maximum <- lire() pour i de 2 à 4 faire nombre <- lire() maximum <- calculerMax2Réels(nombre, maximum) pour écrire(maximum) fin Lexique : - maximum : réel, maximum des i premiers nombre réels - nombre : réel, ième réel donné - i : entier, indice d'itération
Schéma de l'évolution de l'état des variables instruction par instruction :
Il est possible d'utiliser les mêmes variables dans différentes fonctions
et dans l'algorithme principal. On précise donc à chaque fois à
quelle fonction correspond la variable.
On suppose que les valeurs intoduites par l'utilisateur sont : 35, 80, 37, 22.
|
Variables : |
Algorithme principal |
fonction calculerMax2Réels |
|||||
|
Instructions |
maximum |
nombre |
i |
x |
y |
x > y |
res |
|
1 |
35 |
|
|
/ |
/ |
/ |
/ |
|
2 |
|
|
2 |
/ |
/ |
/ |
/ |
|
3 |
|
80 |
|
/ |
/ |
/ |
/ |
|
4 |
|
|
|
80 |
35 |
|
|
|
f1 |
|
|
|
|
|
vrai |
|
|
f2 |
|
|
|
|
|
|
80 |
|
f4 |
80 |
|
|
|
|
|
retourne |
|
2 |
|
|
3 |
/ |
/ |
/ |
/ |
|
3 |
|
37 |
|
/ |
/ |
/ |
/ |
|
4 |
|
|
|
37 |
80 |
|
|
|
f1 |
|
|
|
|
|
faux |
|
|
f3 |
|
|
|
|
|
|
80 |
|
f4 |
80 |
|
|
|
|
|
retourne |
|
2 |
|
|
4 |
/ |
/ |
/ |
/ |
|
3 |
|
22 |
|
/ |
/ |
/ |
/ |
|
4 |
|
|
|
22 |
80 |
|
|
|
f1 |
|
|
|
|
|
faux |
|
|
f2 |
|
|
|
|
|
|
80 |
|
f4 |
80 |
|
|
|
|
|
retourne |
|
2 |
|
|
(fin) |
/ |
/ |
/ |
/ |
|
5 |
écrire |
|
|
/ |
/ |
/ |
/ |
Les paramètres fournis lors de l'appel peuvent être des expressions,
s'il ne s'agit pas de paramètres modifiables.
Si une fonction a des paramètres modifiables, les paramètres fournis
lors de l'appel doivent être des variables. Les instructions d'affectation
que contient la fonction appelée peuvent alors modifier ces variables.
Une fonction peut elle-même contenir plusieurs appels de fonctions. Il est
également possible d'utiliser le résultat d'une fonction directement
dans le paramètre fourni à l'appel d'une autre fonction.
Un étudiant doit, pour obtenir son diplôme, passer un écrit
et un oral dans deux modules. le coefficient du premier module est le double de
celui du second module. La moyenne d'un module, afin de ne pas pénaliser
trop les éventuels échecs accidentels, accorde un coefficient double
à la meilleure des deux notes obtenues.
On veut décrire un algorithme où, après saisie des quatre
notes, la décision finale est affichée (diplôme obtenu si
la moyenne est supérieure ou égale à 10, aucun module ne
devant avoir une moyenne inférieure à 8).
fonction calculerMoyenne(n1:réel, n2:réel):réel début moy <- (n1 + 2*n2)/3 retourne moy fin Lexique : - n1 : réel, note de coefficient 1 - n2 : réel, note de coefficient 2 - moy : réel, moyenne calculée fonction calculerNoteModule(n1:réel, n2:réel):réel début si n1 > n2 alors note <- calculerMoyenne(n2, n1) sinon note <- calculerMoyenne(n1, n2) fsi retourne note fin Lexique : - n1 : réel, première note - n2 : réel, deuxième note - note : réel, note du module fonction accorderDiplôme(m1:réel, m2:réel):booléen début moy <- calculerMoyenne(m2, m1) si moy < 10 alors recu <- faux sinon si (m1 < 8) ou (m2 < 8) alors recu <- faux sinon recu < vrai fsi fsi retourne recu fin Lexique : - m1 : réel, moyenne premier module - m2 : réel, moyenne second module - moy : réel, moyenne générale - recu : booléen, à vrai si l'étudiant a obtenu son diplôme Algorithme début ne_m1 <- lire() no_m1 <- lire() ne_m2 <- lire() no_m2 <- lire() obtenu <- accorderDiplôme(calculerNoteModule(ne_m1, no_m1), calculerNoteModule(ne_m2, no_m2)) si obtenu alors écrire("diplôme obtenu") sinon écrire("diplôme non accordé") fsi fin Lexique : - ne_m1 : réel, note d'écrit du premier module _ no_m1 : réel, note d'oral du premier module - ne_m2 : réel, note d'écrit du second module - no_m2 : réel, note d'oral du second module - obtenu : booléen, vrai si le diplôme est accordé
© Aflo Informatique , 2003-2004