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:
b) 10101100111
b) 10101100111
Passo 1
O enunciado pede uma função de usuário chamada e
representando um número binário e retorne seu valor decimal dígitos (bits); se ultrapassar, a função deve emitir uma mensagem de erro. Para converter, usamos a ideia de que, se
bindec(b)
(em Python, Octave ou Scilab) que receba um vetor b
de dígitos
d
. Há uma restrição: b
deve ter no máximo
onde cada
e
, então
Passo 2
Vamos implementar essa função em Python, com verificação do tamanho de
b
e cálculo do somatório acima.def bindec(b):
# Verifica se b tem mais de \(20\) bits
if len(b) > \(20\):
print("Erro: vetor b excede \(20\) bits.")
return None
# Converte bit a bit usando potência de \(2\)
d \(=0\)
n \(=\) len(b)
for i in range(n):
if b[i] not in (\(0,1\)):
print("Erro: vetor b deve conter apenas \(0\) ou \(1\).")
return None
d \(+=\) b[i] * \(2\)**(n-\(1\)-i)
return d
Passo 3
Agora aplicamos . Em Python escrevemos:
bindec
ao vetor que representa o número binário
b \(=\) [\(1,0\),\(1,0\),\(1,1\),\(0,0\),\(1,1\),\(1\)]
resultado \(=\) bindec(b)
print(resultado) # Deve mostrar o valor decimal
O cálculo manual é