Ir para o conteúdo
V3ND3T4

Algoritmo de divisão em Java

Mensagens Recomendadas

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

Editado por Rui Carlos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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);

Editado por Rui Carlos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.