associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

Diferenças para "ConversordeBases"

Diferenças entre as versões de 3 e 8 (5 versões de distância)
Revisão 3e 2006-08-22 03:51:01
Tamanho: 1832
Comentário:
Revisão 8e 2009-11-17 09:17:50
Tamanho: 4204
Editor: newacct
Comentário:
Deleções são marcadas assim. Adições são marcadas assim.
Linha 1: Linha 1:
São duas funções simples para conversão de números inteiros de qualquer base para qualquer base. São 3 funções simples para conversão de números inteiros de qualquer base para qualquer base.
Linha 3: Linha 3:
1- any2dec(any,base) - Esta função converte qualquer número da base 2 a 36 para qualquer base. Onde '''any''' é o número a ser convertido, e '''base''' é o valor de sua base (de 2 a 36 só considerando inteiros). 1- any2dec(num_original,base_original) - Esta função converte qualquer número da base 2 a 36 para qualquer base. Onde '''num_original''' é o número a ser convertido, e '''base_original''' é o valor de sua base (de 2 a 36 só considerando inteiros).
Linha 5: Linha 5:
2- dec2any(dec,base) = Esta função converte qualquer número decimal para qualquer base de 2 a 36. Onde '''dec''' é o número decimal a ser convertido, e '''base''' é a base para qual se deseja converter o número (de 2 a 36 só considerando inteiros.) 2- dec2any(dec,base_final) = Esta função converte qualquer número decimal para qualquer base de 2 a 36. Onde '''dec''' é o número decimal a ser convertido, e '''base_final''' é a base para qual se deseja converter o número (base_final: de 2 a 36 só considerando inteiros.)
Linha 7: Linha 7:
OBS: tanto '''any''' quanto '''dec''' podem ser passados a função como string, ou inteiros, porém '''base''' deve ser sempre um inteiro. 3- any2any(num_original,base_original,base_final) = aglutina as duas funções acima para conversão direta de um número '''num_original''' de base '''base_original''' para uma determinada '''base_final'''.

OBS: tanto '''num_original''' quanto '''dec''' podem ser passados a função como string, ou inteiros, porém '''base''' deve ser sempre um inteiro.
Linha 11: Linha 13:
OBS3: As bases '''base_original''' e '''base_final''' são convertidas para inteiro

Abaixo temos o código desta biblioteca que chamo de '''base_convert.py'''.
Linha 16: Linha 21:
import string # -*- coding: cp1252 -*-
# Conversão des:
#
# Por Alexandre Martins Klostermann
# alexandre.klostermann@gmail.com
#
# any2dec: Converte o numero "any" na base "base"
# para decimal, retornando "dec"
#
# dec2any: Converte um numero decimal "dec" para a
# base "base" retornando o valor convertido
# em "any"
Linha 18: Linha 34:
def any2dec(any,base):
    any = str(any)
def any2dec(num_original,base_original):
    num_original = str(num_original)
    base_original = int(base_original)
Linha 21: Linha 38:
    x = 0
Linha 23: Linha 39:
    any_temp = list(any)
    any_temp.reverse()
    for i in any_temp:
        dec = dec + ( (dic.index(i)) * (base**(x)))
        x = x+1
    dec_temp = list(num_original)
    dec_temp.reverse()
    for x,i in enumerate(dec_temp):
        dec += dic.index(i) * base_original**(x)
Linha 31: Linha 46:
def dec2any(dec,base): def dec2any(dec,base_final):
    base_final = int(base_final)
Linha 34: Linha 50:
    any_temp = []
    any = ''
    numero_final_temp = []
    numero_final = ''
Linha 37: Linha 53:
        temp_any = dec%base
        any_temp.append(temp_any)
        if  ((int(dec/base)) == 0):
        temp_numero_final = dec%base_final
        numero_final_temp.append(temp_numero_final)
        if int(dec/base_final) == 0:
Linha 41: Linha 57:
        dec = int(dec/base)
    any_temp.reverse()
    for i in any_temp:
        any = any + (dic[i])
    return any
        dec = int(dec/base_final)
    numero_final_temp.reverse()
    for i in numero_final_temp:
        numero_final += dic[i]
    return numero_final

def any2any(num_original,base_original,base_final):
    num_dec = any2dec(num_original,base_original)
    num_final = dec2any(num_dec,base_final)
    return num_final
Linha 48: Linha 70:
= Aplicado em Modo Gráfico =

Usando o Eagle temos o mesmo programa em modo gráfico.

OBS: necessita pyGTK, pyCairo, Eagle e outros.

{{{
#!python
# -*- coding: cp1252 -*-
#Conversor de Bases Grafico.
from eagle import *
import base_convert

def executar(app, wid):
    num_original= app["valor_inicial"]
    base_original= app["base_inicial"]
    base_final= app["base_final"]
    app["valor_final"] = base_convert.any2any(num_original,base_original,base_final)

    
def limpar(app, wid):
    app["valor_inicial"] = ""
    app["valor_final"] = ""

App(
    title="Conversor de Bases",
    window_size = (250,250),
    center=(
        Entry(id="valor_inicial", label="Numero Original:", editable=True, persistent=True),
        UIntSpin(id="base_inicial", label="Base Original:", value=2, min=2, max=36, step=1),
        UIntSpin(id="base_final", label="Base Desejada:", value=2, min=2, max=36, step=1),
        Entry(id="valor_final", label="Valor Final: ", editable=False, persistent=True),
        ),
    bottom=(
        Button(id="bCalcular", label="Calcular", callback=executar),
        Button(id="bLimpar", label="Limpar", callback=limpar),
        ),
)

run()
}}}

São 3 funções simples para conversão de números inteiros de qualquer base para qualquer base.

1- any2dec(num_original,base_original) - Esta função converte qualquer número da base 2 a 36 para qualquer base. Onde num_original é o número a ser convertido, e base_original é o valor de sua base (de 2 a 36 só considerando inteiros).

2- dec2any(dec,base_final) = Esta função converte qualquer número decimal para qualquer base de 2 a 36. Onde dec é o número decimal a ser convertido, e base_final é a base para qual se deseja converter o número (base_final: de 2 a 36 só considerando inteiros.)

3- any2any(num_original,base_original,base_final) = aglutina as duas funções acima para conversão direta de um número num_original de base base_original para uma determinada base_final.

OBS: tanto num_original quanto dec podem ser passados a função como string, ou inteiros, porém base deve ser sempre um inteiro.

OBS2:: Ambas as funções retornam sempre strings.

OBS3: As bases base_original e base_final são convertidas para inteiro

Abaixo temos o código desta biblioteca que chamo de base_convert.py.

Código

   1 # -*- coding: cp1252 -*-
   2 # Conversão des:
   3 #
   4 # Por Alexandre Martins Klostermann
   5 #     alexandre.klostermann@gmail.com
   6 #
   7 #   any2dec: Converte o numero "any" na base "base"
   8 #           para decimal, retornando "dec"
   9 #
  10 #   dec2any: Converte um numero decimal "dec" para a
  11 #           base "base" retornando o valor convertido
  12 #           em "any"
  13 
  14 def any2dec(num_original,base_original):
  15     num_original = str(num_original)
  16     base_original = int(base_original)
  17     dic = ['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']
  18     dec = 0
  19     dec_temp = list(num_original)
  20     dec_temp.reverse()
  21     for x,i in enumerate(dec_temp):
  22         dec += dic.index(i) * base_original**(x)
  23     return str(dec)
  24 
  25 
  26 def dec2any(dec,base_final):
  27     base_final = int(base_final)
  28     dec = int(dec)
  29     dic = ['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']
  30     numero_final_temp = []
  31     numero_final = ''
  32     while True:
  33         temp_numero_final = dec%base_final
  34         numero_final_temp.append(temp_numero_final)
  35         if int(dec/base_final) == 0:
  36             break
  37         dec = int(dec/base_final)
  38     numero_final_temp.reverse()
  39     for i in numero_final_temp:
  40         numero_final += dic[i]     
  41     return numero_final
  42 
  43 def any2any(num_original,base_original,base_final):
  44     num_dec = any2dec(num_original,base_original)
  45     num_final = dec2any(num_dec,base_final)
  46     return num_final

Aplicado em Modo Gráfico

Usando o Eagle temos o mesmo programa em modo gráfico.

OBS: necessita pyGTK, pyCairo, Eagle e outros.

   1 # -*- coding: cp1252 -*-
   2 #Conversor de Bases Grafico.
   3 from eagle import *
   4 import base_convert
   5 
   6 def executar(app, wid):
   7     num_original= app["valor_inicial"]
   8     base_original= app["base_inicial"]
   9     base_final= app["base_final"]
  10     app["valor_final"] = base_convert.any2any(num_original,base_original,base_final)
  11 
  12     
  13 def limpar(app, wid):
  14     app["valor_inicial"] = ""
  15     app["valor_final"] = ""
  16 
  17 App(
  18     title="Conversor de Bases",
  19     window_size = (250,250),
  20     center=(
  21         Entry(id="valor_inicial", label="Numero Original:", editable=True, persistent=True),
  22         UIntSpin(id="base_inicial", label="Base Original:", value=2, min=2, max=36, step=1),
  23         UIntSpin(id="base_final", label="Base Desejada:", value=2, min=2, max=36, step=1),
  24         Entry(id="valor_final", label="Valor Final: ", editable=False, persistent=True),
  25         ),
  26     bottom=(
  27         Button(id="bCalcular", label="Calcular", callback=executar),
  28         Button(id="bLimpar", label="Limpar", callback=limpar),
  29         ),
  30 )
  31 
  32 run()

por AlexandreKlostermann