Rechercher
Connexion
Chatbox externe
Derniers sujets
Partenaires
TI-Planet | Espace-TI : Forum |
Faire un don à Tout-82...
Où va cet argent ?
Membres donateurs:- Persalteas (10€)
- Wistaro (5€)
- jo2geek (22€)
Les posteurs les plus actifs du mois
Aucun utilisateur |
Défi !
4 participants
Tout 82 :: Programmes :: Les Programmes des Internautes (TI-Basic z80) :: Aide à la programmation (TI-Basic z80)
Page 1 sur 1
Défi !
salut !
Je dois faire un algo avec les consignes suivantes:
1 → A
2 → B
26 → Z
27 → AA
28 → AB
702 → ZZ
703 → AAA
...
Je dois trouver les lettres correspondantes pour le nombre 1 602 000 ! ! !
Merci de votre aide !
Je dois faire un algo avec les consignes suivantes:
1 → A
2 → B
26 → Z
27 → AA
28 → AB
702 → ZZ
703 → AAA
...
Je dois trouver les lettres correspondantes pour le nombre 1 602 000 ! ! !
Merci de votre aide !
Re: Défi !
Idées:
Tu demandes un nombre
Tant que la variable n'est pas nulle:
Tu lui retranche 1
Tu divise par 26
Le reste+1 correspondra au numéro de la lettre actuelle (tu peux le récupérer avec un sous-chaine)
Le quotient tu le remets dans la variable
Et tu recommence jusqu'à ce que le quotient soit nul
Ca donne:
Donc tu trouves CMCUJ
Tu demandes un nombre
Tant que la variable n'est pas nulle:
Tu lui retranche 1
Tu divise par 26
Le reste+1 correspondra au numéro de la lettre actuelle (tu peux le récupérer avec un sous-chaine)
Le quotient tu le remets dans la variable
Et tu recommence jusqu'à ce que le quotient soit nul
Ca donne:
- Code:
Prompt A
" ->Chaine1 //Un espace pour éviter les erreurs indéfini
While A
(A-1)/26->A
sous-chaine("ABCDEFGHIJKMLNOPQRSTUVWXYZ",arrondi(1+26partDéc(Rép),0),1)+Chaine1->Chaine1
partEnt(A->A
End
Chaine1
Donc tu trouves CMCUJ
Dernière édition par m@thieu41 le Mer 29 Jan 2014 - 15:58, édité 1 fois
m@thieu41- ----------------------
- Messages : 939
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Défi !
de rien
J'avais fait une petite erreur j'ai rectifié.
J'avais fait une petite erreur j'ai rectifié.
m@thieu41- ----------------------
- Messages : 939
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Défi !
Pour vérifier l'inverse:
Il faut traiter séparément les caractères, et multiplier leur nombre associé (1 pour A, 2 pour B...) par 26^(nombre de caractères - rang)
Ex:
AB
A->1
B->2
AB = 1*26^(2-1)+2*26^(2-2)
Donc:
A Wistaro: Que n'as tu pas compris?
Il faut traiter séparément les caractères, et multiplier leur nombre associé (1 pour A, 2 pour B...) par 26^(nombre de caractères - rang)
Ex:
AB
A->1
B->2
AB = 1*26^(2-1)+2*26^(2-2)
Donc:
- Code:
Prompt Chaine1
somme(suite(car-chaine("ABCDEFGHIJKLMNOPQRSTUVWXYZ",sous-chaine(Chaine1,A,1))*26^(longueur(Chaine1)-A),A,1,longueur(Chaine1 //Corrigé un A en 1
A Wistaro: Que n'as tu pas compris?
Dernière édition par m@thieu41 le Mer 29 Jan 2014 - 21:58, édité 1 fois
m@thieu41- ----------------------
- Messages : 939
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Défi !
C'est une notation en base 26. Et les conversions de bases sont classiques.
Exemple le sujet de Wistaro dans lequel j'ai indiqué le convertisseur de Mdr1 et le mien. Cela fait toutes les bases de 2 à 36.
Wistaro si cela peut t'éclairer, 26^2=676 et 676+26=702. Il y a juste un cycle de retenue.
Pour moi la seule ambiguïté semble être l'absence de zéro. Il y a des offsets à faire pour décaler la table.
Je tente d'adapter ce qu'on avait déjà en terme de conversion classique à ce problème en base 26 :
Exemple le sujet de Wistaro dans lequel j'ai indiqué le convertisseur de Mdr1 et le mien. Cela fait toutes les bases de 2 à 36.
Wistaro si cela peut t'éclairer, 26^2=676 et 676+26=702. Il y a juste un cycle de retenue.
Pour moi la seule ambiguïté semble être l'absence de zéro. Il y a des offsets à faire pour décaler la table.
Je tente d'adapter ce qu'on avait déjà en terme de conversion classique à ce problème en base 26 :
- Code:
"ABCDEFGHIJKLMNOPQRSTUVWXYZ→Str1
Menu("","99>ABC",1,"ABC>99",2
Lbl 1
Prompt X
"_→Str2
Repeat not(Q
int((X-1)/26→Q // le -1 ici est copié sur m@thieu41
sub(Str1,X-26Q+1,1)+Str2→Str2
Q→X
End
Disp Str2
Return
Lbl 2
Input "MOT=",Str2
length(Str2→N
0
For(W,0,N-1
Ans+26^WinString(Str1,sub(Str2,N-W,1
End
Disp Ans
Dernière édition par Linkakro le Jeu 30 Jan 2014 - 1:40, édité 8 fois
Linkakro- ----------------------
- Messages : 533
Points Concours : 55
Productivité : 31
Date d'inscription : 30/07/2013
Localisation : origine région centre, puis perpignan
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Défi !
il me met un erreur type donnée après "chaine1", sur la première ligne
EDIT: Linka, trouves tu le même résultat ? CMCUJ pour 1 602 000 ?
EDIT: Linka, trouves tu le même résultat ? CMCUJ pour 1 602 000 ?
Re: Défi !
J'ai posté avant de tester, j'ai eu tort de le faire. Je testerai dans un instant après manger.
Linkakro- ----------------------
- Messages : 533
Points Concours : 55
Productivité : 31
Date d'inscription : 30/07/2013
Localisation : origine région centre, puis perpignan
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Défi !
D'accord, c'est une conversion de bases!
Je ne comprenais pas le
Je viens de comprende, merci!
Je ne comprenais pas le
pito2601 a écrit:
1 → A
2 → B
26 → Z
27 → AA
28 → AB
702 → ZZ
703 → AAA
Je viens de comprende, merci!
Re: Défi !
@pito: si l'erruer type donnée est au niveau du Prompt Chaine1, c'est que tu n'as pas mis les guillemets pour saisir la chaine...
@Linka: Pourquoi "Disp Ans+1"?
Si on a saisi "A":
W = 0
inString(Str1,sub(Str2,N-W,1 = 1
Ans = 0
Donc
Ans+26^WinString(Str1,sub(Str2,N-W,1 = 1
Si tu affiches Ans+1 ça mettra 2... donc il faut bien afficher Ans.
@Linka: Pourquoi "Disp Ans+1"?
Si on a saisi "A":
W = 0
inString(Str1,sub(Str2,N-W,1 = 1
Ans = 0
Donc
Ans+26^WinString(Str1,sub(Str2,N-W,1 = 1
Si tu affiches Ans+1 ça mettra 2... donc il faut bien afficher Ans.
m@thieu41- ----------------------
- Messages : 939
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Défi !
Je me suis trompé en considérant un offset de tous les nombres alors que c'est chaque chiffre qui doit être placé correctement dans la table des symboles.
Je suis déstabilisé par ton calcul arrondi(1+26partDéc((A-1)/26),0). Je ne pensais pas à déphaser la division mais son résultat.
Ta fonction suite est bien utilisée. Cette optimisation est innovante.
J'ai un ensemble d'ambiguïtés dont je cherche depuis 21h la solution globale.
Un des ennuis vient du While d'optimisation de mdr1 qui ne supporte pas le nombre zéro en entrée contrairement au Repeat que j'avais toujours utilisé avant.
Je travaille sur tout le reste.
En attendant les autres fiez vous à m@thieu41.
----
EDIT : m@thieu41 m'a vaincu avec :
-le décalage aproprié de chaque digit
-la fonction somme et la fonction suite
Je suis déstabilisé par ton calcul arrondi(1+26partDéc((A-1)/26),0). Je ne pensais pas à déphaser la division mais son résultat.
Ta fonction suite est bien utilisée. Cette optimisation est innovante.
J'ai un ensemble d'ambiguïtés dont je cherche depuis 21h la solution globale.
Un des ennuis vient du While d'optimisation de mdr1 qui ne supporte pas le nombre zéro en entrée contrairement au Repeat que j'avais toujours utilisé avant.
Je travaille sur tout le reste.
En attendant les autres fiez vous à m@thieu41.
----
EDIT : m@thieu41 m'a vaincu avec :
-le décalage aproprié de chaque digit
-la fonction somme et la fonction suite
Linkakro- ----------------------
- Messages : 533
Points Concours : 55
Productivité : 31
Date d'inscription : 30/07/2013
Localisation : origine région centre, puis perpignan
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Défi !
Tu dois avoir mal saisi des parenthèses ou virgules.
Si tu ne parviens pas à te repérer, sépare la commande en plusieurs lignes et ne les rassemble qu'après avoir fini de relire.
Tu peux alléger l'écriture en calculant longueur(Chaîne1) séparément sur la ligne d'avant.
Si tu ne parviens pas à te repérer, sépare la commande en plusieurs lignes et ne les rassemble qu'après avoir fini de relire.
Tu peux alléger l'écriture en calculant longueur(Chaîne1) séparément sur la ligne d'avant.
Je propose de parcourir en fonction des indice d'exposant plutôt que des positions des digits, juste pour réduire les parenthèses.Prompt Chaine1
longueur(Chaîne1
somme(suite(car-chaine("ABCDEFGHIJKLMNOPQRSTUVWXYZ",sous-chaine(Chaine1,A,1))*26^(Rép-A),A,1,Rép
Prompt Chaine1
longueur(Chaîne1
somme(suite(car-chaine("ABCDEFGHIJKLMNOPQRSTUVWXYZ",sous-chaine(Chaine1,Rép-A,1))*26^A),A,0,Rép-1
Linkakro- ----------------------
- Messages : 533
Points Concours : 55
Productivité : 31
Date d'inscription : 30/07/2013
Localisation : origine région centre, puis perpignan
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Défi !
Je trouve bien 1 602 000 avec ta première proposition, merci à vous tous ! Vous gérez à mort !
Tout 82 :: Programmes :: Les Programmes des Internautes (TI-Basic z80) :: Aide à la programmation (TI-Basic z80)
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
Dim 16 Oct 2022 - 21:11 par Wistaro
» Bonne année 2018!
Ven 2 Nov 2018 - 19:42 par Ti64CLi++
» Lancement du TI-Concours 2017 !
Sam 20 Mai 2017 - 0:27 par Paulo1026
» Chaînes Youtube des membres
Ven 19 Mai 2017 - 22:41 par Wistaro
» cacul du taux d'intêret
Ven 24 Mar 2017 - 21:50 par m@thieu41
» [Projet] Un mario by tout82
Dim 29 Jan 2017 - 14:09 par Wistaro
» Cherche documentation assembleur TI82stat
Mer 25 Jan 2017 - 12:29 par Ti64CLi++
» Probleme Ti-82 Stats fr
Jeu 12 Jan 2017 - 13:56 par Ti64CLi++
» ROM 82 stats.fr
Jeu 15 Déc 2016 - 10:24 par Ti64CLi++