Jump to content
V3ND3T4

Algoritmo de divisão em Java

Recommended Posts

V3ND3T4

Boas tenho 1programa para fazer e ele tem de se comportar da seguinte forma.

Fazer a divisão inteira de valores positivos (a 32 bits) sem usar a divisão.

O programa deve calcular os produtos das potências de 2 pelo divisor, para produtos inferiores ao dividendo. O quociente é a soma das potências de 2 em que a soma dos seus produtos obtenha o valor mais próximo do dividendo. O resto é a diferença entre o dividendo e a soma dos produtos usados.

exemplo:

java Div

Dividendo? 650

Divisor ? 17

1 x 17 = 17

2 x 17 = 34

4 x 17 = 68

8 x 17 = 136

16 x 17 = 272

32 x 17 = 544

R = 650 -(32*17) -(4*17) -(2*17) = 4

Q = 32 + 4 + 2 = 38

Eu ja tenho uma parte do programa feito so fala a parte do R(resto) e do Q(quociente) q nao estou a conseguir implemntar nem imprimir

quem puder ajudar agradecia----

Edited by Rui Carlos

Share this post


Link to post
Share on other sites
DVD 1993

Estou com a mesma dúvida, peço desculpa se não posso postar isto aqui. Não consigo somar os quocientes e calcular o resto correctamente, dá-me só parte disso.

Share this post


Link to post
Share on other sites
Rui Carlos

Têm que determinar quais das parcelas vão fazer parte da divisão. Então começam a subtrair ao 650 as parcelas, começando pela maior, e verificam se o resultado é maior ou igual a zero. Se for, a parcela é considerada para o resultado.

Inicialmente temos:

R = 650

Q = 0

650 - 544 >= 0 ?

Sim, então subtraímos 544 ao R, e adicionamos 32 ao Q.

R = 650 - 544 = 106

Q = 0 + 32 = 32

106 - 272 >= 0 ?

Não, então o 272 e 16 são para ignorar.

106 - 544 - 136 >= 0 ?

Não, então o 136 e 8 são para ignorar.

106 - 68 >= 0 ?

Sim, então subtraímos 68 ao R, e adicionamos 4 ao Q.

R = 106 - 68 = 38

Q = 0 + 32 + 4 = 36

38 - 34 >= 0 ?

Sim, então subtraímos 34 ao R, e adicionamos 2 ao Q.

R = 38 - 34 = 4

Q = 36 + 2 = 38

4 - 17 >= 0?

Não, então o 17 e 1 são para ignorar.

Ou seja,

R = 4

Q = 38

Share this post


Link to post
Share on other sites
DVD 1993
while( divisor>0 ){            
   potencia = potencia*2;
   producto = potencia*divisor;
   if(producto > dividendo)break;
   resto = dividendo - producto;
   quociente = potencia + potencia;
   soma = producto + producto;
   if(soma>dividendo)break;
   producto1 = producto;
   if(resto<0)break;
   r = resto - potencia;
   q = quociente + quociente;
   if(q*divisor > dividendo)break;
}
System.out.println("Q="+q);
System.out.println("R:"+r);

Edited by Rui Carlos

Share this post


Link to post
Share on other sites
Rui Carlos

A condição de paragem não me parece fazer grande sentido (divisor não é alterado dentro do ciclo).

Parece que estás a aumentar a potencia a cada iteração, quando devias estar a diminuir.

Não percebi o que pretendias fazer no cálculo de q, r, ou quociente.

De um modo geral, parece-me que estás a complicar demasiado o problema.

Sugeria-te que tentasses executar à mão o algoritmo em que estás a pensar (mais ou menos o que fiz acima), e depois tentas implementar a solução.

Share this post


Link to post
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.