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:
a) 11010

Passo 1

O enunciado pede que a gente escreva uma função de usuário chamada bindec (em Python, Octave ou Scilab) que receba um vetor b de 's e 's e retorne o valor decimal correspondente. Há ainda uma restrição: não pode haver mais de dígitos \(1\) em b; se houver, exibimos mensagem de erro. Depois, usamos essa função para converter o binário \(11010\).

Passo 2

Definimos a função e fazemos validações:
. Checamos se b é uma lista (ou tupla) de inteiros.
. Verificamos que cada elemento é ou .
. Calculamos \(num_uns =\) sum(b) e, se \(num_uns\) > \(20\), lançamos um erro.

Passo 3

Implementamos o algoritmo de conversão binário decimal. A forma mais direta é percorrer os bits de MSB a LSB e ir acumulando:
def bindec(b):
    # Validação de tipo e conteúdo
    if not isinstance(b, (list, tuple)):
        raise TypeError("b deve ser uma lista ou tupla de \(0\)'s e \(1\)'s")
    if any(bit not in (\(0,1\)) for bit in b):
        raise ValueError("b só pode conter \(0\) e \(1\)")
    # Restrição de no máximo \(20\) dígitos '\(1\)'
    if sum(b) > \(20\):
        raise ValueError("Erro: mais de \(20\) dígitos '\(1\)' não são permitidos")
    # Conversão
    decimal \(=0\)
    for bit in b:
        decimal \(=\) decimal*\(2+\) bit
    return decimal

Passo 4

Usamos a função para converter \(11010\). Primeiro montamos o vetor de bits:
b \(=\) [\(1\), \(1\), \(0\), \(1\), \(0\)]
d \(=\) bindec(b)
print(d)  # isso exibirá o valor decimal
No cálculo manual, equivale a

Resposta

26

Exercícios relacionados