Page 1 sur 1
[RESOLU] Base 8 - Octal
Publié : mer. 20/déc./2006 11:27
par Progi1984
Bonjour, je suis à la recherche de deux fonctions mathématiques :
OctToDec : transforme une string (contenant le nombre décimal en base

en nombre décimal
DecToOct : transforme un nombre décimal en string (contenant le nombre décimal en base
Je n'ai pas trouvé d'algo non plus donc j'en appelle à vous
Merci d'avance !
Publié : mer. 20/déc./2006 14:38
par Mwoua
Code : Tout sélectionner
Procedure OctToDec(o$)
d=0
L=Len(o$)
For i=1 To L
d=d+Val(Mid(o$,L-i+1,1))*Pow(8,i-1)
Next i
ProcedureReturn d
EndProcedure
Procedure DecToOct(d)
o$=""
Repeat
o$=Str(d%8)+o$
d=Int(d/8)
Until d<8
o$=Str(d)+o$
ProcedureReturn Val(o$)
EndProcedure
Debug OctToDec("17")
Debug DecToOct(96)
Et voilà !
Publié : mer. 20/déc./2006 15:39
par Progi1984
Nickel ! Merci Mwoua !
Publié : mer. 20/déc./2006 15:45
par Progi1984
Encore mieux :
Code : Tout sélectionner
Procedure OctToDec(o$)
d=0
L=Len(o$)
For i=1 To L
d=d+Val(Mid(o$,L-i+1,1))*Pow(8,i-1)
Next i
ProcedureReturn d
EndProcedure
Procedure DecToOct(d)
o$=""
Repeat
o$=Str(d%8)+o$
d=Int(d/8)
Until d<8
o$=Str(d)+o$
ProcedureReturn Val(o$)
EndProcedure
Procedure BaseToDec(o$, base.l)
d=0
L=Len(o$)
For i=1 To L
d=d+Val(Mid(o$,L-i+1,1))*Pow(base,i-1)
Next i
ProcedureReturn d
EndProcedure
Procedure DecToBase(d, base.l)
o$=""
Repeat
o$=Str(d%base)+o$
d=Int(d/base)
Until d<base
o$=Str(d)+o$
ProcedureReturn Val(o$)
EndProcedure
Debug OctToDec("4610")
Debug DecToOct(2440)
Debug BaseToDec("4610",8)
Debug DecToBase(2440,8)
Publié : mer. 20/déc./2006 16:13
par Mwoua
J'ai failli faire un eprocedure BaseToBase :
et puis je me suis dit que comme tu voulais travailler juste en octal et décimal...
Tu l'as fait (ou presque), c'est cool !

Publié : mer. 20/déc./2006 16:59
par Progi1984
Je te laisse faire

Publié : mer. 20/déc./2006 17:07
par Mwoua
Uniquement si ça t'interresse vraiment
Aller, hop :
Code : Tout sélectionner
Procedure.s BaseToBase(n$,base1,base2)
d=0
L=Len(n$)
For i=1 To L
C$=Mid(n$,L-i+1,1)
If Val(C$)=0 And C$<>"0" ; caractère alphabétique
C$=Str(Asc(C$)-55)
EndIf
If Val(C$)>=base1 : MessageRequester("Conversion Base à Base","Problème : un chiffre du nombre à convertir est incorrect", #PB_MessageRequester_Ok ) : End : EndIf
d=d+Val(C$)*Pow(base1,i-1)
Next i
n$=""
Repeat
C$=Str(d%base2)
If Val(C$)>=10 ; caractère alphabétique
C$=Chr(55+Val(C$))
EndIf
n$=C$+n$
d=Int(d/base2)
Until d<base2
If d<>0 : n$=Str(d)+n$ : EndIf
ProcedureReturn n$
EndProcedure
Debug BaseToBase("F0",16,2)
En fait : conversion base1 -> dec puis dec -> base2