π
<-

Division euclidienne

Pour le TI-Basic sur Nspire

Division euclidienne

Unread postby Lu_Lu54 » 15 Apr 2015, 07:33

salut à tous !

Je suis en train de faire un programme en nspire basic qui réalise la division euclidienne step by step.
C'est plus compliqué que ce que je ne pensais, alors j'ai besoin de petits conseils...

voilà ce que j'ai fait pour l'instant :
Code: Select all
Define LibPub div_euclid(av,b)=
Prgm
:Local az,dimap,av,a,ap,b,result,ach,dimach
:
:
:Disp av,"     ∣     ",b
:Disp "           ∣————"
:
:
:result:=int(((av)/(b)))
:a:=av
:ap:=string(a)
:dimap:=dim(ap)
:dimap:=dimap-2
:dimap:=dim(ap)-dimap
:
:Loop
:If a<b Then
:  Exit
:EndIf
:a:=approx(a)
:ach:=string(a)
:dimach:=dim(ach)
:a:=int(av*10^(−dimach+3))
:Disp a
:Disp "-    ",b*int(((a)/(b)))
:Disp "——————"
:Disp a-b*int(((a)/(b)))
:If a-b*int(((a)/(b)))<b Then
:  Exit
:EndIf
:Disp dimap,"ok"
:az:=mid(ach,dimap,1)
:Disp az,"ok"
:az:=expr(az)
:Disp az,"ok"
:a:=10*(a-b*int(((a)/(b))))+az
:Disp a
:dimap:=dimap+1
:EndLoop
:EndPrgm


Si vous arrivez à le déchiffrer (je ne respecte selon moi aucune syntaxe lisible :D), vous pouvez voir que j'ai un petit problème concernant "l'abaissement" du chiffre suivant dans le nombre...
En fait, je veux utiliser mon reste pour ce faire, et faire ici 10*reste+az, az étant une variable qui contiendrait séparément du reste le chiffre "suivant".
cette variable doit bien sûr pouvoir évoluer, puisque le programme doit pouvoir marcher sur plusieurs étapes.

P.S.
J'imagine que tout n'est pas clair dans ma source :#roll#: , mais je règlerai les autres problèmes par moi même, et je propose de rester concentré sur ce problème précis pour ne pas allonger le topic >:]

Merci !
Image

Tu as une TI-nspire cx cas ?
Mes programmes :
certains utiles : CalcTriangles, HowManyDiv, DivEuclid step by step, factorisation de polynômes par la division euclidienne, Dénombrement, TransDioptres step by step
d'autres plus expérimentaux ;) : sommes2dés, DecPi
et encore plus à venir !
User avatar
Lu_Lu54Premium
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 3.4%
 
Posts: 449
Images: 8
Joined: 06 Sep 2014, 14:30
Location: Près de Nancy
Gender: Male
Calculator(s):
MyCalcs profile
Class: 1ère S

Re: Division euclidienne

Unread postby Bisam » 15 Apr 2015, 08:15

Tout d'abord, pour ta division euclidienne, je te suggère vivement d'utiliser les fonctions intdiv(a,b) et remain(a,b) qui renvoient respectivement le quotient et le reste dans la division euclidienne de a par b.

L'intérêt est d'éviter de passer par des nombres réels et de rester dans les entiers... il pourrait y avoir de grosses erreurs d'approximations si tes entiers sont très gros.

Ensuite, pour couper en tranches de 3, tu peux aussi utiliser le logarithme décimal : floor(log(a))+1 renvoie le nombre de chiffres dans ton nombre.

Après ces modifications, je veux bien que tu réexpliques ce qui te pose problème un peu plus en détail, car j'avoue que je n'ai pas bien compris.
Last edited by Bisam on 15 Apr 2015, 08:38, edited 1 time in total.
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

Re: Division euclidienne

Unread postby Lu_Lu54 » 15 Apr 2015, 09:59

Super, ça va déjà bien m'avancer !
je change ça et je re-post...

Merci !
Image

Tu as une TI-nspire cx cas ?
Mes programmes :
certains utiles : CalcTriangles, HowManyDiv, DivEuclid step by step, factorisation de polynômes par la division euclidienne, Dénombrement, TransDioptres step by step
d'autres plus expérimentaux ;) : sommes2dés, DecPi
et encore plus à venir !
User avatar
Lu_Lu54Premium
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 3.4%
 
Posts: 449
Images: 8
Joined: 06 Sep 2014, 14:30
Location: Près de Nancy
Gender: Male
Calculator(s):
MyCalcs profile
Class: 1ère S

Re: Division euclidienne

Unread postby Lu_Lu54 » 16 Apr 2015, 11:34

Bon, j'ai un peu travaillé, et ça donne ça :
Code: Select all
Define LibPub div_euclid(av,b)=
Prgm
:Local az,ind,av,a,ap,b,result,ach,dimach
:
:
:Disp av,"     ∣     ",b
:Disp "           ∣————"
:
:
:result:=intDiv(av,b)
:a:=av
:ap:=string(a)
:ind:=0
:
:
:Loop
:If a<b Then
:  Exit
:EndIf
:ach:=string(a)
:dimach:=dim(ach)
:a:=int(av*10^(−(floor(log(a,10))+ind)))
:ind:=ind+1
:Disp a
:Disp "-    ",b*intDiv(a,b)
:Disp "——————"
:Disp remain(a,b)
:a:=int(av*10^(−(floor(log(av,10))+ind)))
:Disp a
:If a<b Then
:  Exit
:EndIf
:EndLoop
:EndPrgm

