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 d=bindec(b), 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

Passo 1

O enunciado pede para criar uma função de nome bindec que receba um vetor b contendo apenas dígitos binários ( ou ) e retorne seu valor na base decimal. Além disso, se b tiver mais de dígitos, a função deve emitir um erro. Vamos implementar isso em Python e depois converter o binário \(111001100011\).

Passo 2

Primeiro, precisamos validar a entrada:
  • Verificar se o comprimento de b é no máximo 20.
  • Verificar se cada elemento de b é 0 ou 1.
    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 fazemos
d 2 cdot d + bit
Esse método usa o fato de que, ao deslocar um número binário à esquerda, multiplicamos seu valor por 2, 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\)

Resposta

d = 3683

Exercícios relacionados