Multi_base

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Multi_base

Message par Backup »

par curiosité intellectuel , j'ai essayé de le souvenir comment on converti un nombre Decimal en Base 2
puis ensuite en base X

je me suis bien sur aidé d'internet pour me remettre a jour,

j'ai pondu ce petit code , qui je pense fonctionne pas mal
il a la particularité de ne pas utiliser les Puissances pour obtenir le resultat :)
il doit tenir jusqu'a la base 26 ??
de toute façon apres la base 26 , je ne vois pas comment on ecrit le nombre :lol:
en principe le systeme reste le meme quelque soit la base utilisé , donc "no limite" :)

voici le code :

Code : Tout sélectionner

; l'algo est basé sur le principe suivant :
; pour le nombre 94 en base 2 
; 94/2 = 0 reste 47
; 47/2 = 1 reste 23
; 23/2 = 1 reste 11
; 11/2 = 1 reste 5
; 5/2 = 1 reste 2
; 2/2 = 0 reste 1 
; donc : nombre/base .... on recup le resultat qu'on affiche, puis on prends le reste de la division comme nouveau nombre !

Declare.s Base(nombre,Base)


nombre=194
Debug "la valeur 194 en Decimal"
base=8 ; en Octal
debug  "en octal :"+Base(nombre,Base)
nombre=194
base=16 ; en Hexa
debug   "en Hexadecimal :"+Base(nombre,Base)
nombre=194
base=2 ; en Binaire
debug   "en Binaire:"+Base(nombre,Base)

nombre=194
base=20 ; en base 20 !!!! 
debug   "en base 20:"+Base(nombre,Base)


calldebugger


Procedure.s Base(nombre,Base)
	; By Dobro
	string_ref.s="0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"
	while nombre>0
		reste=Mod(nombre,base)
		Resultat.s=Resultat.s+ StringField(string_ref.s,Reste+1,",")  ;;str(reste)
		nombre=nombre/base
	Wend
	ProcedureReturn ReverseString(Resultat.s)
Endprocedure; EPB