Escreva uma função em Scilab, Octave ou Python definida pelo usuário que converta inteiros escritos na forma binária para a forma decimal. Nomeie a função
, onde o argumento de entrada b é um vetor com 1’s e 0’s que representa o número binário a ser convertido, e o argumento de saída d é um número na forma decimal. 0 maior número que pode ser convertido com a função deverá ser um número binário com no máximo 20 1’s. Se um número maior for inserido para b, a função deverá exibir uma mensagem de erro. Use a função para converter os seguintes números:
c) 111001100011
c) 111001100011
Passo 1
O enunciado pede para a gente criar uma função chamada
que receba um vetor
de zeros e uns (até
dígitos) e retorne seu valor decimal. Se o vetor tiver mais de
elementos, a função deve emitir um erro. Em seguida, usamos essa função para converter o binário
em decimal.
Passo 2
Para resolver, vamos determinar o algoritmo de conversão binário
decimal. Se
(cada
) então o valor decimal é
Além disso, antes de calcular, checamos se
: nesse caso damos erro. Também validamos que cada elemento de
seja
ou
.
Passo 3
Aqui está a implementação em Python:
def bindec(b):
"""
Converte vetor b de \(0\)s e \(1\)s em inteiro decimal.
Erro se len(b) > \(20\) ou se b contiver outro valor que não \(0\)/\(1\).
"""
n \(=\) len(b)
if n > \(20\):
raise ValueError("Erro: vetor binário muito longo (máx. \(20\) dígitos).")
d \(=0\)
for bit in b:
if bit not in (\(0,1\)):
raise ValueError("Erro: vetor deve conter apenas \(0\)s e \(1\)s.")
d \(=\) d*\(2+\) bit
return d
Explicando o código:
- Primeiro checamos
len(b)>\(20\)
. - Depois inicializamos
d \(=0\)
e, para cadabit
emb
, atualizamosd \(=\) d*\(2+\) bit
, o que equivale ao somatório acima. - Se encontrar algo diferente de
ou , levanta erro.
Passo 4
Agora aplicamos a função ao vetor correspondente a “
”. Em Python, podemos escrever:
b \(=\) list(map(int, list("\(111001100011\)")))
d \(=\) bindec(b)
print(d)
Nesse caso e todos os elementos válidos. O cálculo é
b \(=\) [\(1,1\),\(1,0\),\(0,1\),\(1,0\),\(0,0\),\(1,1\)]
, tem
Resposta
O número
em decimal é
.