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:
b) 10101100111

Passo 1

O enunciado pede uma função de usuário chamada bindec(b) (em Python, Octave ou Scilab) que receba um vetor b de dígitos 0 e 1 representando um número binário e retorne seu valor decimal d. Há uma restrição: b deve ter no máximo 20 dígitos (bits); se ultrapassar, a função deve emitir uma mensagem de erro. Para converter, usamos a ideia de que, se
b = [bn-1,bn-2,dots,b1,b0]
onde cada biin0,1 e n = <=n(b), então
d = sumi=0^n-1 bi,2^,n-1-i

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 bindec ao vetor que representa o número binário . Em Python escrevemos:
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 é

Resposta

1383

Exercícios relacionados