Autorisation : Membre
Nb de messages : 369
Inscrit le : Dim 13 Fév 2011, 14:17
Posté le : Dim 14 Oct 2012, 20:23
Salut, sa fait longtemps que j'ai rien mis Oo donc pour me faire pardonner (bah oui je devais vous mettre un monopoly que j'ai d'ailleurs toujours l'intention de finir) je vous ai fait un superbe convertisseur hum... Il est trèèèèès lent, mais il est tellement bien et j'ai mis tellement de temps a le faire! (2h). Le voila, en plus il est trèèèès long (398 octets environ)
Code
:" -> Chaîne 3
:"0123456789abcdefghijklmnopqrstuvwxyz -> Chaîne 0
:Repeat C
:Repeat A<37 et A>0 et B>0 et B<37
:Input "BASE NOMBRE : ",A
:1 -> C
:Input "NOMBRE : ",Chaîne 1
:Input "BASE FINALE : ",B
:sous-chaîne(Chaîne0,1,A -> Chaîne2
:sous-châine(Chaîne0,1,B -> Chaîne0
:For(D,1,longueur(Chaîne1
:Ccarchaîne(Chaîne2,sous-chaîne(Chaîne1,D,1 -> C <-- Oubliez pas le C au début
:End
:End
:End
:EffVar EFor(D,longueur(Chaîne1),1,-1
:E+(carChaîne(chaîne2,sous-chaîne(Chaîne1,D,1))-1)A^(longueur(Chaîne1)-D -> E
:End
:-1 -> V
:EffVar SWhile S<E
:V+1 -> V
:B^V -> S
:End
:For(W,V,0,-1
:PartEnt(E/B^W -> X
:Chaîne3+sous-chaîne(chaîne0,X+1,1 -> Chaine3
:E-XB^W -> E
:End
:sous-Chaîne(Chaîne3,2,longueur(Chaîne3)-1 -> Chaîne3
:Disp "
:If "0"=sous-chaîne(Chaîne3,1,1
:sous-chaîne(Chaîne3,2,longueur(Chaîne3)-1 -> Chaîne3
:Chaîne3
Voila voila. Comme d'hab vu qu'il y a plein de truc a améliorer, faut me les dire . Tout commentaire est le bienvenue.
En espérant que ce programme vous comblera de bonheur.
Cordialement,
Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Dim 14 Oct 2012, 22:08
La réduction de Chaine0 pour n'avoir que le stricte nécessaire est originale mais innutile.
L'algorithme de division euclidienne par les puissances de Base maximales est intéressant mais moins performant que les divisions successives par Base.
... modulo(modulo(...,64),32), ... ) ; ce que tu fais pour Base=2
... ent(ent(X/2)/2) ... ; le plus optimisé pour Base=2
Les divisions par Base permettent de s'arrêter dès qu'un reste est nul, et d'avoir facilement la décomposition en relisant à l'envers les restes des divisions.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Lun 15 Oct 2012, 18:48
For(D,1,longueur(Chaîne1),1,-1
est faux, cause une erreur argument.
Le code de snap (malgré l'erreur argument) occupe actuellement dans mon vti 395 octets.
Ma meilleure version incluant la reconversion occupe 268 octets.
(celle la plus légère sans option et sans les astuces de mdr1 est 4 octets plus lourde que celle de mdr1)
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 369
Inscrit le : Dim 13 Fév 2011, 14:17
Posté le : Mar 16 Oct 2012, 23:20
Ah oui, sa doit être :
Code
For(D,longueur(Chaîne1),1,-1
Je suis pas sur et j'ai pas le programme sur moi la, je confirmerai ou non demain. Pour ceux que sa interesse mon monopoly est quasi-fini, manque plus que le parc gratuit, les caisses de communauté et chance à faire, quelques petits trucs a faire pour que sa rende joli et c'est terminé. Vous l'aurez dans quelques semaines tout au plus. Il est pas très très long, environ 6-7000 octets en additionnant les quatres programmes. Je vais surement les regrouper pour faire un seul programme, se sera plus simple, quoi que...
J'ai fais aussi un convertisseur mais le mien a la particularité d'être très rapide, je l'ai même ralentie pour des effets qui ne servent que pour l'ergonomie. Si sa vous intéresse je peut vous le poster. 1068o de taille avec les effets...
Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Dim 02 Déc 2012, 0:50
Allez, poste
Je préfère que tu le postes dans un nouveau sujet mais après tout le faire ici permet de rassembler les programmes semblables.
Je ne m'attend pas à ce qu'il surpasse ceux de mdr1 et moi, mais qui-sait, tu as peut-être révolutionné le calcul des bases.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 26
Inscrit le : Dim 02 Déc 2012, 10:06
Posté le : Dim 02 Déc 2012, 11:24
Bonjour,
Inscription faite ! Je ne pense pas que je vais le regretter.
Ensuite je ne pense absolument pas révolutionner le calcule de base !
Et il y a peu de chance qu'il soit meilleur que le votre... A voir.
Je vais le poster ici en deux partie une avec les effets et l'autre sans les effets (en optimisation ^^). Je ne poste que la conversion binaire -> Décimal et
Décimal -> Binaire
Code
Version avec effet:
While W[différent de]2 or W[différent de]10
ClrHome
Disp "En quel base ?
Input ":",W
If w=2:Goto 2
If W=10:Goto 3
End
Lbl 2
2->B
ClrHome
Disp "Nombre a","convertir ?
Inuput ":",A
ClrHome
int (A/B)->Q
A-B*Q->R
R->J
Output(1,1,"°
69!
int (Q/B)->Z
Q-B*Z->R
R-I
Output(1,2,"°
69!
int (Z/B)->Q
Z-B*Q->R
R->H
Output(1,3,"°
69!
int (Q/B)->Z
Q-B*Z->R
R->G
Output(1,4,"°
69!
int (Z/B)->Q
Z-B*Q->R
R->F
Output(1,5,"°
69!
int (Q/B)->Z
Q-B*Z->R
R->E
Output(1,6,"°
69!
int (Z/B)->Q
Z-B*Q->R
R->D
Output(1,7,"°
69!
int (Q/B)->Z
Q-B*Z->R
R->C
Output(1,8,"°
69!
ClrHome
Output(1,1,A
Output(2,2,"=
Output(3,1,C
Output(3,2,D
Output(3,3,E
Output(3,4,F
Output(3,5,G
Output(3,6,H
Output(3,7,I
Output(3,8,J
Disp "
Stop
Voila n’hésiter pas a critiquer.Je ne vous garantie pas que je n'est pas fais de faute de frappe mais moi il marche ni quel. Il me sert même plutôt bien en cours. ^^
-Skull-
---------------------- Concours de programmation touts niveaux...
Autorisation : Membre
Nb de messages : 26
Inscrit le : Dim 02 Déc 2012, 10:06
Posté le : Dim 02 Déc 2012, 11:50
En recopiant le code je me suis poser le même question, j'ai besoin de la variable R il me semble... Non entait non R = reste c plus claire . Une division euclidienne c'est déjà assez complexe comme sa en programmation, on va pas en rajouter.
Mais sinon par rapport au tien il vaut quoi ? ^^ Je suis curieux hein ?!!
-Skull-
---------------------- Concours de programmation touts niveaux...
Autorisation : Membre
Nb de messages : 373
Inscrit le : Jeu 23 Sep 2010, 16:05
Posté le : Lun 28 Oct 2013, 19:39
EDIT : NOUVELLE VERSION
De la base 10 à X et inversement, pour X de 2 à 36.
Au défit de faire mieux et plus léger !
Prgm AllBase V3 187 octets.
Code
:"0123456789ABCDEF->Chaîne0 ---- (Allez jusqu'à Z pour la base 36).
:EffEcr:0->N:0->R
:Input:"DE BASE ",X
:Input "A ",Y
:Input "N= ",Chaîne1
:longueur(Chaîne1->L
:For(Z,0,L-1
:carChaîne(Chaîne0,sous-Chaîne(Chaîne1,L-Z,1))-1
:R+X^ZRép->R
:End
:Repeat non(R
:N+1->N
:Output(8,17-N,sous-Chaîne(Chaîne0,1+R-Yent(R/Y),1
:ent(R/Y->R
:End
Autorisation : Membre
Nb de messages : 11
Inscrit le : Jeu 24 Oct 2013, 14:17
Posté le : Lun 28 Oct 2013, 21:44
Désolé d'être un débutant (bah il faut bien un boulet de temps à autre non ?), mais à quoi serve tout ces convertisseurs ?
Ps:pour ce que ca interèsse j'ai posté mon premier programme et j'ai mis 3 semaine à le faire ... Alors est-ce que vous pourriez aller jetez un coup d'oeil ? Le post se nomme "mon premier programme, un sshoot'em up du nom de Phoenix Lord"...
Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mar 29 Oct 2013, 16:11
----- ld :
tu t'es enfin décidé à utiliser les chaines de caractères.
Je me dis toujours que Mdr1 est imbattable, mais tu n'offres pas les mêmes fonctionnalités.
C'est-à-dire que tu effectues une seule conversion à la fois. On doit commander A->10 puis 10->B quand Mdr1 et ses semblables (dont moi) font naturellement A->10->B.
Je préfère quand-même permettre de base quelconque à quelconque plutôt que passer manuellement par 10.
Par contre tu as placé le Prompt N avant le test de la base, cela doit obliger à écrire deux fois logiquement ???
En plus ce serait assez simple de saisir une chaine puis d'interpréter avec expr() dans le cas de la saisie base 10.
----- Attila :
il est question de convertir l'écriture des nombres dans des bases différentes. La base est le nombre de symboles disponibles et donc la retenue. Les bases 10,2,16,60 sont les quatre bases les plus utilisées, par les humains ou par les ordinateurs. (la notation horaire cependant écrit en base 10 tout en effectuant les retenues à 60)
On a le nombre écrit par les digits a,b,c et la base z avec :
(abc)z = a*z^2 + b*z^1 + c*z^0 = a*z^2 + b*z + c
Exemple : (21)10=(10101)2=(15)16 car 21=16+4+1=16+5
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mar 29 Oct 2013, 16:35
Erreur de réécriture. Merci.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 373
Inscrit le : Jeu 23 Sep 2010, 16:05
Posté le : Mar 29 Oct 2013, 16:43
"Par contre tu as placé le Prompt N avant le test de la base, cela doit obliger à écrire deux fois logiquement ???"
J'ai inverser deux lignes en recopiant. MERCI !
"En plus ce serait assez simple de saisir une chaine puis d'interpréter avec expr() dans le cas de la saisie base 10."
Pas con, je vais essayer...