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.


Sagot :

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

[ ]

>>>