Jump to content

Binários para decimais


Triple

Recommended Posts

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

Link to comment
Share on other 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?

Desaparecido.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.