[AXE] Diviseurs d'un nombre

Voir le sujet précédent Voir le sujet suivant Aller en bas

[AXE] Diviseurs d'un nombre

Message par sandro le Lun 27 Fév - 19:06

Bonjour,
je viens de me remettre à l'axe en faisant un programme qui calcule très rapidement tous les diviseurs d'un nombre (inférieur ou égal à 65535)

ADIVISEU.8xp : executable (à lancer avec asm( )
AXEDIV.8xp : code source

Code:
.ADIVISEUR
ClrHome
"N=" -> Str1
Output(0,0,Str1
0 -> K -> N
While K =!= 9
getKey -> K
If K=33
N*10 -> N
End
If K=34
N*10+1 -> N
End
If K=35
N*10+4 -> N
End
If K=36
N*10+7 -> N
End
If K=26
N*10+2 -> N
End
If K=27
N*10+5 -> N
End
If K=28
N*10+8 -> N
End
If K=18
N*10+3 -> N
End
If K=19
N*10+6 -> N
End
If K=20
N*10+9 -> N
End
If K=56
N/10 -> N
End
If K=15
0 -> N
End
Output(2,0,N>Dec
End

1üP
1 -> {L1}r
For(A,2,rac(N))
!If N^A
P++
A -> {P*2+L1-2}r
End
End

rac(N)²=N -> Q


For(B,1,P)
N/{B*2+L1-2}r -> {P*2-B-Q*2+L1}r
End

For(B,1,P*2-Q)
Output(0,2,{B*2+L1-2}r>Dec
Pause 2000
End

Sandro

PS1 : je pense que j'essayerais de faire que ça marche pour des nombres plus grands après le bac blanc (semmaine prochaine)

PS2 : y aurait-il un moyen de remplacer ma routine pour demander le nombre?

_________________
mort à l'inutile, place à la mémoire libre et aux programmes!

sandro
Or 4
Or 4

Sexe : Masculin
Age : 20
Messages : 806
Date d'inscription : 01/07/2011
Etudes : T°S SVT spé maths
Points Forum : 29
Points Concours : 5
Langages :
  • - TI-Basic Z80
  • - ASM TI-82 Stats / TI-83
  • - ASM TI-83+ / TI-84+
  • - Axe Parser
Calculatrices :
  • - TI-82 Stats.fr
  • - TI-84+ SE
  • - TI-89
  • - Casio Collège

TI-84+ SE


Revenir en haut Aller en bas

Re: [AXE] Diviseurs d'un nombre

Message par kindermoumoute le Lun 27 Fév - 19:40

Pour ceux qui auraient la flemme de tester :
[Vous devez être inscrit et connecté pour voir cette image]

Génial vraiment j'aime bien, j'ai le même en TI-Basic et j'avais jamais pensé le faire en Axe. Pour la routine de demande de nombre, je suis tout à fait d'accords. J'avais pensé à cette optimisation :
Code:
:If inData(K,Data(33,34,26,18,35,27,19,36,28,20,0
:-1*10→N
:ElseIf K=56
:N/10→N
:Else!If K-15
:→N
:End
Je vois déjà ta tête après avoir lu une première fois ce code. Content
Spoiler:
Choqué (kindermoumoute est complètement fou !)
Mais non, je vais t'expliquer tout d'abords le principe de la commande inData (tu le trouvera à la place du inString en TI-Basic) : il cherche si il existe la valeur K (1er argument) dans les datas pointées (deuxième argument) jusqu'au prochain 0. Si la valeur K n'est pas trouvé, l'expression renvoie 0, sinon le K cherché se trouve dans la liste parmi les suivant 33,34,26,18,35,27,19,36,28,20 et renvoie respectivement l'octet dans lequel il se trouve. En clair si c'est K=33, alors ça retourne 1, si K=34 alors ça retourne 2, etc.

Mais pourquoi cette valeur n'est stockée nul part ?
C'est une optimisation du registre hl ! En fait tu peux considérer le registre HL comme la variable Ans du TI-Basic, chaque calcul sera stocké dedans. Donc le code suivant :
Code:
:If A
:→B
:End
stocke A dans B, si A est non-nul.

Bref c'est la même chose avec :
Code:
Else!If K-15
:→N
si il n'y a pas K-15, K=15, mais le registre hl vaudra 0, que l'on stocke directement dans N. Cool


Si je peux me permettre de te donner quelques ajouts à faire qui seraient sympa :

  • Dire quand le nombre est premier.
  • Proposer un défilement des diviseurs sous forme de tableau (les pause sont un peu lente).
  • Étendre aux nombres floats avec l'axiom ici.
  • Stocker dans L1 (de la calculatrice) les résultats.

kindermoumoute
Or 4
Or 4

Sexe : Masculin
Age : 22
Messages : 797
Date d'inscription : 07/10/2010
Points Forum : 21
Points Concours : 1
Langages :
  • - TI-Basic Z80
  • - Axe Parser
Calculatrices :
  • - TI-83+

TI-83+


Revenir en haut Aller en bas

Re: [AXE] Diviseurs d'un nombre

Message par sandro le Lun 27 Fév - 19:49

merci beaucoup.

Par contre pour les améliorations, ça risque de devoir attendre que j'ai fini mon bac blanc Très Triste

Sandro

PS : donc il n'y a aucune fonction permettant directement de lire un nombre?
PS2 : "(kindermoumoute est complètement fou !)" absolument pas mais plutôt "merci pour cette bonne optimisation" (je fais de "horreures" du même gere en basic).


_________________
mort à l'inutile, place à la mémoire libre et aux programmes!

sandro
Or 4
Or 4

Sexe : Masculin
Age : 20
Messages : 806
Date d'inscription : 01/07/2011
Etudes : T°S SVT spé maths
Points Forum : 29
Points Concours : 5
Langages :
  • - TI-Basic Z80
  • - ASM TI-82 Stats / TI-83
  • - ASM TI-83+ / TI-84+
  • - Axe Parser
Calculatrices :
  • - TI-82 Stats.fr
  • - TI-84+ SE
  • - TI-89
  • - Casio Collège

TI-84+ SE


Revenir en haut Aller en bas

Re: [AXE] Diviseurs d'un nombre

Message par kindermoumoute le Lun 27 Fév - 19:52

sandro a écrit:PS : donc il n'y a aucune fonction permettant directement de lire un nombre?
Non, en fait il y a moyen de lire les chaîne de tokens avec input, mais à moins de faire appelle à un programme TI-Basic il faut recréer sa propre fonction de détection de touche.

kindermoumoute
Or 4
Or 4

Sexe : Masculin
Age : 22
Messages : 797
Date d'inscription : 07/10/2010
Points Forum : 21
Points Concours : 1
Langages :
  • - TI-Basic Z80
  • - Axe Parser
Calculatrices :
  • - TI-83+

TI-83+


Revenir en haut Aller en bas

Re: [AXE] Diviseurs d'un nombre

Message par noelthebest le Mar 28 Fév - 10:16

Ton orthographe est aussi une horreur sandro. ^^
Sinon c'est très original de programmer ça en Axe, bonne continuation dans ce langage.

P.S. : tu ne participes pas au TI-Concours en Axe ?

_________________
[Vous devez être inscrit et connecté pour voir cette image]

[Vous devez être inscrit et connecté pour voir cette image]
[Vous devez être inscrit et connecté pour voir cette image]

noelthebest
Platinum 1
Platinum 1

Sexe : Masculin
Age : 19
Messages : 1969
Date d'inscription : 12/03/2011
Etudes : ENS Cachan
Points Forum : 20
Points Concours : 9
Langages :
  • - TI-Basic Z80
  • - ASM TI-83+ / TI-84+
  • - Axe Parser
Calculatrices :
  • - TI-83+.fr
  • - TI-Nspire CX
  • - Casio Collège
  • - Casio Graph

TI-84+ SE


Revenir en haut Aller en bas

Re: [AXE] Diviseurs d'un nombre

Message par sandro le Mar 28 Fév - 20:05

Je crois pas que j'aurais le temps, mais rajoute moi si ça te dérange pas, je pourrais toujours voir après dans quelle(s) catégorie(s) je rendrais de programmes (je pense pas que j'aurais le temps de faire les 3.

_________________
mort à l'inutile, place à la mémoire libre et aux programmes!

sandro
Or 4
Or 4

Sexe : Masculin
Age : 20
Messages : 806
Date d'inscription : 01/07/2011
Etudes : T°S SVT spé maths
Points Forum : 29
Points Concours : 5
Langages :
  • - TI-Basic Z80
  • - ASM TI-82 Stats / TI-83
  • - ASM TI-83+ / TI-84+
  • - Axe Parser
Calculatrices :
  • - TI-82 Stats.fr
  • - TI-84+ SE
  • - TI-89
  • - Casio Collège

TI-84+ SE


Revenir en haut Aller en bas

Re: [AXE] Diviseurs d'un nombre

Message par noelthebest le Mer 29 Fév - 9:41

D'accord.
(désolé pour le HS)

_________________
[Vous devez être inscrit et connecté pour voir cette image]

[Vous devez être inscrit et connecté pour voir cette image]
[Vous devez être inscrit et connecté pour voir cette image]

noelthebest
Platinum 1
Platinum 1

Sexe : Masculin
Age : 19
Messages : 1969
Date d'inscription : 12/03/2011
Etudes : ENS Cachan
Points Forum : 20
Points Concours : 9
Langages :
  • - TI-Basic Z80
  • - ASM TI-83+ / TI-84+
  • - Axe Parser
Calculatrices :
  • - TI-83+.fr
  • - TI-Nspire CX
  • - Casio Collège
  • - Casio Graph

TI-84+ SE


Revenir en haut Aller en bas

Re: [AXE] Diviseurs d'un nombre

Message par Contenu sponsorisé Aujourd'hui à 15:37


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum