Fonctions Abstractions procédurales
Problème 1 Analogie avec une recette de cuisine (préparation du vol-au-vent) Source: www.750gr.com Comment faire la béchamel maison ?
Problème 1 Analogie avec une recette de cuisine … La béchamel est décrite à un autre endroit du site. Pourquoi? Ne pas surcharger la recette et ainsi découper le problème en sous problème == Abstraction On voit clairement les grandes étapes Plus simple à comprendre Ne pas réécrire 50 fois la même chose mais plutôt ne l’écrire qu’une seule fois et pouvoir la réutiliser pour d’autres recettes == Réutilisation
Description Analogie avec une recette de cuisine … Il existe un mécanisme similaire en programmation dénommé fonction (ou Abstraction Procédurale) Le développeur écrit à un endroit unique le code qu’il veut rendre réutilisable et lui donne un nom == déclaration de la fonction Aux endroits où il veut réutiliser le code, le développeur demande l’exécution en référençant le nom de la fonction = appel à la fonction
Exemple Considérons le tableau tnom suivant: Julie Sophie John Arthur Maxime 1 2 3 4 Considérons le tableau tnom suivant: Considérons le code suivant : Que sera-t-il affiché ? FONCTION bienvenue() { ECRIRE “Nous vous souhaitons la bienvenue à l’ISFCE et la réussite de vos études entreprises chez nous.” } ECRIRE “Bonjour” + tnom[1] + RETOURLIGNE bienvenue() ECRIRE “Bonjour” + tnom[2] + RETOURLIGNE
Exemple Tableau tnom : Code : FONCTION bienvenue() { Julie Sophie John Arthur Maxime 1 2 3 4 Tableau tnom : Code : FONCTION bienvenue() { ECRIRE “Nous vous souhaitons la bienvenue à l’ISFCE et la réussite de vos études entreprises chez nous.” } ECRIRE “Bonjour” + tnom[1] + RETOURLIGNE bienvenue() ECRIRE “Bonjour” + tnom[2] + RETOURLIGNE Déclaration de fonction Appels de la fonction
Déclaration et Appel Il est important de comprendre que le fait de déclarer une fonction n'entraîne pas l’exécution du code. Il est nécessaire d’appeler la fonction pour l'exécuter. Une déclaration de fonction sans appel ne sert à rien.
Problème 2 Imaginons que l’on voudrait réutiliser du code mais préciser, lorsqu’on appelle la fonction, avec quelles données travailler Exemple : Introduire la ligne bonjour dans la fonction ECRIRE “Bonjour” + tnom[1] + RETOURLIGNE bienvenue() ECRIRE “Bonjour” + tnom[2] + RETOURLIGNE Il faut pour cela préciser des paramètres à la fonction
Problème 2 FONCTION bienvenue(nom) { ECRIRE “Bonjour” + nom + RETOURLIGNE ECRIRE “Nous vous souhaitons la bienvenue à l’ISFCE et la réussite de vos études entreprises chez nous.” } Les paramètres permettent de réutiliser du code en changeant les données avec lesquelles le code est utilisé == généralisation Il faudra préciser la valeur du paramètre au moment de l’appel de la fonction (avec une variable ou une constante)
Exemple 1 FONCTION double(nombre) { d ← 2 * nombre ECRIRE d } ECRIRE “Voici le double de 6” double(6) // Appel avec une constante ECRIRE “Voici le double de 50” a ← 50 double(a) // Appel avec une variable
Exemple 2 FONCTION puissance(a, b) { i ← 0 res ← 1 TANT QUE i < b FAIRE res ← res * a i ← i + 1 FIN TANT QUE ECRIRE res } puissance(6, 2) puissance(5, 0) x ← 3 y ← 2 puissance(x, y) puissance(y, x) puissance(x, x) a ← 2 b ← 5 puissance(a, b) puissance(b, a) puissance(a, a) puissance(b, 3)
Exemple 2 + réponses FONCTION puissance(a, b) { i ← 0 res ← 1 TANT QUE i < b FAIRE res ← res * a i ← i + 1 FIN TANT QUE ECRIRE res } puissance(6, 2) // 36 puissance(5, 0) // 1 x ← 3 y ← 2 puissance(x, y) // 9 puissance(y, x) // 8 puissance(x, x) // 27 a ← 2 b ← 5 puissance(a, b) // 32 puissance(b, a) // 25 puissance(a, a) // 4 puissance(b, 3) // 125
Paramètres formels et effectifs Sur base de l’exemple précédent, il est intéressant de noter qu’il n’est pas nécessaire que les paramètres dans la déclaration de la fonction (« paramètre formel ») et ceux dans l’appel à la fonction (« paramètre effectif ») aient le même nom. D’ailleurs, c’est l’ordre qui est important pour donner la valeur aux paramètres formels et non le nom.
Problème 3 Il est parfois utile de pouvoir récupérer la valeur calculée dans une fonction afin de la réutiliser dans le reste du code. Il faudrait pouvoir faire “sortir” la valeur calculée de la fonction La clause RETOURNE permet de faire sortir une valeur qui peut être affectée dans une autre variable Attention: Une fois que la clause RETOURNE a été exécutée, même s’il reste du code, l’exécution de la fonction s’arrête et le reste du programme continue.
Exemple FONCTION puissance(a, b) { i ← 0 res ← 1 TANT QUE i < b FAIRE res ← res * a i ← i + 1 FIN TANT QUE RETOURNE res } a ← puissance(2, 2) b ← puissance(5, a) ECRIRE b
Exercices Que va-t-il s’afficher à l’écran? 52/102/4
Exercices Réalisez un programme capable de décomposer un montant (en euro, aucun centime) en détaillant les différentes coupures qui le composent. La décomposition doit fournir le moins de pièces et de billets possibles Exemple pour 2640 EUR 5 coupure(s) de 500 EUR 1 coupure(s) de 100 EUR 2 coupure(s) de 20 EUR Ecrire pour ce faire une fonction qui prend en paramètre un montant et une coupure, affiche le nombre de coupures et retourne le reste. Exemple : coupe( 2640, 500 ); Affiche 5 Retourne 140
Exercices Réalisez un programme capable de décomposer une série de montants en détaillant les différentes coupures qui le composent. Utilisez pour ce faire la fonction coupe de l’exercice précédent. Les montants sont donnés en custom input, un montant par ligne, la dernière valeur est « q ». Organisez votre code intégralement en fonctions. La fonction principale s’appelera main() qui sera appelée au chargement du programme). Enrichissez ce programme en distinguant les pièces des billets, ainsi que le singulier du pluriel. Exemple pour 44,50 EUR : 2 coupures de 20 EUR 2 pièces de 2 EUR 1 pièce de 0,50 EUR