π
<-

DivEuclidSS - Ben ça alors o_O

Pour le TI-Basic sur Nspire

DivEuclidSS - Ben ça alors o_O

Unread postby Lu_Lu54 » 08 May 2015, 19:24

Bonjour, je poste ce topic parce que j'ai récemment fait une update de mon programme DivEuclidSS, et qu'un bug persiste... Et je n'y comprends rien.

Vous avez une petite description du programme sur la page de téléchargement :
Myself wrote:Ce programme réalise une division euclidienne en affichant toutes les étapes de calcul.

V 2.0 :
Gère à présent rapidement les dividendes supérieurs aux diviseurs,
et adapte les premières soustractions à la taille du diviseur.

V 3.0 :
Gère les nombres relatifs et décimaux (précision de 10E-5) en donnant une explication claire et simple.

Et voici un gif de présentation :
Image

Je vais vous remettre la source (dsl pour ceux qui aiment les belles présentations, j'essaye de faire de mon mieux) :
Code: Select all
Define LibPub div_euclid(av,b)=
Prgm
:Local ind,n,i,av,a,b,result,l,c
:result:=intDiv(av,b)
:©suivent les manières de gérer relatifs/décimaux
:If b=0 Then
:  Text "Erreur"
:  Stop
:ElseIf b<0 and av≥0 Then
:  Disp "Comme le diviseur est négatif, on travaille avec sa valeur absolue, et on rajoutera le signe moins à la fin du raisonnement."
:  b:=abs(b)
:ElseIf av<0 and b>0 Then
:  Disp "Comme le dividende est négatif, on travaille avec sa valeur absolue, et on rajoutera le signe moins à la fin du raisonnement."
:  av:=abs(av)
:ElseIf b<0 and av<0 Then
:  Disp "Le diviseur et le dividende sont négatifs, donc cela revient a dire que les deux sont positifs."
:  b:=abs(b)
:  av:=abs(av)
:EndIf
:
:
:
:If int(av)≠av or int(b)≠b Then
:  n:=1
:  i:=0
:  While int(av)≠av or int(b)≠b
:    n:=n*10
:    av:=av*10
:    b:=b*10
:    i:=i+1
:    If i=6 Then
:      b:=((b)/(n))
:      av:=((av)/(n))
:      Text "Erreur, partie décimale trop grande"
:      Stop
:    EndIf
:  EndWhile
:Disp "Ce quotient comprend des nombres décimaux."
:Disp "Multiplier le diviseur et le dividende d'un rapport ne change rien à sa valeur, on peut donc se servir de cette règle pour travailler avec des nombres entiers :"
:Disp "on multiplie le numérateur et le dénominateur par 10",i,", dans le but d'obtenir deux nombres entiers : le diviseur ",b," et le dividende ",av,"."
:Disp ""
:EndIf
:
:
:©présentation du début de division
:Disp av,"     ∣     ",b
:Disp "              ————"
:
:
:a:=av
:
:If b>a Then
:  Disp "le dividende est plus grand que le diviseur, donc le résultat est ",result," et le reste est ",av
:  stop
:EndIf
:
:
:©première boucle qui met en liste le dividende
:l:={}
:Loop
:  c:=remain(a,10)
:  l:=augment(l,{c})
:  a:=intDiv(a,10)
:  If a=0 Then
:    Exit
:  EndIf
:EndLoop
:
:ind:=dim(l)
:a:=l[ind]
:
:©boucle qui effectue les soustractions successives
:Loop
:ind:=ind-1
:If a<b Then
:  a:=remain(a,b)
:  a:=a*10+l[ind]
:  If ind<1 Then
:    Exit
:  EndIf
:Else
:  Disp a
:  Disp "-    ",b*intDiv(a,b)
:  Disp "——————"
:  a:=remain(a,b)
:  Disp a
:  If ind<1 Then
:    Exit
:  EndIf
:  Disp "On abaisse le ",l[ind]
:©la ligne qui suit sert à abaisser un chiffre de plus, c'est dans cette ligne que le bug est indiqué, au moment d'abaisser le dernier chiffre des dividendes que je donne en exemple en dessous
:  a:=a*10+l[ind]
:EndIf
:EndLoop
:Disp "Résultat = ",result
:EndPrgm


Donc on en vient au bug :
Pour certaines opérations, dont la liste suit, j'obtient une erreur de dimension dans un message me rappelant que je ne peux pas appeler le 5ème élément d'une liste composée de 4 nombres.
voici la liste de ceux que j'ai repéré (il y en a sûrement d'autres) :
* 54854/1.62
* -451/3
* 254/-5
La liste comprend aussi les multiples des fractions (du genre (254*3)/(-5*3))

Ce qui est frustrant, c'est que je ne trouve aucun rapport entre eux, et malgré avoir relu le programme 7/8 fois, je trouve rien qui serait responsable de ce truc...
Le bug lui même se situe sûrement dans la 1ère boucle Loop qui permet de transformer mon nombre en liste, puisque à cet endroit le nombre d'éléments dans la liste est visiblement supérieur au nombre d'éléments à la fin de la dernière boucle Loop qui termine le programme.

Donc si vous apercevez quelque chose d'évident que j'aurais raté, faites le moi savoir ;)
Merci

Lien de téléchargement
Last edited by Lu_Lu54 on 09 May 2015, 11:47, edited 3 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: DivEuclidSS - Ben ça alors o_O

Unread postby Bisam » 09 May 2015, 10:13

Tu as modifié l'ordre du test "if Ind < 1" et de l'affectation " a := a*10+l[ind]" dans le cas "a >= b" mais pas dans le cas "a<b".

Remplace :
Code: Select all
:If a<b Then
:  a:=remain(a,b)
:  a:=a*10+l[ind]
:  If ind<1 Then
:    Exit
:  EndIf

par
Code: Select all
:If a<b Then
:  If ind<1 Then
:    Exit
:  a:=a*10+l[ind]
:  EndIf
et tout rentrera dans l'ordre.

Il serait bien également de rajouter une ligne pour renvoyer le quotient ET le reste... car le reste n'est pas forcément affiché juste avant.
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: DivEuclidSS - Ben ça alors o_O

Unread postby Lu_Lu54 » 09 May 2015, 11:23

Ah ben oui tiens j'avais laissé ça passer...
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


Return to Nspire-Basic

Who is online

Users browsing this forum: ClaudeBot [spider] and 1 guest

-
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.
858 utilisateurs:
>809 invités
>43 membres
>6 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)