Lyc´ee Benjamin Franklin PTSI−2013-2014
L. Grillet, D. Blotti`ere Informatique
TP n˚4 Fonctions
1 Pr´ esentation de la notion de fonction en Python
La notion de fonction permet d’isoler une instruction qui revient plusieurs fois dans un programme. Une fonction est d´efinie par :
• son nom ;
• ses arguments qui porteront les valeurs communiqu´ees par le programme lors de l’appel de la fonction ;
• ´eventuellement une valeur de retour communiqu´ee au programme par la fonction `a la fin de son ex´ecution.
Ci-dessous, on donne un exemple de programme dans lequel figure une fonction.
• Son nom estdistance.
• Ses arguments sont deux uplets de r´eels Pet Q`a deux composantes, qui repr´esentent les coordonn´ees de deux points du plan (un rep`ere orthonorm´e du plan ´etant fix´e).
• Elle retourne la distance entre les points de coordonn´eesPetQ(l’unit´e ´etant la longueur d’un des vecteurs de la base du rep`ere orthonorm´e).
Ce programme affiche les longueurs des cˆot´es du triangle dont les sommets ont pour coordonn´ees (−12,0), (12,0) et (0,√23). Comme on a trois longueurs `a calculer, l’introduction d’une fonction est pertinente ; cela ´evite de r´ep´eter les mˆemes instructions plusieurs fois.
Programme 1 1. import math
2.
3. def distance(P,Q):
4. l=math.sqrt((P[0]-Q[0])**2+(P[1]-Q[1])**2) 5. return(l)
6.
7. A=(0.5,0) 8. B=(-0.5,0)
9. C=(0,math.sqrt(3)/2) 10.
11. l1=distance(A,B) 12. l2=distance(B,C) 13. l3=distance(A,C) 14.
15. print("Les longueurs des c^ot´es de ABC sont:%s, %s et %s.")%(l1,l2,l3)
Exercice 1
1. Saisir le programme 1, l’ex´ecuter et le commenter ligne `a ligne.
2. Remplacer la ligne 7. par la ligne suivante.
7. A=(1/2,0)
Ex´ecuter et commenter le r´esultat.
1
2 Probl` emes d’arrondis
Exercice 2 :On souhaite modifier le programme 1 de fa¸con `a ce que soit affich´e un message `a l’´ecran indiquant si le triangle ayant pour sommets les points de coordonn´ees (−12,0), (12,0) et (0,√23) est ´equilat´eral.
1. Avant de modifier le programme 1, d´eterminerde mani`ere th´eorique(sans Python donc) si le triangle en question est ´equilat´eral ou non.
2. Essayer `a pr´esent de modifier le programme 1≪de fa¸con na¨ıve≫ pour r´esoudre le probl`eme pos´e. Cette approche fonctionne-t-elle ?
3. Ajouter au programme 1 les lignes de commande ci-dessous pour comprendre quel probl`eme se pose.
16.
17. print abs(l1-l2) 18. print abs(l2-l3) 19. print abs(l1-l3)
Attention :Il n’est pas possible de savoir de fa¸con certaine si le r´esultat d’un calcul effectu´e avec Python est
´egal `a sa valeur th´eorique. Un test du type
a==b
avec des nombres `a virgule flottanteaet bn’a pas de sens ! On le remplacera par : abs(a-b)<epsilon
o`uepsilonsera une valeur≪proche de z´ero≫ `a choisir en fonction du contexte.
3 Multiplication de deux nombres complexes
Exercice 3 :Ecrire une fonction v´erifiant les propri´et´es suivantes.´
• Son nom estmultcomplexe.
• Ses arguments sont deux uplets de r´eelsz1etz2`a deux composantes.
• Elle retourne un uplet `a deux composantes dont la premi`ere (resp. la deuxi`eme) est la partie r´eelle (resp.
la partie imaginaire) du nombre complexe
(z1[0]+iz1[1])(z2[0]+iz2[1]).
N.B. : Le nombre complexei n’existe pas a priori en Python. On utilisera la d´efinition de la multiplication dansCdonn´ee dans le cours de math´ematiques pour construire la fonction demand´ee.
4 Produit vectoriel
Le d´eterminant d’une matrice
a b
c d
r´eelle 2×2 (i.e. d’un tableau `a 2 lignes et 2 colonnes de nombres r´eels) est le r´eel not´e
a b
c d
et d´efini par :
a b
c d
=ad−bc.
Le produit vectoriel de (x1, y1, z1)∈R3 par (x2, y2, z2)∈R3est le triplet de r´eels not´e (x1, y1, z1)∧(x2, y2, z2) d´efini par :
(x1, y1, z1)∧(x2, y2, z2) =
y1 y2 z1 z2
,
z1 z2 x1 x2
,
x1 x2 y1 y2
.
Le produit vectoriel poss`ede de nombreuses propri´et´es/applications, e.g. le produit vectoriel de deux vecteurs deR3est le vecteur nul (0,0,0) si et seulement si les deux vecteurs sont colin´eaires.
Exercice 4
1. ´Ecrire une fonction Python nomm´ee determinantqui a comme argument un uplet de 4 nombres r´eels (a, b, c, d) et qui retourne le d´eterminant de la matrice
a b
c d
.
2. En utilisant la fonctiondeterminantconstruite en 1., ´ecrire une fonction nomm´eeprodvectqui a comme argument deux upletsu1et u2de trois nombres r´eels et qui retourne l’uplet de trois nombres r´eels donn´e paru1∧u2.
3. ´Ecrire une fonction utilisant la fonction construite en 2., nomm´ee iscollinear, qui a comme argument deux uplets u1et u2de trois nombres r´eels et qui retourne Truesiu1//u2etFalsesinon.
2