Fonction

Programmation procédurale et modulaire

Définition

La programmation procédurale est basée sur une division du programme en utilisant des fonctions.

les avantages sont nombreux et considérables :

Généralement la programmation procédurale va de paire avec la programmation modulaire :

Définition

La programmation modulaire est le fait d'utiliser des groupes de fonctions déjà faites.

C'est ce que fait python via les bibliothèques ! Là aussi les avantages sont énormes et les inconvénients vraiment assez minimes.

Définir une fonction en python.


		
		
Exemple

Au début si je demande de faire une fonction valeur absolue, souvent les élèves aime bien écrire quelque chose du genre :


			

Il n'y a pas de mal mais la fonction fait plus que de calculer la valeur absolue, elle fait trois choses :

  1. Elle demande un nombre.
  2. Elle calcule la valeur absolue.
  3. Elle affiche le résultat à l'écran.

Il faut bien comprendre qu'écrite comme ça la fonction est quasi inutilisable, imaginons par exemple devoir construire une fonction qui calcul la distance de deux nombres a et b (mathématiquement |b-a|) avec une variation de la fonction du début c'est :


		

Portée des variables.

Exemple

			

Dans l'exemple la fonction à pour fonction de transformer le nombre pour avoir toujours un positif, on voit que la fonction ne marche pas, à la fin x vaut toujours -5. Que se passe t'il ?

Les variables de type int ou float données en paramètre sont copiées dans des nouvelles variables, le -5 qui est dans la variable x du programme principal va être placé dans une variable qui se nomme aussi x, dans la fonction ce n'est que la deuxième variable x qui sera prise en considération, une fois la fonction terminée les variables utilisée dans la fonction sont détruites.

Le nom d'une variable est un confort pour le programmeur, pour l’ordinateur ce qui importe est la place dans la mémoire, les deux variables x ne sont pas situées au même endroit et il ne va pas se tromper (le programmeur par contre...).

Au début considérer les fonctions comme des bulles, totalement indépendantes du reste du programme, qu'importe le nom des variables et noms utilisée dans la fonction par exemple. Plus tard vous verrez que l'on peut utilisez des mécanismes propre à python ou des concepts de variables globales mais c'est des concepts qui sont souvent déconseillé d'utiliser.

Mais alors comment faire pour transformer une variable et la rendre positive ? Par exemple comme ça :

	
		

Retourner plusieurs résultats.

Exemple

Dans les exemples précédents on retourne un résultat mais on peut très bien en retourner 0 (on parle alors de procédure) ou plusieurs :


			

Dans l'exemple suivant il n'y a pas de retour.


		

Valeur par défaut des paramètres.

Python permet de donner des valeurs par défauts à des paramètres d'une fonction.

Exemple

			

Si on ne donne pas la valeur de b alors elle vaut 0 (et la fonction donne la valeur absolue de a).

L'ordre des paramètres est très important et si on ne veut donner que certains paramètres et pas les premiers alors il faut donner les noms. Par exemple :


			
		

Bonne pratique.

Les points suivants sont souvent négligés (par paresse essentiellement) :


		

Un exemple graphique

Nous allons voir comment utiliser les fonctions de façons pratiques et efficaces dans un dessin.

Exercice
  1. Faire une fonction sapin (def sapin() :) qui va dessiner le sapin ci dessous, la pointe du sapin a pour coordonnées (0,0) soit le coin supérieur gauche de l’écran (oui le sapin sera coupé).
  2. On va modifier la fonction pour en plus ajouter un zoom sapin(zoom) zoom est un flottant positif, pour cela il suffit de multiplier toutes les dimensions par zoom (attention avoir des int en paramètre), ne multiplier pas les couleurs ou les angles.
  3. On va modifier la fonction pour pouvoir placer le sapin partout sur l’écran, la fonction sera sapin(x,y,zoom) pour cela il suffit de modifier toutes les coordonnées en ajoutant en abscisse x et en ordonnées y, attention la longueur, la hauteur, les angles et les couleurs ne sont pas des coordonnées.
  4. Répéter les sapins à l'aide de boucles.
  5. Faire une fonction arbre qui va dessiner le nuage ci-dessous :
  6. Faire une fonction arbre qui va dessiner l'arbre ci-dessous :
  7. Faire une fonction arbre qui va dessiner l'arbre ci-dessous :
  8. Un arc en ciel :

Exercice.

Exercice
  1. Un beignet coûte 2€ et un croissant coûte 1€, faire une fonction prix(nb_beignets, nb_croissants)qui demande le nombre de beignets et le nombre de croissants et qui retourne le prix à payer.
  2. Au cinéma une place coûte 7 euros pour les enfants de moins de 10ans, 10 euros pour les seniors de plus de 60 ans et de 13 euros pour les autres. Faire une fonction prix_cinema(age) qui a un age donné donne le prix à payer.
  3. Voici la grille de l’impôt sur le revenu

    faire une fonction qui demande votre revenu et va retourner votre impôt.
Exercice
  1. Faire une fonction max_2(a,b) qui va retourner le maximum entre a et b.
  2. Faire une fonction max_3(a,b,c) qui va retourner le maximum entre a, b et c (on peut éventuellement utiliser la fonction précédente).
  3. Faire une fonction test_ordonnées(a, b, c, d) qui retourne True si les a, b, c et d sont ordonnées dans le sens croissant.
  4. Faire une fonction pair( nb )qui retourne True si nb est pair et False sinon.
  5. Faire une fonction test_diviseur( a, b ) qui retourne True si a divise b et False sinon.
  6. Faire une fonction nb_chiffres( nb ) qui retourne le nb de chiffres du nombre entier nb. (Par exemple nb_chiffres(1253) = 4, nb_chiffres( 5 ) = 1 et nb_chiffres(123) = 3 (123 est un nombre à 3 chiffres). Aide compter combien de fois on peut diviser par 10 avant d'arriver à 0).
  7. Faire une fonction ordonne_trois_nombres(a,b,c) qui va retourner les trois nombres dans l'ordre.
  8. Faire une fonction racine_entiere(n) qui donne le plus grand entier a tel que a² ≤n, (exemple racine_entiere(20) = 4 en effet 4² = 16 < 20 et 5² = 25 > 20.
  9. Faire une fonction test_premier(n) qui retourne True si le nombre est premier ou False sinon.
  10. Faire une fonction test_egal_trois_nombres(a,b,c) qui retourne True si au moins deux des trois nombres sont égaux.
  11. Faire une fonction qui prend trois les longueurs des trois cotés d'un triangle et qui retourne si le triangle est rectangle.
Exercice

En mathématique une suite numérique est un ensemble de nombres numérotés par des entiers :

u0 = 3, u1 = 5, u2 = 7, u3 = 9, u4 = 11, u5 = ..., u6 = ...

v0 = 2, v1 = 4, v2 = 8, v3 = 16, v4 = 32, v5 = ..., v6 = ...

w0 = 2, w1 = 5, w2 = 11, w3 = 23, w4 = 47, w5 = ..., w6 = ...

z0 = 1, z1 = 1, z2 = 2, z3 = 3, z4 = 5, z5 = 8, z6 = 13, z7 = ...

  1. Compléter les termes manquants
  2. Si a contient un terme de la suite u, que doit-on faire pour avoir le terme suivant.
  3. En partant de u0 combien de fois doit t-on faire l'opération précédente pour calculer u1, u4, un.
  4. Compléter l'algorithme :
  5. Faire une fonction u(n) en python qui va calculer un.
  6. Faire une fonction v(n) en python qui va calculer vn.
  7. Faire une fonction w(n) en python qui va calculer wn.
  8. Faire les fonctions de tests.
  9. (dur)Faire une fonction z(n) en python qui va calculer zn.
  10. Faire une fonction seuil(valeur) en python qui va retourner le premier indice n tel que un dépasse la valeur.
  11. La suite de Syracuse est une suite on le premier terme est un entier positif et où on passe d'un terme à l'autre en divisant par 2 si le premier terme est pair sinon on multiplie par 3 et on fait plus un. Programmer la suite Syracuse(n, u0).
  12. Pour une suite de Syracuse de premier terme u0 l'altitude d'une suite est la valeur maximale atteinte par la suite, programmer une fonction altitude( u0 ).
  13. Pour une suite de Syracuse de premier terme u0 la durée est le premier indice n pour lequel la suite vaut 1. Programmer une fonction duree( u0 ).
Exercice

En utilisant EZ (Il faut donc importer la bibliothéque).

  1. Faire une fonction efface_ecran(r,v,b) qui va mettre la couleur (r,v,b) sur tout l'écran. (Pensez à utiliser x,y=EZ.dimension() pour récupérer la dimension de l'écran.
  2. Faire une une fonction contour_triangle(xA,yA,xB,yB,xC,yC,r,v,b,o) qui va demander les coordonnées de trois points A,B,C et qui va dessiner le contour du triangle ABC.
  3. Faire une fonction trace_quadrilatere_convexe(xA,yA,xB,yB,xC,yC,x,D,yD,r,v,b,o) qui demande les coordonnées de quatre points et une couleur et qui va afficher le tour du quadrilatère ABCD correspondant. (on se limite aux quadrilatères convexes, c'est plus dur sinon).
  4. Faire une fonction trace_parallelogramme(xA, yA, xB, yB, xD, yD, r, v, b, o) qui va prendre les coordonnées des sommets A, B et D du parallélogramme ABCD et qui va dessiner le parallélogramme à l'écran. (Aide : pour les non-matheux les coordonnées de C sont (xB + xD - xA ; yB + yD - yA).
  5. (Dur et pour les matheux) Reproduire le graphique suivant :
Solutions
Q.C.M.

On définit la fonction QCM1 de la façon suivante :


			

Que vaut QCM1(2,5) ?





Q.C.M.

On définit la fonction QCM2 de la façon suivante :


			

Que vaut QCM2(8) ?





Q.C.M.

Dans la fonction QCM2 le mot def est :





Q.C.M.

On définit la fonction QCM3 de la façon suivante :


			

Que vaut QCM3(2,c=4) ?