Python : Résolution d’une équation du second degré
On souhaite écrire un programme Python qui résout l'équation $ ax^2 + bx + c = 0 $ (avec $ a \neq 0 $).
On admet le résultat suivant, qui sera démontré en classe de première :
on pose $ \Delta = b^2 - 4ac $ (appelé discriminant).
- Si $ \Delta < 0 $, l'équation n'a pas de solution réelle.
- Si $ \Delta = 0 $, l'équation admet une unique solution $ x_0 = \dfrac{-b}{2a} $.
- Si $ \Delta > 0 $, l'équation admet deux solutions $ x_1 = \dfrac{-b - \sqrt{\Delta}}{2a} $ et $ x_2 = \dfrac{-b + \sqrt{\Delta}}{2a} $.
- Calculer « à la main » le discriminant puis les solutions de l'équation $ 2x^2 + x - 1 = 0 $.
- Écrire une fonction Python resolution(a, b, c) qui affiche les solutions de l'équation $ ax^2 + bx + c = 0 $. La fonction distinguera les trois cas selon le signe du discriminant.
Tester la fonction avec les trois équations suivantes :
- $ 2x^2 + x - 1 = 0 $ ;
- $ x^2 - 2x + 1 = 0 $ ;
- $ x^2 + x + 1 = 0 $.
Pour $ 2x^2 + x - 1 = 0 $, on a $ a = 2 $, $ b = 1 $, $ c = -1 $.
$ \Delta = b^2 - 4ac = 1^2 - 4 \times 2 \times (-1) = 1 + 8 = 9 $.
Comme $ \Delta > 0 $, l'équation admet deux solutions :
- $ x_1 = \dfrac{-1 - \sqrt{9}}{2 \times 2} = \dfrac{-1 - 3}{4} = \dfrac{-4}{4} = \mathbf{-1} $ ;
- $ x_2 = \dfrac{-1 + \sqrt{9}}{2 \times 2} = \dfrac{-1 + 3}{4} = \dfrac{2}{4} = \mathbf{0{,}5} $.
On importe sqrt puis on traduit les trois cas avec if, elif et else :
from math import sqrt
def resolution(a, b, c):
delta = b**2 - 4 * a * c
if delta < 0:
print("Pas de solution réelle.")
elif delta == 0:
x0 = -b / (2 * a)
print("Solution unique :", x0)
else:
x1 = (-b - sqrt(delta)) / (2 * a)
x2 = (-b + sqrt(delta)) / (2 * a)
print("Deux solutions :", x1, "et", x2)
Tests :
resolution(2, 1, -1) : $ \Delta = 9 > 0 $, l'équation a deux solutions.
Deux solutions : -1.0 et 0.5
Cela confirme le résultat de la question 1.
resolution(1, -2, 1) : $ \Delta = (-2)^2 - 4 \times 1 \times 1 = 4 - 4 = 0 $. L'équation a une solution unique :
$ x_0 = \dfrac{-(-2)}{2 \times 1} = \dfrac{2}{2} = 1 $.
Solution unique : 1.0
resolution(1, 1, 1) : $ \Delta = 1^2 - 4 \times 1 \times 1 = 1 - 4 = -3 < 0 $. L'équation n'a pas de solution réelle.
Pas de solution réelle.
Remarque
L'équation $ x^2 - 2x + 1 = 0 $ s'écrit aussi $ (x - 1)^2 = 0 $, ce qui confirme la solution unique $ x_0 = 1 $.
Python : Distance entre deux points du plan
Le plan est muni d'un repère orthonormé. Pour deux points $ A(x_A\,;\,y_A) $ et $ B(x_B\,;\,y_B) $, la distance $ AB $ est donnée par la formule :
$ AB = \sqrt{(x_B - x_A)^2 + (y_B - y_A)^2} $
- Calculer « à la main » la distance $ AB $ avec $ A(1\,;\,2) $ et $ B(4\,;\,6) $.
- Écrire une fonction Python distance(xA, yA, xB, yB) qui renvoie la distance entre les points $ A(x_A\,;\,y_A) $ et $ B(x_B\,;\,y_B) $.
- Utiliser la fonction pour vérifier le résultat de la question 1.
- Calculer la distance $ CD $ avec $ C(-2\,;\,3) $ et $ D(5\,;\,-1) $. On donnera une valeur arrondie à $ 0{,}01 $ près.
- On applique la formule avec $ A(1\,;\,2) $ et $ B(4\,;\,6) $ :
$ AB = \sqrt{(4-1)^2 + (6-2)^2} = \sqrt{3^2 + 4^2} = \sqrt{9 + 16} = \sqrt{25} = \mathbf{5} $.
On importe la fonction sqrt (racine carrée) du module math :
from math import sqrt
def distance(xA, yA, xB, yB):
return sqrt((xB - xA)**2 + (yB - yA)**2)
Test :
>>> distance(1, 2, 4, 6)
5.0
On retrouve bien $ AB = 5 $.
On applique la fonction aux points $ C(-2\,;\,3) $ et $ D(5\,;\,-1) $ :
$ CD = \sqrt{(5 - (-2))^2 + (-1 - 3)^2} = \sqrt{7^2 + (-4)^2} = \sqrt{49 + 16} = \sqrt{65} $.
Avec Python :
>>> distance(-2, 3, 5, -1)
8.06225774829855
On obtient donc $ CD \approx \mathbf{8{,}06} $.
Python : Calcul du montant TTC avec la TVA
En France, trois taux de TVA s'appliquent sur le prix hors taxes d'un produit ou d'un service :
- le taux normal : $ 20~\% $ ;
- le taux intermédiaire : $ 10~\% $ ;
- le taux réduit : $ 5{,}5~\% $.
On rappelle que le prix toutes taxes comprises s'obtient en ajoutant la TVA au prix hors taxes :
$ \text{TTC} = \text{HT} \times \left(1 + \dfrac{\text{taux}}{100}\right) $
- Calculer « à la main » le montant TTC d'un article à $ 2~500 $ € HT aux trois taux de TVA.
- Écrire une fonction Python ttc(ht, taux) qui prend en arguments le prix hors taxes et le taux de TVA (en pourcentage), et qui renvoie le prix toutes taxes comprises.
- Vérifier à l'aide de la fonction les trois résultats de la question 1.
- Écrire une seconde fonction montant_tva(ht, taux) qui renvoie uniquement le montant de la TVA (et non le prix TTC).
On applique la formule :
- Au taux normal ($ 20~\% $) : $ 2~500 \times 1{,}20 = \mathbf{3~000 \text{ €}} $.
- Au taux intermédiaire ($ 10~\% $) : $ 2~500 \times 1{,}10 = \mathbf{2~750 \text{ €}} $.
- Au taux réduit ($ 5{,}5~\% $) : $ 2~500 \times 1{,}055 = \mathbf{2~637{,}50 \text{ €}} $.
La fonction traduit directement la formule :
def ttc(ht, taux):
return ht * (1 + taux / 100)
Test :
>>> ttc(2500, 20)
3000.0
>>> ttc(2500, 10)
2750.0
>>> ttc(2500, 5.5)
2637.5
Les trois résultats correspondent à ceux de la question 1.
Le montant de la TVA est $ \text{HT} \times \dfrac{\text{taux}}{100} $ :
def montant_tva(ht, taux):
return ht * taux / 100
Par exemple, montant_tva(2500, 20) renvoie $ 500{,}0 $ € (la différence entre $ 3~000 $ € et $ 2~500 $ €).
Python : Calculer l’indice de masse corporelle
L'indice de masse corporelle (IMC) d'une personne est défini par la formule :
$ \text{IMC} = \dfrac{m}{t^2} $
où $ m $ désigne la masse en kilogrammes et $ t $ la taille en mètres.
- Calculer « à la main » l'IMC d'une personne mesurant $ 1{,}75 $ m et pesant $ 70 $ kg. On arrondira le résultat à $ 0{,}1 $ près.
Écrire une fonction Python imc qui prend en arguments la masse $ m $ et la taille $ t $, et qui renvoie l'IMC arrondi à $ 0{,}1 $ près.
- Indication : l'instruction round(x, 1) arrondit le nombre $ x $ à $ 0{,}1 $ près.
Utiliser la fonction pour calculer l'IMC des personnes suivantes :
- Alice : $ 60 $ kg pour $ 1{,}67 $ m ;
- Bastien : $ 85 $ kg pour $ 1{,}80 $ m.
- On calcule $ 1{,}75^2 = 3{,}0625 $, puis $ \dfrac{70}{3{,}0625} \approx 22{,}857 $. Arrondi à $ 0{,}1 $ près, on obtient un IMC de $\mathbf{22{,}9}$.
La fonction prend deux arguments :
def imc(m, t):
return round(m / t**2, 1)
- Pour Alice : $ \text{imc}(60, 1.67) = \text{round}(60 / 1{,}67^2 ; 1) $. On calcule $ 1{,}67^2 = 2{,}7889 $, puis $ 60 \div 2{,}7889 \approx 21{,}513 $, arrondi à $\mathbf{21{,}5}$.
- Pour Bastien : $ \text{imc}(85, 1.80) $. On calcule $ 1{,}80^2 = 3{,}24 $, puis $ 85 \div 3{,}24 \approx 26{,}234 $, arrondi à $\mathbf{26{,}2}$.
Remarque
En Python, on écrit la puissance avec l'opérateur **. L'instruction t**2 correspond donc à $ t^2 $.