Espace TI: Forum
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment :
Code promo Nike : -25% dès 50€ ...
Voir le deal

[AXE] Diviseurs d'un nombre

3 participants

Aller en bas

[AXE] Diviseurs d'un nombre Empty [AXE] Diviseurs d'un nombre

Message par sandro 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?
sandro
sandro
Or 4
Or 4

Sexe : Masculin
Age : 28
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

[AXE] Diviseurs d'un nombre Empty Re: [AXE] Diviseurs d'un nombre

Message par kindermoumoute 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:
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
kindermoumoute
Or 4
Or 4

Sexe : Masculin
Age : 30
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

[AXE] Diviseurs d'un nombre Empty Re: [AXE] Diviseurs d'un nombre

Message par sandro 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).

sandro
sandro
Or 4
Or 4

Sexe : Masculin
Age : 28
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

[AXE] Diviseurs d'un nombre Empty Re: [AXE] Diviseurs d'un nombre

Message par kindermoumoute 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
kindermoumoute
Or 4
Or 4

Sexe : Masculin
Age : 30
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

[AXE] Diviseurs d'un nombre Empty Re: [AXE] Diviseurs d'un nombre

Message par noelthebest 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 ?
noelthebest
noelthebest
Platinum 1
Platinum 1

Sexe : Masculin
Age : 27
Messages : 1971
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

[AXE] Diviseurs d'un nombre Empty Re: [AXE] Diviseurs d'un nombre

Message par sandro 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.
sandro
sandro
Or 4
Or 4

Sexe : Masculin
Age : 28
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

[AXE] Diviseurs d'un nombre Empty Re: [AXE] Diviseurs d'un nombre

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

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

Sexe : Masculin
Age : 27
Messages : 1971
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

[AXE] Diviseurs d'un nombre Empty Re: [AXE] Diviseurs d'un nombre

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

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