x = [1, 2, 3, 2, 1] m1 = 0 para (i = 1; i < 5; i = i + 1) m2 = i se (x[m1] < x[m2]) m1 = m2 fim se fim para imprime(m1) No pseudocódigo precedente, a função imprime(m1) mostrará, em tela, o valor
- A)0.
Errada, porque o índice 0 é superado logo na primeira comparação pelo valor 2.
- B)1.
Errada, porque o índice 1 também é superado quando o algoritmo encontra o valor 3.
- C)2.
Certa, pois o maior elemento do vetor está na posição 2 e é essa posição que será impressa.
- D)3.
Errada, porque a posição 3 contém 2, que não supera o maior valor encontrado antes.
- E)4.
Errada, porque a posição 4 contém 1 e não altera o índice do maior valor.
Gabarito: C
Essa questão cobra uma leitura simples de laço de repetição com comparação. O vetor x guarda os valores [1, 2, 3, 2, 1] e a variável m1 começa apontando para a posição 0, isto é, para o primeiro elemento. A cada volta do laço, o algoritmo coloca i em m2 e compara x[m1] com x[m2]. Se o valor novo for maior, m1 passa a apontar para essa nova posição. Na prática, o algoritmo está procurando o maior valor do vetor, guardando o índice dele. Primeiro, com i = 1, compara 1 com 2 e atualiza m1 para 1. Depois, com i = 2, compara 2 com 3 e atualiza m1 para 2. Nas próximas voltas, os valores 2 e 1 não superam 3, então nada muda. No fim, m1 continua valendo 2. Como o vetor usa indexação começando em 0, essa posição é a terceira casa do vetor, onde está o valor 3. Por isso, a função imprime(m1) mostra 2. A ideia aqui é bem clássica em algoritmos: varrer a estrutura inteira mantendo o melhor candidato até o momento. É o tipo de raciocínio que aparece muito em questões de máximo, mínimo e busca linear.