La fonction, une recette réutilisable
La recette « préparer un msemen » est écrite une fois. Ensuite on l'appelle autant de fois qu'on veut, avec des ingrédients différents. Une fonction, c'est pareil : on l'écrit une fois, on l'appelle souvent.
Structurer un algorithme en sous-programmes, passer des paramètres par valeur ou par référence, et distinguer variables globales et locales.
Le programme de caisse grossit : il calcule des remises à plusieurs endroits, affiche des tickets, vérifie des saisies. Le même bloc de code est recopié trois fois, et une correction oubliée à un endroit a causé une erreur de caisse. Il est temps de ranger le code dans des sous-programmes.
Le programme principal range 4 dans x. Pour l'instant, r est inconnue.
Quand un algorithme devient long, on le découpe en sous-programmes : des blocs nommés que l’on peut appeler plusieurs fois. C’est la suite naturelle de l’approche descendante (leçon A.2).
Fonction Carre(n : entier) : entier
Début
Retourner n * n
FinFonction
Procédure AfficherEtoiles(n : entier)
Variables
i : entier
Début
Pour i ← 1 jusqu'à n Faire
Ecrire("*")
FinPour
FinProcédure
r ← Carre(x).AfficherEtoiles(5).Var) : le paramètre désigne la variable de l’appelant. Les changements sont visibles. L’appel doit donner un nom de variable, pas une valeur.Préférez les paramètres aux variables globales : un sous-programme qui ne dépend que de ses paramètres est plus facile à tester et à réutiliser.
La recette « préparer un msemen » est écrite une fois. Ensuite on l'appelle autant de fois qu'on veut, avec des ingrédients différents. Une fonction, c'est pareil : on l'écrit une fois, on l'appelle souvent.
Au lieu de recopier « prix × 1,2 » à dix endroits, on écrit une fonction TTC et on l'appelle. Si le taux change, on ne corrige qu'un seul endroit.
Fonction TTC(ht : réel) : réel Retourner ht * 1.2 FinFonction Ecrire(TTC(100)) // 120 Ecrire(TTC(250)) // 300
Écrivez une fonction Max(a, b : entier) : entier qui retourne le plus grand des deux, puis utilisez-la pour afficher le maximum de trois nombres lus au clavier.
Le maximum de trois nombres est Max(Max(a, b), c).
Algorithme MaxDeTrois Variables x, y, z : entier Fonction Max(a : entier, b : entier) : entier Début Si a > b Alors Retourner a Sinon Retourner b FinSi FinFonction Début Lire(x) Lire(y) Lire(z) EcrireAvecSaute("Maximum : ", Max(Max(x, y), z)) Fin
Écrivez une procédure qui échange les valeurs de deux variables de l'appelant. Pourquoi faut-il le mot Var ?
Procédure Echanger(Var a, b : entier) Variables tmp : entier Début tmp ← a a ← b b ← tmp FinProcédure // Sans Var, la procédure travaillerait sur des copies : // les variables de l'appelant ne changeraient pas.