Geral Múltipla Escolha

O fragmento de código seguinte efectua uma pesquisa sequencial para determinar se um dado inteiro, val, está ou não armazenado numa array com elementos a[0] a a[n-1]. Qual das seguintes expressões deverá substituir <expressão>, nesse fragmento, para que o referido algoritmo funcione como previsto?

O fragmento de código seguinte efectua uma pesquisa sequencial para determinar se um dado inteiro, val, está ou não armazenado numa array com elementos a[0] a a[n-1]. Qual das seguintes expressões deverá substituir <expressão>, nesse fragmento, para que o referido algoritmo funcione como previsto?

  1. val != a[i]
  2. i < n && val == a[i]
  3. val != a[i] && i < n
  4. i < n && val != a[i]
  5. i < n || val != a[i]

Resolução completa

Explicação passo a passo

D
Alternativa D

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:

  1. Não termos alcançado o fim do array (limite seguro).
  2. 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çãoProblema Principal
IFalta verificação de limite (i < n). Pode causar acesso inválido à memória se o valor não existir.
IIA 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.
IIIVerifica 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.
VUsa 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.

Tem outra questão para resolver?

Resolver agora com IA

Mais questões de Geral

Ver mais Geral resolvidas

Tem outra questão de Geral?

Cole o enunciado, tire uma foto ou descreva o problema — a IA resolve com explicação completa em segundos.