Alternativa D (Corresponde à opção IV)
O código apresentado implementa um algoritmo de pesquisa sequencial. O objetivo é encontrar um valor inteiro val dentro de um array a com tamanho n.
Para que o algoritmo funcione corretamente, o laço while deve continuar executando enquanto duas condições forem verdadeiras simultaneamente:
- Não termos alcançado o fim do array (limite seguro).
- O valor procurado ainda não ter sido encontrado na posição atual (critério de busca).
Análise da Lógica
A condição correta deve garantir segurança no acesso à memória e a lógica de parada adequada.
- Segurança de Memória (
i < n): Antes de acessar a[i], devemos garantir que i está dentro dos limites válidos (de 0 a n-1). Se i atingir n, o array foi percorrido todo. - Lógica de Parada (
val != a[i]): Enquanto o elemento atual não for igual ao valor buscado, continuamos procurando. Assim que val == a[i], encontramos o item e paramos.
Por que a alternativa IV é a correta?
A expressão i < n && val != a[i] (Opção IV) resolve o problema considerando a avaliação preguiçosa (short-circuit evaluation) comum em linguagens como C, Java ou Python:
- Passo 1: Verifica-se
i < n. Se for falso (chegamos ao fim), a expressão inteira é falsa imediatamente. O segundo termo val != a[i] não é avaliado, evitando erro de índice fora dos limites. - Passo 2: Se
i < n for verdadeiro, verifica-se val != a[i]. Se o valor ainda não for encontrado, o laço continua e incrementa i.
Por que as outras estão erradas?
| Opção | Problema Principal |
|---|
| I | Falta verificação de limite (i < n). Pode causar acesso inválido à memória se o valor não existir. |
| II | A condição val == a[i] faria o laço parar assim que o valor fosse encontrado, mas também pararia se o primeiro elemento não correspondesse, retornando índices incorretos. |
| III | Verifica val != a[i] antes de i < n. Se i for igual a n, tenta acessar a[n] antes de saber se é válido, causando erro de execução. |
| V | Usa o operador ` | | ` (OU). O laço poderia continuar indefinidamente mesmo após o fim do array, dependendo do resultado da comparação. |
Portanto, a única forma segura e lógica de realizar a pesquisa sequencial neste contexto é utilizando a combinação de limites e comparação de valores na ordem correta.
Alternativa IV.