Considere o programa Java abaixo.      import javax.swing.JO...

Próximas questões
Com base no mesmo assunto
Q583601 Programação
Considere o programa Java abaixo.

      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 
Alternativas

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