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} $.
  1. Calculer « à la main » le discriminant puis les solutions de l'équation $ 2x^2 + x - 1 = 0 $.
  2. É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.
  3. Tester la fonction avec les trois équations suivantes :

    1. $ 2x^2 + x - 1 = 0 $ ;
    2. $ x^2 - 2x + 1 = 0 $ ;
    3. $ x^2 + x + 1 = 0 $.

Corrigé

  1. 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} $.
  2. 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)
  3. Tests :

    1. 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.

    2. 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
    3. 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} $
  1. Calculer « à la main » la distance $ AB $ avec $ A(1\,;\,2) $ et $ B(4\,;\,6) $.
  2. É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) $.
  3. Utiliser la fonction pour vérifier le résultat de la question 1.
  4. Calculer la distance $ CD $ avec $ C(-2\,;\,3) $ et $ D(5\,;\,-1) $. On donnera une valeur arrondie à $ 0{,}01 $ près.

Corrigé

  1. 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} $.
  2. 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)
  3. Test :

    >>> distance(1, 2, 4, 6)
    5.0

    On retrouve bien $ AB = 5 $.

  4. 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) $
  1. Calculer « à la main » le montant TTC d'un article à $ 2~500 $ € HT aux trois taux de TVA.
  2. É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.
  3. Vérifier à l'aide de la fonction les trois résultats de la question 1.
  4. Écrire une seconde fonction montant_tva(ht, taux) qui renvoie uniquement le montant de la TVA (et non le prix TTC).

Corrigé

  1. On applique la formule :

    1. Au taux normal ($ 20~\% $) : $ 2~500 \times 1{,}20 = \mathbf{3~000 \text{ €}} $.
    2. Au taux intermédiaire ($ 10~\% $) : $ 2~500 \times 1{,}10 = \mathbf{2~750 \text{ €}} $.
    3. Au taux réduit ($ 5{,}5~\% $) : $ 2~500 \times 1{,}055 = \mathbf{2~637{,}50 \text{ €}} $.
  2. La fonction traduit directement la formule :

    def ttc(ht, taux):
        return ht * (1 + taux / 100)
  3. 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.

  4. 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.

  1. 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.
  2. É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.

    1. Indication : l'instruction round(x, 1) arrondit le nombre $ x $ à $ 0{,}1 $ près.
  3. Utiliser la fonction pour calculer l'IMC des personnes suivantes :

    1. Alice : $ 60 $ kg pour $ 1{,}67 $ m ;
    2. Bastien : $ 85 $ kg pour $ 1{,}80 $ m.

Corrigé

  1. 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}$.
  2. La fonction prend deux arguments :

    def imc(m, t):
        return round(m / t**2, 1)
    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}$.
    2. 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 $.