# Mathématiques avec Python et Ruby/Fonctions en Python
## Ruby

[ Modifier le sommaire ]
On va traiter un exemple de fonction, issu du Bac STG CGRH Métropole-Réunion de Septembre 2007:

# Définition des fonctions
## Énoncé

$C(x)=x^{2}+50x+100$ pour $5\leqslant x\leqslant 40$
Et plus bas, dans le même exercice,
$f(x)={\frac {C(x)}{x}}$ pour x appartenant à [5 ; 40].

## Fonctions et procédures sous Python

Une fonction est un petit bout de programme Python qui possède un nom (typiquement f), et qui renvoie une valeur (l'image de x, son unique antécédent, par f). Une procédure est une fonction qui ne renvoie rien.
Les fonctions du sujet de Bac ci-dessus peuvent être définies par def en Python:
Si on essaye de calculer l'image de 0 par f, on remarque qu'en lieu et place du calcul, Python affiche un message d'erreur: La fonction f n'est pas definie en 0. On peut aussi la définir directement par
On peut aussi définir des fonctions de plusieurs variables (comme le pgcd) ou des fonctions définies par des boucles ou des tests, comme la valeur absolue:

# Tableau de valeurs
## Suite de l'énoncé du Bac 2007

Par la suite, on demande de reproduire et compléter le tableau suivant, arrondi au centième d'euro:
| x | 5 | 10 | 20 | 30 | 40 |
| f(x) | | | | | |

## Solution en Python

Pour remplir le tableau, on peut
* Faire 5 fois un print(f(x)) pour les 5 valeurs de x de l'énoncé;
* Faire une boucle avec les 5 valeurs de x de l'énoncé;
* Faire une boucle avec suffisamment de valeurs de x pour couvrir les 5 valeurs de l'énoncé;
* Transformer f en une fonction qui peut s'appliquer à une liste de valeurs et non à une valeur unique.
La méthode 3 peut se faire avec un itérateur de Python:
Trop de calculs tuent le calcul! Les images de 25 et 35 par exemple encombrent le tableau. Mais Python permet d'utiliser des itérateurs beaucoup plus souples, et adaptés au problème présent:
La méthode 4 peut s'implémenter en Python avec:
C'est aussi simple que ça!

## Arrondis

L'énoncé demandait d'arrondir au centième d'euro près

# Représentation graphique

Pour représenter graphiquement une fonction comme f ci-dessus, on trace un polygone ayant suffisamment de sommets, et ceux-ci suffisamment proches les uns des autres, pour que la courbe ait l'air courbe. Plusieurs outils permettent de faire du graphisme avec Python mais le plus simple semble être le module tortue.

## Avec Turtle
### Courbe

Le plus simple est de faire
Difficile de rêver plus simple mais on peut voir trois problèmes:
* Il manque les axes
* Le trait qui relie l'origine au point de coordonnées (5;f(5)) est en trop
* La tortue gêne la visibilité de la figure

### Courbe améliorée

Pour résoudre le deuxième problème, il suffit de lever le crayon avec penup avant de commencer le tracé (et de le redescendre pour le tracé lui-même). Pour résoudre le troisième problème, il suffit de rendre la tortue invisible avec hideturtle. Pour les axes, on peut les tracer avec la tortue:
Le graphique est correct mais un peu petit et mal cadré.

## Avec TkInter

TkInter permet de créer un affichage dans un canevas, lui-même membre d'une fenêtre. Il y a donc plusieurs lignes de Python à écrire avant même de commencer à dessiner. Et l'axe des ordonnées est dirigé vers le bas, ce qui oblige à une transformation des ordonnées. En contrepartie, on a un outil de dessin tout-à-fait correct, et même relativement classique. Et, bien que ce ne soit pas utile dans le cas présent, on peut avoir des boutons, curseurs etc.
On doit donc commencer par
* importer tkInter (s'installer dans l'atelier du peintre)
* créer une fenêtre (monter le chevalet, un cadre...)
* y placer un canevas (tendre la toile sur le chevalet)
* afficher le canevas avec pack (enlever la couverture qui cache le chef-d'œuvre)
* Enfin, dessiner (axes et fonction)
Ce qui peut donner ceci: