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:
111001100011
111001100011
Passo 1
O enunciado pede para criar uma função de nome ou
) e retorne seu valor na base decimal. Além disso, se dígitos, a função deve emitir um erro. Vamos implementar isso em Python e depois converter o binário
bindec
que receba um vetor b
contendo apenas dígitos binários (
b
tiver mais de
\(111001100011\)
.Passo 2
Primeiro, precisamos validar a entrada:
- Verificar se o comprimento de
b
é no máximo. - Verificar se cada elemento de
b
éou .
Se algum desses testes falhar, lançamos uma exceção.
Passo 3
Para converter de binário para decimal, podemos percorrer os bits de
b
da esquerda para a direita acumulando o valor decimal numa variável d
. A cada passo fazemosEsse método usa o fato de que, ao deslocar um número binário à esquerda, multiplicamos seu valor por
, e então somamos o bit atual.
Passo 4
Implementação em Python:
def bindec(b):
# Verifica número de bits
if len(b) > \(20\):
raise ValueError("Erro: vetor binário com mais de \(20\) bits não suportado")
# Verifica dígitos binários
for bit in b:
if bit not in (\(0\), \(1\)):
raise ValueError("Erro: vetor deve conter apenas \(0\) e \(1\)")
# Conversão
d \(=0\)
for bit in b:
d \(=\) d*\(2+\) bit
return d
Passo 5
Agora aplicamos a função ao vetor que representa
\(111001100011\)
:b \(=\) [\(1,1\),\(1,0\),\(0,1\),\(1,0\),\(0,0\),\(1,1\)]
d \(=\) bindec(b)
print(d) # imprime \(3683\)