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