Crie um código que pergunte ao usuário um número, em seguida se o número informado é binário ou decimal, então realize a conversão para a base oposta a que o número informado se encontra. O código deve trabalhar tanto com a forma inteira quanto com a forma fracionária dos números informados.
Passo 1
Beleza, o exercício pede um programinha que pergunte ao usuário um número e diga se ele é binário ou decimal. Aí a ideia é converter esse número para a outra base (binária↔decimal), funcionando tanto se tiver só parte inteira como se tiver parte fracionária.
Conteúdo: sistemas de numeração, conversão de bases, manipulação de strings e laços em programação. Vamos precisar de:
Conteúdo: sistemas de numeração, conversão de bases, manipulação de strings e laços em programação. Vamos precisar de:
- Separar parte inteira e fracionária (string split).
- Converter de decimal pra binário (divisões sucessivas e multiplicações pra parte fracionária).
- Converter de binário pra decimal (soma das potências de 2).
Passo 2
Primeiro a gente lê do usuário:
- O número como string (pra manter o ponto ‘.’, se existir).
- A base atual (1 para binário, 2 para decimal, por exemplo).
Depois a gente faznum_str.split('.')
pra pegar uma lista com[parte_inteira, parte_fracionaria]
. Se não tiver ponto, a lista fica com só a parte inteira e a fracionária a gente assume como"0"
.
Passo 3
Agora, se o usuário disse que o número é binário, precisamos transformar cada parte em decimal:
- Para a parte inteira usamos
onde os dígitossão 0 ou 1 e é o comprimento da string.
- Para a parte fracionária:
com sendo o tamanho da parte após o ponto.
Somando, temos o valor decimal.
Passo 4
Se o usuário disse que o número é decimal, viramos o processo ao contrário:
- Parte inteira pra binário: repetimos divisões por 2 e guardamos os restos, depois lemos de trás pra frente.
- Parte fracionária pra binário: multiplicamos por 2 várias vezes; a parte inteira de cada produto é o próximo bit, e continuamos com o resto fracionário.
A gente pode controlar quantas casas binárias de fração gerar (por exemplo, até 10 ou parar quando a fração virar zero).
Passo 5
Juntamos tudo num código em Python, deixando cada etapa comentada e com funções claras para converter cada parte. No final, imprimimos o resultado na base oposta.
Resposta
def bin_int_to_dec(s):
# s: '1011' -> 11
valor = 0
k = len(s)
for i, dig in enumerate(s):
valor += int(dig) * 2**(k-1-i)
return valor
def bin_frac_to_dec(s):
# s: '101' -> 1/2 + 0/4 + 1/8 = 0.625
valor = 0.0
for i, dig in enumerate(s, start=1):
valor += int(dig) * 2**(-i)
return valor
def dec_int_to_bin(n):
# n: 13 -> '1101'
if n == 0:
return '0'
bits = []
while n > 0:
bits.append(str(n % 2))
n //= 2
return ''.join(reversed(bits))
def dec_frac_to_bin(f, casas=10):
# f: 0.625 -> '101'
bits = []
count = 0
while f > 0 and count < casas:
f *= 2
bit = int(f)
bits.append(str(bit))
f -= bit
count += 1
return ''.join(bits) or '0'
def converter(num_str, base):
partes = num_str.split('.')
inte = partes[0]
frac = partes[1] if len(partes) > 1 else '0'
if base == 1: # binário -> decimal
dec_int = bin_int_to_dec(inte)
dec_frac = bin_frac_to_dec(frac)
return str(dec_int + dec_frac)
else: # base == 2, decimal -> binário
dec_int = int(inte)
dec_frac = float('0.' + frac) if frac != '0' else 0.0
bin_int = dec_int_to_bin(dec_int)
bin_frac = dec_frac_to_bin(dec_frac)
return bin_int + '.' + bin_frac
# Programa principal
num_str = input("Digite um número (use '.' para a parte fracionária): ")
base = int(input("É binário [1] ou decimal [2]? "))
resultado = converter(num_str, base)
print("Resultado na outra base:", resultado)