Mathématiques

Question

Bonjour, voici un exercice d’un DM de première. Je n’arrive pas à le faire. Pourriez vous m’aider s’il vous plaît car je dois l’avoir fini dans moins d’une semaine. Merci d’avance.

Comprendre un algorithme
On considère l'algorithme Langage naturel
ci-contre qui définit
la fonction racine 1,
dans lequel L est une
liste de nombres et
les variables k et n des
entiers naturels.

Ci-dessous sa traduction en langage naturel :
Fonction racine1
L <= liste vide
Pour k allant de -n à n Faire
Si ak au carré + bk + c = 0 Alors
Ajouter k à L
Fin Si
Fin pour
Retourner L
Fin fonction

Ci-dessous
sa traduction
en langage Python:
def racine1 (n, a, b, c) :
L = [ ]
for k in range (-n, n + 1) :
if a*k**2+b*k+c==0 :
L.append (k)
return L

1. À quoi correspondent les éventuelles valeurs stoc-
kées dans la liste L? Quelles sont les longueurs pos-
sibles de la liste L?
2. Exécuter à la main la fonction racine 1 dans chacun
des cas suivants.
a. n=2; a=2; b=-3 et c=1
b. n=2; a=2; b=7 et c=-15
3. Programmer et exécuter cet algorithme en
Python et vérifier les résultats obtenus à la question 2.
Qu'obtient-on en modifiant la valeur de n ?
4. Quel est le rôle de cet algorithme ? Quelles en sont
les limites?

Info :

• L'instruction python L.append(k) ajoute k à la fin de
la liste L.
• L'Instruction python len(L) renvoie la longueur de la
liste L.

1 Réponse

  • Réponse :

    Bjr,

    Erreur dans l'énoncé à propos de k :

    - les variables k et n des

    entiers naturels

    - k allant de -n à n

    1. Les éventuelles valeurs de L sont solution de l'équation :

    a x² + b x + c = 0

    Et une solution de l'équation a x² + b x + c = 0 est une racine du polynôme a x² + b x + c.

    Un polynôme de degré 2 possède 0, 1 ou 2 racines réelles.

    La liste L peut rester vide ou avoir un ou deux éléments.

    2.a. 2 (-2)² - 3(-2) + 1 = 8 + 6 + 1 = 15

    2 (-1)² - 3(-1) + 1 = 2 + 3 + 1 = 6

    2 (0)² - 3(0) + 1 = 1

    2 (1)² - 3(1) + 1 = 2 - 3 + 1 = 0

    2 (2)² - 3(2) + 1 = 8 - 6 + 1 = 3

    Dans la liste L, on a un seul élément, le nombre 1.

    b. 2 (-2)² + 7(-2) - 15 = 8 - 14 - 15 = -21

    2 (-1)² + 7(-1) - 15 = 2 - 7 - 15 = -20

    2 (0)² + 7(0) - 15 = -15

    2 (1)² + 7(1) - 15 = 2 + 7 - 15 = -6

    2 (2)² + 7(2) - 15 = 8 + 14 - 15 = 7

    La liste L reste vide dans cet exemple.

    3. >>> racine1(2,2,-3,1)

    [1]

    >>> racine1(2,2,7,-15)

    [ ]

    Modification de n :

    >>> racine1(100,2,-3,1)

    [1]

    >>> racine1(100,2,7,-15)

    [-5]

    En changeant la valeur de n, une racine a été trouvée pour le polynôme 2 x² + 7 x - 15.

    4. Cet algorithme a pour rôle d'afficher d'éventuelles racines réelles d'un polynôme de degré deux.

    Limites :

    - le programme teste des valeurs dans un intervalle lié à n. Les racines peuvent se situer hors intervalle.

    - dans l'intervalle, le programme utilise seulement des nombres entiers. Les racines sont souvent des nombres non entiers.

    - les capacités de calcul de Python dans certains cas :

    On a déterminé que -5 est racine du polynôme 2 x² + 7 x - 15 et donc que -5 est solution de l'équation :

    2 x² + 7 x - 15 = 0

    2 x² + 7 x - 15 = 0 est équivalent à (2 x² + 7 x - 15)/3 = 0/3

    On obtient le polynôme a x² + b x + c avec :

    a = 2/3

    b = 7/3

    c = -5

    -5 est aussi racine de ce polynôme.

    >>> racine1(100,2/3,7/3,-5)

    [ ]

    Pourtant la liste L reste vide !

    >>> 2/3*(-5)**2+7/3*(-5)

    4.9999999999999964

    Calcul qui est égal à 5 au lieu de 4,9999999999999964.

    Exemple de programme Python corrigé :

    def racine1 (n, a, b, c) :

       L = [ ]

       for k in range (-n, n + 1) :

           if a*k**2+b*k+c==0 :

               L.append (k)

           else:

               if abs(a*k**2+b*k+c)<10**-6 :

                   print("Attention, valeur à vérifier :",k)

       return L

    Et exécuté :

    >>> racine1(100,2/3,7/3,-5)

    Attention, valeur à vérifier : -5

    [ ]

    >>>

Autres questions