Fonction div_euclid/ méthode des différences successives HELP
Résoluro292 Messages postés 25 Statut Membre -
Je suis étudiant en TS spécialité ISN et j'ai un travail à faire pendant les vacances.
Il s'agit de la partie 1 de ce sujet ("http://chatel.maths.free.fr/IMG/pdf/tparithmetique-2.pdf").
A ce que j'ai compris, il faut faire une bête division mais je ne comprend pas comment mettre en place la méthode des différences successives.
Je connais le principe (enfin je crois) , on a "a" et "b" deux entiers.
Si a>b alors a=a-b et
Si b>a alors b=b-a
Mais je ne vois pas quoi faire dans le programme...
Si quelqu'un pouvait m'éclaircir le sujet afin que je comprenne vraiment ce qu'il faut faire "concrètement" m'arrangerai beaucoup :)
Merci d'avance.
Ps: je suis sur Spyder 3.3
1 réponse
La question centrale porte sur l'implémentation en Python de la division par soustractions successives (différences successives) et sur la façon d'obtenir le quotient et le reste à partir d'une boucle. Plusieurs réponses recommandent d'utiliser une boucle while avec n >= p, d'incrémenter un compteur pour le quotient et de calculer le reste par n - quotient*p ou directement via l'opérateur %. D'autres précisent qu'on peut renvoyer deux valeurs et que le reste peut être obtenu en soustrayant quotient multiplié par le diviseur du dividende. En cas de questions suivantes, l’utilisation des opérateurs // et % permet de calculer rapidement quotient et reste sans boucle, et les consignes nb_div et sum_div imposent de décrire clairement les retours.
-
Salut,
"Si a>b alors a=a-b "
c'est un bon début mais il faut le mettre dans un algorithme et compter le nombre de fois où c'est effectué.
Si tu as 10 billes et que tu veux diviser par 2, il suffit de compter le nombre de groupe de 2 que l'on peut enlever des 10 billes, le reste si il y en a un sera lorsque il restera moin de 2 billes a retirer...-
Merci Jwtdd,
Mais comment ça compter le nombre de fois? Je pensais faire une boucle, dès que a=b on aura la valeur mais je ne vois pas comment dire au programme de me donner le reste de la différence...
Par exemple je pense faire une boucle "tant que" a>b mais du coup dans le programme le "b>a" n'apparaitra pas. En soi faire la boucle "tant que" est relativement facile c'est quand il faut faire le reste que je ne vois pas trop comment l'écrire.
Merci d'avance -
oubli le début d'algo que tu as écrit et refait avec l'exemple que j'ais donné
nomme tes variables(dividende,diviseur,quotient, reste) et tu y verras plus clair
utilises "quotient" comme un compteur(égal à 0 au début), et "reste" (égal à la dividende au début) le résultat de chaque itération de reste=reste-diviseur
il n'y a qu'une comparaison nécessaire dans l'algorithme:
tant que (reste>=diviseur) -
Pour l'exemple, je pense que
dividende=10
diviseur=2
quotient=5
Mais a ce que j'ai compris il faut faire en étape donc
dividende=10
diviseur=0
quotient= reste=0
dividende=10
diviseur=1
quotient=10
dividende=10
diviseur=2
quotient=5 on a donc 5 groupe de 2 billes
Franchement là je suis un peu perdu.
Merci de votre réponse -
Non le diviseur et la dividende sont fixe(entré en argument de la fonction) , y a que quotient et reste que tu peux changer car tu les renvoi à la fin...
La "méthode des différences successives" c'est déjà assez explicite...
avec dividende=10 et diviseur=2 a chaque itération les variable (quotient et reste) doivent prendre les valeurs suivante:
compteur=0
10 - 2 = 8 compteur=1
8 - 2 = 6 compteur=2
6 - 2 = 4 compteur=3
4 - 2 = 2 compteur=4
2 - 2 = 0 compteur=5
reste=0 quotient=5 -
D'accord! Je ne pensais qu'en division c'est pour ça. Mais pour l'exercice, comment demander à avoir le reste?
En fait, si a>b alors a-b=a mais je ne comprends toujours pas pourquoi il faudrait "un reste"
Je veux dire si on a
a=10 et b=4
on fait 10-4=6
d'où 6-4=2
et 2<4 donc le reste = 2?
Sinon le reste ça serai quoi ?.
Pour récapituler, je fais une boucle "tant que" a>b alors a prend la valeur a-b et dès que a=b, le nombre de boucles est le quotient.
Enfin si j'ai compris.
-