• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Triple

Binários para decimais

5 mensagens neste tópico

Boas,

Eu estou a criar um programa em pascal que converte binários em decimais e etc, mas surgiu um problema, vou deixar aqui o procedimento:

Procedure BINDEC;
var N,R,D,Q,Z,P1,P2,i:integer;
T:real;
begin
Writeln('Escreve um numero');
Readln(N);
Q:=0;
Repeat
Q:=Q+1;
if EXP(LN(10)*Q)>N
Then Z:=1
Else
Z:=0;
Until Z=1;
Repeat
Q:=Q-1;
P1:=1;
P2:=1;
For i:=1 To Q Do
P1:=P1*10;
For i:=0 to Q do
P2:=P2*2;
D:=N DIV P1*P2;
R:=N MOD P1;
N:=R;
T:=T+D;
Until Q=1;
Writeln(T);
end;

Eu insiro 10 e em vez de devolver o resultado 2 diz que estou a dividir por 0 na linha D:=N DIV P1*P2;

Alguem me diz o que estou a fazer mal?

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Também não percebi porque é que te deu esse erro. Mas realmente esse código está um pouco confuso:

- há alguma razão em especial para usares EXP(LN(10)*Q) em vez de POWER(10,Q); ?

- naquele primeiro bloco

Repeat
Q:=Q+1;
if EXP(LN(10)*Q)>N
Then Z:=1
Else
	Z:=0;
Until Z=1;

porque não fazes directamente

Repeat
Q:=Q+1;
until POWER(10,Q)>N;

- porque não substituir

For i:=1 To Q Do
P1:=P1*10;

por

P1 = POWER(10,Q);

e

For i:=0 to Q do
P2:=P2*2;

por

P2 = POWER(2,Q+1);

- e finalmente, cá em baixo, porque não substituis

D:=N DIV P1*P2;
R:=N MOD P1;
N:=R;
T:=T+D;

directamente com

T:=T+(N DIV (P1*P2);
N:=N MOD P1;

Vou testar o teu código para ver se apanho o erro. Estás a utilizar que compilador/IDE?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Já arranjei outro método mas gostava de saber porque raio me dá este erro...

isso do power n funciona eu testei mesmo agr e deu "Unknow identifier", estou a usar o turbo pascal.

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Penso que o unknown identifier é falta de iniciação de variáveis!

Conselho, não uses letras, uma nomes! Hoje percebes o programa, amanhã já não, sem contar que se torna super confuso!

N=Numero

Q=ConversaoBinario

etc...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora