[TUTO][AXE] Faire un Input en Axe
Posted: 02 Feb 2013, 00:17
Quel problème pour les 90% des programmeurs Axe que les entrées utilisateurs... Aujourd'huis nous allons voir comment faire un number input en Axe.
Commençons par le début, la syntaxe de la commande input est celle la :input->A qui enregistre une chaine de caractere ascII a l'adresse A... A sera don utiliser ici comme un pointeur.
premières lignes de code :
Une fois cela fait nous savons que le numéro des caractère des chiffres de 0 a 9 sont 48,49,50....
Une fois cela su il est facile de faire un number input a UN seul chiffre :
Le problèmes maintenant c'est d'y insérer plusieurs chiffres donc de faire un number input pour les nombres et non les chiffres...
La technique va être relativement similaire il faut juste y intégrer une seconde boucle qui parcours tout les octets de {A} et qui les test tous après il ne nous reste plus qu'a ajouter le numéro de l'octet ( multiplié par 10 selon la place ) a B exemple :
on prends 567
C'est donc égal a (7)+(6*10)+(5*100).
Intégrons ceci a un algorithme :
Et voila notre code est finis.... quoique non, testez le et que voyez vous ? tout les chiffres sont a l'envers... pour corriger ce problèmes il suffit de lire les octets depuis la fin de la chaîne :
Et la tout devrais marcher !
puis en version optimisé en nombres de ligne (6) :
et en version optimiser en taille sur la calculatrice :
Commençons par le début, la syntaxe de la commande input est celle la :input->A qui enregistre une chaine de caractere ascII a l'adresse A... A sera don utiliser ici comme un pointeur.
premières lignes de code :
- Code: Select all
:.INPUT
:input->A
Une fois cela fait nous savons que le numéro des caractère des chiffres de 0 a 9 sont 48,49,50....
Une fois cela su il est facile de faire un number input a UN seul chiffre :
- Code: Select all
:.INPUT
:input->A
:0->B
:for(Y,0,9)
:If {A}=(Y+48)
:B+Y->B
:End
:End
:output(0,0,B>Dec)
Le problèmes maintenant c'est d'y insérer plusieurs chiffres donc de faire un number input pour les nombres et non les chiffres...
La technique va être relativement similaire il faut juste y intégrer une seconde boucle qui parcours tout les octets de {A} et qui les test tous après il ne nous reste plus qu'a ajouter le numéro de l'octet ( multiplié par 10 selon la place ) a B exemple :
on prends 567
C'est donc égal a (7)+(6*10)+(5*100).
Intégrons ceci a un algorithme :
- Code: Select all
:.INPUT
:input->A
:0->B+1->K
:for(X,0,lenght(A)-1)
:for(Y,0,9)
:If {X+A}=(Y+48)
:Y*K+B->B //ajoute le nombre selon le tokens et selon la place dans la chaîne
:K*10->K //multiplie par 10 pour avoir le numéro suivant dans la chaîne
:End
:End
:End
:output(0,0,B>Dec)
Et voila notre code est finis.... quoique non, testez le et que voyez vous ? tout les chiffres sont a l'envers... pour corriger ce problèmes il suffit de lire les octets depuis la fin de la chaîne :
- Code: Select all
:.INPUT
:input->A
:0->B+1->K
:for(X,0,lenght(A)-1)
:for(Y,0,9)
:If {length(A)-1-X+A}=(Y+48)
:Y*K+B->B //ajoute le nombre selon le tokens et selon la place dans la chaîne
:K*10->K //multiplie par 10 pour avoir le numéro suivant dans la chaîne
:End
:End
:End
:output(0,0,B>Dec)
Et la tout devrais marcher !
puis en version optimisé en nombres de ligne (6) :
Show/Hide spoilerAfficher/Masquer le spoiler
- Code: Select all
:.INPUT
:input->A
:for(X,1->K-1->B,lenght(A))
:for(Y,0,9)
:{length(A)-1-X+A}-Y-48??Y*select(K,*10->K)+B->B
:End
:End
:output(0,,B>Dec)
et en version optimiser en taille sur la calculatrice :
Show/Hide spoilerAfficher/Masquer le spoiler
- Code: Select all
:A venir