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 sema
Question
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
-
1. Réponse emma6974
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
[ ]
>>>