👤

Bonjour je suis en seconde et je dois résoudre un problème avec un algorithme sur kwyk mais je n'y comprends rien. J'ai chercher partout mais je n'ai rien trouvé qui puisse m'orienter. Pouvez-vous m'aidez svp. Merci d'avance.

Bonjour Je Suis En Seconde Et Je Dois Résoudre Un Problème Avec Un Algorithme Sur Kwyk Mais Je Ny Comprends Rien Jai Chercher Partout Mais Je Nai Rien Trouvé Qu class=

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 !

VAISON

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

>>>

© 2024 IDNLearn. All rights reserved.