N�o uso portugol.
Mas me parece que a l�gica seria esta;
inicializa uma variavel D com zero
1) Em um laco:
a) le um caractere
b) Se este caracter for:
b1) ENTER: encerra o laco
b2) 0: multiplica a vari�vel D por 2
B3) 1: multiplica a vari�vel D por 2 e SOMA 1
B4) OUTRO: ERRO. n�o � bin�rio
2) Ao sair do laco, imprimir D
Exemplo: usu�rio digitou '1' '0' '1' <ENTER>
- Leu '1': D tem 0. Cai no B3: d*2 = 0. d = d +1 d=1
- Leu '0': D tem 1. Cai no B2 d = d*2 d = 2
- Leu '1': D tem 2. Cai no B3. D = d*2 +1; d = 4 + 1; d=5
- Leu ENTER: d = 5. Caso B1. Encerra
Imprime D que tem 5.
[]'s
Em 11-10-2010 15:30, Gabriel Siccardi escreveu:
> Buenas, pessoal foi solicitado o seguinte:
>
> Elaborar um algoritmo que efetue a leitura de números na base binária
> e retorne o valor decimal correspondente. Se o valor fornecido não
> estiver na base binária, uma informação de erro deverá ser apresentada
> e deverá ser solicitado um novo valor. O algoritmo deve ser executado
> até que o valor fornecido seja zero.
>
>
> Deveria ser utilizado o aprendido em aula na "linguagem" portugol,
> considerando ser o primeiro semestre, antes do exercício,o que vimos
> foi as funções básicas de repetição, se, laço, MOD,
> operadores aritméticos e paramos por ai, nada de array ou coisa assim.
> Resultado foi que ninguém conseguiu, alguém tem uma luz para dar.
>
> abraço
Não uso portugol.
Mas me parece que a lógica seria esta;
inicializa uma variavel D com zero
1) Em um laco:
a) le um caractere
b) Se este caracter for:
b1) ENTER: encerra o laco
b2) 0: multiplica a variável D por 2
B3) 1: multiplica a variável D por 2 e SOMA 1
B4) OUTRO: ERRO. não é binário
2) Ao sair do laco, imprimir D
Exemplo: usuário digitou '1' '0' '1' <ENTER>
- Leu '1': D tem 0. Cai no B3: d*2 = 0. d = d +1 d=1
- Leu '0': D tem 1. Cai no B2 d = d*2 d = 2
- Leu '1': D tem 2. Cai no B3. D = d*2 +1; d = 4 + 1; d=5
- Leu ENTER: d = 5. Caso B1. Encerra
Imprime D que tem 5.
[]'s
Cara, essa eu dou pros meus alunos. Eh justamente pra fazer pensar em lógica, em vez de em termos de recursos da linguagem.
Gabriel, pense o seguinte. Quanto eh o resto da divisão de 10 por 10? E de 11 por 10? Finalmente, se nao for binário, por exemplo, 12, qual o resto deste por 10?
Se mesmo assim nao conseguir, dou mais uma dica.
--
Ok, só que no sistema BInário a base é 2, não 10, como no sistema DECImal. ;-)
> Vou pensar mais um pouco, ainda nada. não no portugol e nesta lógica que
> estamos falando.
> Mas gracias ajuda de todos realmente são muito prestativos e pacienciosos.
É muito difícil escrever um programa desse tipo em português
estruturado porque faltam tipos de dados e operadores para manipulação
de números inteiros. O programa a seguir, em C, lê um número binário e
escreve o decimal correspondente. Ele não usa nenhuma das funções de
formatação de dados da biblioteca padrão do C e trata o caso de o
número ser negativo. Falta-lhe tratamento de erros como o caso de o
usuário fornecer 33 dígitos numa arquitetura de 32 bits. Além disso
ele assume que a representação decimal de um inteiro não terá mais de
20 dígitos. Acho que serve como um bom exemplo, apesar dessas
limitações.
#include <stdio.h>
int main(int argc, char *argv[])
{
int i, n = 0;
char b[20];
while ((i = getchar()) == '0' || i == '1') {
n = (n << 1) | (i - '0');
}
i = 0;
if (n < 0) {
putchar('-');
do {
b[i++] = '0' - (n % 10);
n /= 10;
} while (n != 0);
} else {
do {
b[i++] = (n % 10) + '0';
n /= 10;
} while (n != 0);
}
do {
putchar(b[--i]);
} while (i != 0);
putchar('\n');
return 0;
}
Portugol é o apelido que damos para "Português Estruturado", uma
pseudo-linguagem de programação utilizada para ensinar algoritmos e
programação em si. A ideia é que você se concentre em entender a
lógica e não a linguagem. Tipo, entender como um desvio condicional do
tipo SE funciona, sem se ater a detalhes de que ele é na linguagem A
um "if ( <cond> )" e na outra B um "if <cond> then begin ... end".
Então, mais um pouco para tu pensar:
0 mod 10 = 0 e 0 / 0 = 0 ; sendo que 0 = 0
1 mod 10 = 1 e 1 / 0 = 0 ; sendo que 0 = 0;
10 mod 10 = 0 e 10 / 0 = 1 ; sendo que 1 mod 10 = 1 e 1 / 0 = 0 ;
sendo que 0 = 0
11 mod 10 = 1 e 11 / 0 = 1 ; sendo que 1 mod 10 = 1 e 1 / 0 = 0 ;
sendo que 0 = 0
100 mod 10 = 0 e 100 / 10 = 10 ; sendo que 10 mod 10 = 0 e 10 / 10 = 1
; sendo que 1 mod 10 = 1 e 1 / 0 = 0 ; sendo que 0 = 0
Se ainda assim não pegou, lá vai:
0 = 0*(2^0)
1 = 1*(2^0)
10 = 1*(2^1) + 0*(2^0)
11 = 1*(2^1) + 1*(2^0)
100 = 1*(2^2) + 0*(2^1) + 0*(2^0)
Se eu colocar mais dicas, vai ser mais fácil colocar o código
direto... creio que teu professor quer que tu descubra :p