mais, ce que je veux faire ne marche toujours pas...

Je ré-explique :
une division euclidienne se fait en 3 étapes répétées successivement :
- on écrit le début du nombre à diviser
- on regarde cmb de fois le diviseur passe dans ce début (notons ce nombre a), et on soustrait au nombre de la première étape le produit du diviseur par a.
- on abaisse un chiffre de plus du dividende à coté du reste de cette première mini division, et on répète les étapes jusqu'à ce que tous les chiffres soient abaissés.

Le quotient est la suite des nombres a retrouvés à chaque étape.

La 3ème étape pose problème dans mon programme.


Edit :
je pense avoir trouvé une solution, en travaillant sur une liste plutôt que sur un nombre normal.
genre je crée ma liste comme ça :
Code: Select all
L:={}
Loop
  c:=remain(a,10)
  L:=augment(L,{c})
  a:=intDiv(a,10)
  If a=0 Then
    Exit
  EndIf
EndLoop

ce qui me permettra d'isoler facilement un des chiffres de a avec
Code: Select all
L[x]
x étant un indice qui augmente à chaque étape.
je fais ça et je reviens si ça marche pas.
Last edited by Lu_Lu54 on 16 Apr 2015, 12:14, edited 1 time in total.
Image

Tu as une TI-nspire cx cas ?
Mes programmes :
certains utiles : CalcTriangles, HowManyDiv, DivEuclid step by step, factorisation de polynômes par la division euclidienne, Dénombrement, TransDioptres step by step
d'autres plus expérimentaux ;) : sommes2dés, DecPi
et encore plus à venir !
User avatar
Lu_Lu54Premium
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 3.4%
 
Posts: 449
Images: 8
Joined: 06 Sep 2014, 14:30
Location: Près de Nancy
Gender: Male
Calculator(s):
MyCalcs profile
Class: 1ère S

Re: Division euclidienne

Unread postby Bisam » 16 Apr 2015, 13:31

Pour remédier à ton problème, tu peux abaisser tous les chiffres à chaque fois... ce n'est pas plus compliqué pour la division et c'est plus simple pour l'affichage.
Ensuite, tu oublies de prendre en compte la taille des nombres pour obtenir un affichage qui soit correct.
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

Re: Division euclidienne

Unread postby Lu_Lu54 » 16 Apr 2015, 16:20

mais si on abaisse tout en même temps, ce n'est plus une division euclidienne dans les règles de l'art...
et le problème de la taille des nombres est un problème secondaire de mise en forme...
Last edited by Lu_Lu54 on 16 Apr 2015, 17:04, edited 2 times in total.
Image

Tu as une TI-nspire cx cas ?
Mes programmes :
certains utiles : CalcTriangles, HowManyDiv, DivEuclid step by step, factorisation de polynômes par la division euclidienne, Dénombrement, TransDioptres step by step
d'autres plus expérimentaux ;) : sommes2dés, DecPi
et encore plus à venir !
User avatar
Lu_Lu54Premium
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 3.4%
 
Posts: 449
Images: 8
Joined: 06 Sep 2014, 14:30
Location: Près de Nancy
Gender: Male
Calculator(s):
MyCalcs profile
Class: 1ère S

Re: Division euclidienne

Unread postby Bisam » 16 Apr 2015, 17:02

Mais le fait d'abaisser une partie ou bien tout.... c'est AUSSI de la mise en forme. Cela ne change rien aux calculs effectués.
Ou alors je n'ai pas compris ce que tu veux faire.

Tu peux faire un exemple sur papier ou en pdf ?
Last edited by Bisam on 16 Apr 2015, 17:38, edited 1 time in total.
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

Re: Division euclidienne

Unread postby Lu_Lu54 » 16 Apr 2015, 17:04

Je termine ce topic en vous donnant le lien de téléchargement :D

Merci à tous pour votre aide

Show/Hide spoilerAfficher/Masquer le spoiler
Bisam : c'est ça que je voulais :D
Last edited by Lu_Lu54 on 16 Apr 2015, 17:13, edited 2 times in total.
Image

Tu as une TI-nspire cx cas ?
Mes programmes :
certains utiles : CalcTriangles, HowManyDiv, DivEuclid step by step, factorisation de polynômes par la division euclidienne, Dénombrement, TransDioptres step by step
d'autres plus expérimentaux ;) : sommes2dés, DecPi
et encore plus à venir !
User avatar
Lu_Lu54Premium
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 3.4%
 
Posts: 449
Images: 8
Joined: 06 Sep 2014, 14:30
Location: Près de Nancy
Gender: Male
Calculator(s):
MyCalcs profile
Class: 1ère S


Return to Nspire-Basic

Who is online

Users browsing this forum: ClaudeBot [spider] and 5 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
934 utilisateurs:
>891 invités
>34 membres
>9 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)