Portugol, algoritmo

504 views
Skip to first unread message

Gabriel Siccardi

unread,
Oct 11, 2010, 2:30:12 PM10/11/10
to Tche...@googlegroups.com
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

Elgio Schlemer

unread,
Oct 11, 2010, 2:44:31 PM10/11/10
to tche...@googlegroups.com
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
> --
> Mensagem enviada para <http://groups.google.com/group/tchelinux>.

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

Dante_Zaupa

unread,
Oct 11, 2010, 4:11:27 PM10/11/10
to tche...@googlegroups.com
pra cara número na enésima posição:
2^n * entrada[n]

vai somando tudo, e pronto :D

a parte do algoritmo é contigo. E testar se o número é binário ou não tbm é bem simples, em especial se ele for uma string.

"Dou a espinha do peixe, um graveto e linha, e vc descobre como pescar."

2010/10/11 Elgio Schlemer <elg...@gmail.com>
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

> --
> Mensagem enviada para <http://groups.google.com/group/tchelinux>.

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
--
Mensagem enviada para <http://groups.google.com/group/tchelinux>.



--
Dante

"Realidade, subst: o sonho de um filósofo louco."
                -- Ambrose Bierce, "O Dicionário do Diabo"

Usuário Linux #459228 -- Linux Mint 9

Gabriel Siccardi

unread,
Oct 11, 2010, 4:51:50 PM10/11/10
to tche...@googlegroups.com
não sei se portugol tem como  tratar numero como string e contar numero como .length em java.
e numero deve ser digitado de uma vez e não caracter por caracter.
tipo entre com binario
leia b;
digitar binario 10101110

entao tenho q tratar b como um unico numero e converter.

ainda não consegui

Marcos André Lucas

unread,
Oct 11, 2010, 5:36:28 PM10/11/10
to tche...@googlegroups.com

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.

--

Gabriel Oliveira

unread,
Oct 11, 2010, 6:49:58 PM10/11/10
to tche...@googlegroups.com
Gostei do exercício.... essa "portugol" é algo internacionalmente definido ou é só uma restrição de alguma linguagem, bem informal mesmo ??

Fora isso, venho destacar a imensa paciência de vocês caras.... eu não saberia responder pro meu xará da forma que vocês responderam.... me fizeram pensar um cadim ;)

--

Gabriel Oliveira
Computer Science - UFRGS - Brazil

Gabriel Siccardi

unread,
Oct 11, 2010, 11:29:18 PM10/11/10
to tche...@googlegroups.com
Marcos, até agora tranquilo, 10/10 resto 0 11/10 resto 1.
Agora marcos eu entro com binario 11 (decimal 3) o resto é disso por 10 é 1. 
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.



Em 11 de outubro de 2010 18:36, Marcos André Lucas <mluc...@gmail.com> escreveu:

Carlos A. M. dos Santos

unread,
Oct 12, 2010, 7:51:37 AM10/12/10
to tche...@googlegroups.com
2010/10/12 Gabriel Siccardi <gmsic...@gmail.com>:

> Marcos, até agora tranquilo, 10/10 resto 0 11/10 resto 1.
> Agora marcos eu entro com binario 11 (decimal 3) o resto é disso por 10 é
> 1.

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;
}

Marcos André Lucas

unread,
Oct 12, 2010, 7:31:17 PM10/12/10
to tche...@googlegroups.com
Em 11 de outubro de 2010 19:49, Gabriel Oliveira
<gabriel.p...@gmail.com> escreveu:

Marcos André Lucas

unread,
Oct 12, 2010, 7:33:37 PM10/12/10
to tche...@googlegroups.com
Em 11 de outubro de 2010 19:49, Gabriel Oliveira
<gabriel.p...@gmail.com> escreveu:
> Gostei do exercício.... essa "portugol" é algo internacionalmente definido
> ou é só uma restrição de alguma linguagem, bem informal mesmo ??
>

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".

Marcos André Lucas

unread,
Oct 12, 2010, 7:38:41 PM10/12/10
to tche...@googlegroups.com
Em 12 de outubro de 2010 00:29, Gabriel Siccardi
<gmsic...@gmail.com> escEm 12 de outubro de 2010 00:29, Gabriel
Siccardi <gmsic...@gmail.com> escreveu:

> Marcos, até agora tranquilo, 10/10 resto 0 11/10 resto 1.
> Agora marcos eu entro com binario 11 (decimal 3) o resto é disso por 10 é
> 1.

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

Reply all
Reply to author
Forward
0 new messages