Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Matemática por trás do módulo %

Estou tentando entender quando que o cálculo chega a 0. Na descrição do exercício é dito:

utilizar ~numero % 3~ para descobrir o resto da divisão de um número por 3 (o operador % se chama de módulo). Se o resto for zero, ele é divisível por 3.

E também já li a resposta do Tiago Sartori no fórum:

O operador % extrai o resto da divisão (módulo). A lógica que você colocou vai imprimir todos os números de 1 a 100 cujo resultado da divisão por 3 seja igual a 0: 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99

Mas ainda não vi a lógica nisso. 1/3 não é 0. 2/3 não é 0. 99/3 não é 0...

2 respostas
solução!

André, pelo o que eu entendi só vai imprimir os números que são divisores por 3, ou seja, o resto da divisão vai ser 0. 1/3 -> O resto da divisão não vai ser zero (logo o número 1 não vai ser impresso) 2/3 -> O resto da divisão não vai ser zero (logo o número 2 não vai ser impresso) 99/3 -> O resto da divisão vai ser zero ( logo é impresso o número 99)

Exato Vítor. Mas André, veja: o operador % retorna o resto da divisão e quando o resto da divisão é 0 significa que a divisão é exata e, assim, significa que o dividendo é múltiplo do divisor. Vamos a um exemplo pra ficar mais claro. 10 / 2 = 5 e resto = 0, neste exemplo 10 é o dividendo, 2 o divisor, 5 o quociente e 0 o resto. Neste caso, como o resto foi 0, significa que 10 (dividendo) é múltiplo de 2 (divisor).

Trazendo para o exercício: 0/3 = 0, (% = 0), logo é múltiplo; IMPRIME; incrementa; 1/3 > 0, (% != 0), logo não é múltiplo; logo não imprime; incrementa; 2/3 >0, (% != 0), logo não é múltiplo; logo não imprime; incrementa; 3/3 = 1, (% = 0), logo é múltiplo; IMPRIME; incrementa; 4/3 >1, (% != 0), logo não é múltiplo; logo não imprime; incrementa; 5/3>1, (% != 0), logo não é múltiplo; logo não imprime; incrementa; 6/3=2, (%=0), logo é múltiplo; IMPRIME; incrementa; ... 99/3 = 33, (% = 0), logo é múltiplo; IMPRIME; incrementa; 100/3 > 1, (% !=0), logo não é múltiplo; logo não imprime; incrementa; alcança a condição de parada e o laço termina.

Espero ter ajudado.