Sagot :
Bonjour,
Commençons par étudier le programme :
Les deux lignes avec la fonction "float(input())" permet d'entrer les valeurs choisies (donc ici a = 2 et b = 3).
"while" signifie "tant que", donc tant que - a + b > 0, alors on exécute la boucle qui suit.
"x = ..." signifie qu'on donne une valeur à x, ici (a+b) / 2
"if" signifie "si", donc si f(a)*f(x) > 0, alors on exécute la ligne qui suit (a = x).
"else" signifie "sinon", donc si on n'exécute pas la boucle "si", car f(a)*f(x) n'est pas supérieur à 0, on exécute la boucle qui suit (donc b = x).
Enfin, "print" affiche une certaine valeur (ou un message), ici (a + b) / 2
Ensuite, tu n'as plus qu'à l'exécuter :
- a + b = -2 + 3 = 1. Or 1 supérieur à 0.3, donc on exécute la partie suivante du programme.
On donne une valeur à x : x = (a + b) / 2 = (2 + 3) / 2 = 5/2
Pour calculer f(a), on remplace x par a dans la fonction x :
f(a) = -17 + a² = -17 + 2*2² = -17 + 8 = -9
De même, pour f(x) :
f(x) = -17 + 2*(5/2)² = -17 + 25/2 = 12,5
f(a)*f(x) = -112,5
Si f(a)*f(x) > 0, alors a = x
-112,5 est inférieur à 0, donc on prend la boucle "sinon" : b = x.
Donc b = x = 5/2
On recommence jusqu'à ce que -a + b soit inférieur à 0,3 :
-a + b = 1/2 = 0,5 > 0,3
x = (2 + 5/2) / 2 = 9/4
f(a) = -9 (a n'a pas changé de valeur)
f(x) = -17 + 2*(9/4)² = -6,875
f(a)*f(x) = -6.875*(-9) = 61.875 > 0, donc a = x = 9/4
On recommence : -a + b = -9/4 + 5/2 = 1/4 = 0,25 < 0,3
-a + b est inférieur à 0.3, on peut donc bien arrêter d'exécuter le programme (je rappelle : while -a + b > 0.3 = tant que -a + b > 0.3, donc on fait la boucle tant que -a + b > 0.3, ensuite on s'arrête).
print((a+b)/2) : on affiche la valeur (a+b)/2 = (9/4 + 5/2) / 2 = 19 / 8 = 2,375
J'espère que tu as compris !
Réponse :
Salut,
Au départ, a = 2 et b = 3
Test :
-2+3 > 0.3
Test réussi, on entre dans la boucle while = tant que :
x = (2+3)/2 = 2.5
Test if = si :
(-17+2 (2)²)*(-17+2 (2.5)² > 0
Test réussi, on lit la ligne suivante :
a = 2.5
Nouveau test :
-2.5+3 > 0.3
Test réussi, on entre dans la boucle while = tant que :
x = (2.5+3)/2 = 2.75
Test if = si :
(-17+2 (2.5)²)*(-17+2 (2.75)² > 0
Test réussi, on lit la ligne suivante :
a = 2.75
Nouveau test :
-2.75+3 > 0.3
Echec au test ! On quitte la boucle while = tant que :
Lecture de la dernière ligne :
Affichage du résultat de l'opération (2.75+3)/2 :
2.875
J'ai écrit ce programme en Python :
def kwyk(a,b):
print("")
print("Valeurs de départ :")
print(" a =",a)
print(" b =",b)
print(" x = (a+b)/2 =",(a+b)/2)
print("")
compteur=0
while -a+b > 0.3:
compteur=compteur+1
x=(a+b)/2
if (-17+2*a**2)*(-17+2*x**2) > 0:
a=x
else:
b=x
print("Valeurs successives :")
print(" a =",a)
print(" b =",b)
print(" x =",(a+b)/2)
print("")
print("A ce stade, -a+b n'étant plus supérieur à 0.3, car -a+b vaut "+str(-a+b)+",")
print("on quitte la boucle while. Le programme se termine.")
print("Au total, on a effectué "+str(compteur)+" boucles while.")
print("")
print("On souhaite afficher la valeur de x : ",(a+b)/2)
Voici le résultat détaillé dans la console (et garanti sans ERREUR) :
>>> kwyk(2,3)
Valeurs de départ :
a = 2
b = 3
x = (a+b)/2 = 2.5
Valeurs successives :
a = 2.5
b = 3
x = 2.75
Valeurs successives :
a = 2.75
b = 3
x = 2.875
A ce stade, -a+b n'étant plus supérieur à 0.3, car -a+b vaut 0.25,
on quitte la boucle while. Le programme se termine.
Au total, on a effectué 2 boucles while.
On souhaite afficher la valeur de x : 2.875
>>>