Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.
Conversion de toutes les bases (2,8,10,16 et les autres)
linkakro le 02/11/2009 à 22:54
Celui-ci converti n'importe quel nombre entier naturel de n'importe quelle base vers n'importe quelle autre base. (on choisit même si on on veut base 16 normal ou héxadécimal)
Le principal défaut est que l'utilisateur doit préalablement préciser le nombre de chiffres.

(vous pouvez mettre des zéros au début).
Attention ! si la base est par exemple 13 alors un "chiffre" peut être 12 c'est à dire 2 chiffres décimaux couplés.
(attention au zéro et au "o" en recopiant)
Code
Normal
Flottant
EffEcr
EffListe L1
input "BASE DEPART ",X
input "BASE FINALE ",Y
input "NBR CHIFR",N
If Y=16
Then
1->H
Menu( "RESULTAT HEXA ?","HEXADECIMAL",1,"16",0
Lbl 0
0->H
Lbl 1
End
10->A
11->B
12->C
13->D
14->E
15->F
Disp "CHIFFRES [inférieur ou égal] "
output(4,13,X-1
For(W,1,N
output(5,14,W
output(4,14," "
input"Z ",Z
Z->L1(W)
End
0->P
For(W,1,N
L1(W)*X^(N-W)+P->P
End
ent(log(P))+1->o
10^o -1 ->K
0->M
0->J
repeat J[suppérieur ou égal]K
M+1->M
Y^M -1 ->J
End
For (W,1,M
ent(P/Y^(M-W))->L1(W)
P-Y^(M-W)*L1(W)->P
End
EffEcr
Disp "BASE"
output(1,7,Y
If M>35 ou ent(log(Y))>1
Then
Disp "AFFICHAGE","IMPOSSIBLE.","RESULTAT DANS L1"
Else
1->U
2->V
For(W,1,M
output(V,U,L1(W)
If Y=16 et H=1
Then
IF L1(W)=10
output(V,U," A"
IF L1(W)=11
output(V,U," B"
IF L1(W)=12
output(V,U," C"
IF L1(W)=13
output(V,U," D"
IF L1(W)=14
output(V,U," E"
IF L1(W)=15
output(V,U," F"
End
3+U->U
If W-ent(W/5)*5=0
Then
V+1->V
1->U
End
End
End
La fonction héxadécimal "pur" (avec des lettres) est facultative, et l'affichage spécial du résultat est juste lisible et plus rapide que le menu stats ainsi que compatible avec l'héxadémal pur contrairement aux listes.
linkakro le 16/11/2009 à 21:08
Nouvelle version.
Conversion "
universelle " de base quelconque vers autre base quelconque (seulement entiers naturels).
Saisies en base 10 et 16 simplifiées par rapport à la première version.
Saisie d'un nombre illimité et
pas prédéfinit de "chiffres" (une base suppérieure à 10 peut provoquer des rangs de "chiffre" composés de 2 digits (excepté l'héxadécimal avec l'option nbr+littéral activé))
La saisie illimitée permet des valeurs élevées donc elles comportent un risque d'erreur lorsque ces valeurs sont trop élevées. (à cause des arrondis de la calculatrice vers 10^14)
Pour quitter la saisie, appuyez sur la touche virgule du bas entre une validation d'étape de saisie et le passage à l'étape suivante. Entrer pour valider l'étape ou continuer à l'étape suivante de saisie.
Code
Normal
Flottant
EffEcr
EffListe L1
input "BASE DEPART ",X
input "FINAL ",Y
Disp "CHIFR <"
output(3,9,X)
If X=10
Then
input "P ",P
ent(log(P))+1->N
goto 9
End
10->A
11->B
12->C
13->D
14->E
15->F
0->N
Lbl 2
0->T
N+1->N
output(5,14,N
output(4,14," "
input "Z ",Z
Z->L1(N)
Repeat T=103
codetouche->T
If T=105
goto 2
End
Lbl 9
0->H
If Y=16
Then
Menu("RESULTAT LETTRE","HEXA",1,"16",0
Lbl 1
1->H
Lbl 0
End
If X=10
goto 10
0->P
For(W,1,N)
L1(W)*X^(N-W)+P->P
End
Lbl 10
P->Z
0->M
0->J
Repeat J[> ou égal]P
M+1->M
J+(Y-1)*Y^(M-1)->J
End
EffListe L1
For(W,1,M)
ent(P/Y^(M-W))->L1(W)
P-Y^(M-W)*L1(W)->P
End
EffEcr
Disp "BASE"
output(1,7,Y
If Y=10
Disp Z
If H=0 et Y[égal barré]10
Pause L1
If H=1
Then
For(W,1,M
If L1(W)<10
Disp L1(W)
If L1(W)=10
Disp "A"
If L1(W)=11
Disp "B"
If L1(W)=12
Disp "C"
If L1(W)=13
Disp "D"
If L1(W)=14
Disp "E"
If L1(W)=15
Disp "F"
Pause
End
End
linkakro le 02/07/2010 à 00:20
Depuis j'ai amélioré ce programme. Il a été uploadé par alexvire et le
lien est sur son site.
La saisie est nettement plus propre. Il est optimisé avec les chaînes et un résultat peu se reconvertir. (toutes les bases fonctionnent mais certaines non-usuelles necessitent des 0)
Persalteas le 03/07/2010 à 19:06
très bien!linkakro le 02/02/2011 à 19:23
Voici une
VERSION MODERNE DE CONVERS
TI83/82stat(fr)
-Toutes les bases dans tous les sens. Quoique cette dernière version s'arrète à 36 (lettre Z). (avant chaque chiffre était écrit sur plusieurs digits)
-reconversion
-simple saisie à la main des chiffres et des lettres
//-avertissement lors d'un dépassement de capacité (13 chiffres en décimal)
Code
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"->Str1
Input "BASE=",X
Input "VERS=",Y
Input "X=",Str2
length(Str2->N
0->P
For(W,1,N
inString(Str1,sub(Str2,W,1))-1->Q
Q*X^(N-W)+P->P
End
If P=0
Stop
P->Z
Lbl R
" "->Str2
Repeat Q=0
iPart(P/Y->Q
P-YQ->R
Q->P
sub(Str1,R+1,1)+Str2->Str2
End
/////// facultatif, avertit du risque d'arrondit
// iPart(log((Z-1)))-1->S
// 1+iPart(log(10^(S)iPart((Z-1)10^(-S))))->T
// If T>13
// Disp "TROP GRAND"
Pause Str2
Menu("RESTART","STOP",Q,"RECONVERTIR",S
Lbl S
Y->X
Input "RECONV=",Y
Z->P
Goto R
Lbl Q
EDIT 20/8/2012 : ce porgramme est pratiquement aussi bien que l'emblématique programme de MDR1 sur le Site-Du-Zéro, cependant il propose une reconversion et je l'ai écrit seul, et mdr1 a plus optimisé.
Persalteas le 03/02/2011 à 21:18
super!!
j'adore ton prog (j'avais l'ancienne version), je l'utilise régulièrement parce que j'essaie de coder des sprites en base 27 (plutot que de coder en 8*8 en hexa) dans des programmes en basic, enfin, j'essaie de faire du rentable et de faire tenir un sprite dans un ou deux caractères.(échec pour l'instant.)
la version précédente marchait, mais je ne suis pas contre une nouvelle.linkakro le 03/02/2011 à 23:32
Moi aussi j'ai bossé sur des sprites ainsi ! Et je n'ai moi non plus pas aboutit.ld le 07/02/2011 à 13:49
Houa ! Moi aussi j'ai fait un prgm de se genre...
Le tiens me semble un peu long.
Le mien tiens en 6 lignes... Et oui il existe une formule mathématique qui fait tout !
Sauf qu'il fait:
-Réel vers-> binaire (base 2).
et
-N'importe qu'elle base vers-> Réel (base 10).
Tu as comprit, il ne fait pas:
-N'importe qu'elle base vers-> N'importe qu'elle base.
Mais peu importe...
Je le poste dès que possible sur ton sujet, c'est à dire, disons, euh...
Demain.

ld le 08/02/2011 à 17:12
Voilà le petit dernier !
Code
:EffEcr
:Menu("CONVERT","R->B",1,"B->R",2
:Lbl 1
:Input"R-)B",x
:if X supérieur ou = à 65535:Then:Disp "ERREUR...":Stop:End
:0-)B:Repeat x=0
:B+1-)B
:x-2int(x/2)-)R
:partEnt(x/2)-)x
:R-)L BIN(B)
:End
For(A,1,B)
:Output(8,17-A,L BIN(A
:End
:EffVar L BIN:Stop
:Lbl 2
:Input "BASE",B
:0->E:0->R
:Input N
:input "10^(",P ----------- (nombre de chiffes).
:Repeat E-1=p
:Output(8,1,R
:N/10->N
:if ent(10partDéc(N)>B:Disp "ERREUR !"
:R+B^Eent(10PartDéc(N->R
:E+1->E
:End
Persalteas le 08/02/2011 à 20:16
celui qui supprime tes messages, c'est Sangohan; le modérateur.
ça veut dire qu'ils étaient inutiles.
deuxième possibilité: tu appuies sur "prévisualiser" au lieu de "soumettre" quand tu postes le message, et ensuite tu cliques sur le lien de l'index du forum, et le message est perdu. ça a l'air bète comme ça, mais ça m'est déjà arrivé.
tu saurais faire le programme pour convertir de base 10 en base 27 ?
ça te dit un petit défi ?ld le 09/02/2011 à 10:44
AH ! Désolée, haut grand modérateur Sangohan...

Par St Denis !Je ne posterais plus de messages inutiles...
Pour répondre à Persalteas, pourquoi 27 ? l’alpha b c'est (Base 26)...
De 1 à 25 + 0... C'est çà que t'as voulut dire ?
Si t'es d'accort pour 26, alors j'accepte le défit !
Et que je trépasse si je faiblis !

Persalteas le 09/02/2011 à 19:50
Euh non, moi je voudrait en base 27 (3 au cube) pour coder des petits sprites en basic.
Ah, euh, les fautes d'orthographe énèrvent Sangohan aussi. Et il faut bien penser à la ponctuation, même au majuscules sur les Ah et les Euh. Ne t'inquiète pas on s'y fait au bout d'un moment.

Et pense bien à mettre l'espace après le point et non pas avant.
Ps: un petit peu de flood pour notre bien aimé modérateur (mais oui, celui dont je viens de me moquer pendant 4 lignes (ah non, quatre, pas 4, c'est plus français). Tiens, d'ailleurs, je viens de dépasser le webmaster en nombre de messages. Ne t'inquiète pas Sangohan, je te taquine.

Sangohan38 le 09/02/2011 à 20:24
Je ne suis pas si chiant que ça quand même... Mais bon si tu y tien, je dénombre 3 fautes d'orthographes et une erreur concernant le nombre de lignes (ça fait 5 avec celle qui est sautée

).
Et, je n'ai rien supprimé de ce coté, j'avais même lu les messages et laisser aller sans rien dire.
Sangohan38
Persalteas le 09/02/2011 à 20:29
j'ai remarqué:
au qui devrait être aux
voudrait qui devrait être voudrais
mais la 3e ?Sangohan38 le 09/02/2011 à 20:50
Cherche du coté des accents ...
Et là, tu n'as pas mis de majuscules: SHAME ON YOU!
Sangohan38ld le 10/02/2011 à 10:55
Bon, d'accort, on çà marche pour 27...
Mais simple question d’équité; Tu n'en n'a pas déjà fait un de prgm qui traduit:
N'importe qu'elle base vers n’importe qu'elle base ?
Je cite ton premier message :
"Celui-ci converti n'importe quel nombre entier naturel de n'importe quelle base vers n'importe quelle autre base. (on choisit même si on on veut base 16 normal ou héxadécimal)."
Ah! Oui, J'allais oublier; Je souhaiterais que tu m'explique comment crée des prgm en basique par ta méthode...
Et puis comment tu veux que les nombres soit séparés quand on les entre ou sort en base 26 ?

Persalteas le 10/02/2011 à 14:13
Je ne comprends pas ta question. (tes questions):
Comment créer un programme en basic ? Tu te fiches de moi, là, tous ceux que tu as faits, tu les as faits comment? sur Ti editor?
Deuxième question: séparer les nombres en base 27 (et pas 26): Si je te le dis, autant chercher moi même comment faire ce programme. C'est parce que j'ai la flemme de le faire que je te le demande.
Ah oui, sinon, n'oublie pas que c'est linkakro qui a fait le programme. Je suis fort mais quand même. Moi j'en voudrais un léger qui fait juste la base 27.
Ps pour Sangohan: je n'ai pas trouvé cette faute d'accent... SHAME ON ME! moi qui ai eu 17 au bac de français! tu es sur que c'est bien toi qui as raison sur cet accent ?linkakro le 10/02/2011 à 20:33
pour persalteas :
---
programme simple pour les ti82
exemple base 10 vers base Y=27
Code
Prompt X
0->W
Repeat R=0
W+1->W
ent(X/27)->Q
X-27Q->L1(W
Q->X
End
Et tu lis la liste1 à l'envers.
exemple avec Y=27 vers 10
L'autre sens de conversion nécessite préalablement une saisie dans une liste : c'est quasiment l'élément le plus important parmi toutes les versions que j'ai conçu ou lu.
Voici donc beaucoup plus simple : tu rentres manuellement chaque "chiffre" (de 0 à 26) dans une liste L1 puis :
Code
dim(L1)->D
0->P
For(W,1,D
P+L1(W)*27^(D-W)->P
End
Disp P
---
Les progs de ce message sont relativement faîbles mais compatibles toutes calculatrices.
PS: La dérive du sujet me fait un peu mal aux yeux.
ld le 11/02/2011 à 11:23
Bin voilà ! Tu l'as ta raiponce Persalteas.
Et pis, je l'avais déjà fait ce prgm !
Il ne manquer plus que le moyen de séparer chaque nombres lors de la frape.
D’ailleurs l'idée de linkakro m'as séduit par sa simplicité, c'est con mais fallait y penser !
Je ne vois pas ce qu'il y a d’embêtant de les renter dans une liste...
Bravo linkakro !
pour répondre a Persalteas; Ce que je voulais dire c'est en quoi çà t'aide à programmer de pouvoir convertir en base 27 (3 au cube) pour coder des petits "sprites"

en basic.
Là çà m’échappe !?

Persalteas le 11/02/2011 à 16:21
quand tu as passé des heures à recopier des Ligne(X1,Y1,X2,Y2 pour les graphismes de ton rpg, tu comprends pourquoi tu as envie que ça tienne en 2 ou 3 caractères.
et c'est possible en asm, en axe, en xlib, mais en basic, il faut le programmer.ld le 11/02/2011 à 17:00
Çà à l'air cool! Comment tu fais pour traduire du basique en ASM ?

Persalteas le 11/02/2011 à 22:01
c'est imossible de "traduire". il faut concevoir dès le début. et je ne sais pas programmer en ASM, moi. je connais le basic, le Xlib, et un peu l'axe.ld le 14/02/2011 à 11:04
Et ou es'que je pourrais apprendre a programmer en ASM s'il te plait ?

César a les moyen de te faire parler !

Persalteas le 15/02/2011 à 20:13
essaye
ça, mais c'est un cours d'asm guru.
je sais pas si le "guru" veut dire quelque chose...
ld le 16/02/2011 à 11:48
HOUA !!! C'est génial Persalteas !
Merci mille fois !

C'est exactement ce dont je rêvais !

J'ais plus qu'a le lire et à apprendre !

Persalteas le 16/02/2011 à 15:31
donc si j'ai bien compris, je me fais moi même mon traducteur...
pas grave, je vais y arriver. si le tuto est bien fait, je l'intègre à ma signature.ilyaork le 12/02/2017 à 12:27
Merci beaucoup pour tout ces programmes! Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.