Considere o programa Java abaixo. import javax.swing.JO...
import javax.swing.JOptionPane;
public class Prova {
public static void main(String[] args) {
int a, b, r;
a = Integer.parseInt(JOptionPane.showInputDialog("Valor de a"));
b = Integer.parseInt(JOptionPane.showInputDialog("Valor de b"));
if (a != 0 && b != 0) {
r = a % b;
while (r != 0) {
a = b;
b = r;
r = a % b;
}
JOptionPane.showMessageDialog(null, b);
} else {
System.out.print("valor inválido");
}
}
}
Se forem lidos os valores 20 e 24 será exibido
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: C - 4
A questão apresenta um trecho de código em Java e pede para determinar a saída do programa após a inserção de dois valores numéricos pelo usuário. O código utiliza a função JOptionPane.showInputDialog para capturar entradas do usuário e a função JOptionPane.showMessageDialog para exibir a saída. O algoritmo implementa o cálculo do Máximo Divisor Comum (MDC) através do algoritmo de Euclides, que é um método antigo e eficiente para calcular o MDC de dois números.
O bloco if verifica se nenhum dos valores inseridos é zero, pois caso algum deles seja zero, o algoritmo não pode prosseguir. Se ambos são diferentes de zero, o código executa o algoritmo de Euclides dentro do bloco while. Este laço se repete enquanto o resto da divisão de a por b (denotado por a % b) for diferente de zero. A cada iteração, a assume o valor de b, e b assume o valor de r (o resto da divisão anterior), e então um novo resto é calculado.
O algoritmo termina quando o resto é zero, o que significa que b é o MDC dos números originais. Por isso, o valor de b é mostrado através de JOptionPane.showMessageDialog. Se os valores inseridos forem 20 e 24, o MDC é 4. Portanto, a saída correta do programa é 4, o que torna a alternativa C a resposta certa.
No contexto dos concursos públicos, é importante que o candidato esteja familiarizado com a sintaxe e as funções básicas da linguagem Java, além de ter uma compreensão sólida de algoritmos clássicos, como o algoritmo de Euclides para o cálculo do MDC, para poder resolver questões como esta.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
// Primeiro trecho
if (a != 0 && b != 0) {
r = a % b;
// a = 20, b = 24, r=20
// Cálculo de r: 20 dividido por 24 é igual a 0 no quociente e 20 de resto, pois % é operador de módulo o qual obtém apenas o resto.
// Segundo trecho, 1ª passada no loop enquanto r diferente de 0
while (r != 0) {
a = b; //a = 24
b = r; //b = 20
r = a % b; //r = 4
// Segundo trecho, 2ª passada no loop enquanto r diferente de 0
while (r != 0) {
a = b; // a = 20
b = r; // b = 4
r = a % b; //r = 0 (opa! O resto de 20 divido por 4 é 0, o loop termina aqui)
// Terceiro trecho
JOptionPane.showMessageDialog(null, b); // b = 4
Como assim 20 % 24 tem resto 20? Não entendi ='/
Isso mesmo Icaro.
Não tem como obter um valor inteiro na divisão de 20 por 24, então no MOD sobra exatamente o valor que se quer dividir, o valor 20
Na dúvida do resultado, use a calculadora do Windows no modo Científica que vai te mostrar exatamente isso
Então toda divisão de um número menor por um maior com o operador de módulo vai retornar o menor?
Neste cenário, sim.
Resumindo...
24 MOD 20 --> Neste caso, existirá a sobra, que será 4
20 MOD 24 --> Neste caso, não existirá a sobra, ficará exatamente o valor 20
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo