Questão nº 43
Questão de Tecnologia da Informação · FCC TRF4 2019 (nº 43)
Considere o fragmento JavaScript abaixo.
<script>
var v = [1, 20, 50, 67, 89, 100];
var n=v.length;
var x = 89;
var j = 0;
while (__I__)
++j;
document.write(j);
</script>
Para que ao executar o script seja mostrada a posição (índice) no vetor v onde se encontra o número indicado na variável x, a lacuna I deve ser corretamente preenchida por
- A`j <= n && v[j] <= x`
- B`j < n || v[j] < x`
- C`j < n && v[j] < x` (alternativa correta)
- D`j < n & v[j] = x`
- E`j < n && v[j] > x`
Resposta comentada
Gabarito Alternativa C
Para encontrar a posição (índice) de um número em um vetor (array) ordenado usando um laço `while`, precisamos que o laço continue enquanto duas condições forem verdadeiras: 1) o índice atual não ultrapassou o tamanho do vetor, e 2) o elemento atual do vetor é menor que o número que estamos procurando.
(A) Incorreta: `j <= n && v[j] <= x`. A condição `v[j] <= x` faz com que o laço continue mesmo quando `v[j]` já é igual a `x`. No exemplo, quando `j` for `4` e `v[4]` for `89`, a condição `89 <= 89` ainda será verdadeira, o que fará `j` ser incrementado para `5`. O resultado seria `5`, não `4`.
(B) Incorreta: `j < n || v[j] < x`. O operador `||` (OU) faz com que o laço continue se qualquer uma das condições for verdadeira. Como `j < n` será verdadeiro para a maior parte da iteração do vetor, o laço continuaria até o final do vetor (e potencialmente além, se não fosse por `j < n` eventualmente se tornar falso), ignorando a condição `v[j] < x` para parar. Isso resultaria em `j` sendo `6` (o tamanho do vetor) ou um erro de acesso a índice inválido.
(C) Correta: `j < n && v[j] < x`. Esta é a condição correta. O laço continua enquanto `j` for um índice válido (`j < n`) E o valor em `v[j]` for estritamente menor que `x` (`v[j] < x`). Quando `j` chega a `4`, `v[4]` é `89`. A condição `v[4] < x` (ou seja, `89 < 89`) se torna falsa, e o laço para, deixando `j` com o valor `4`, que é o índice correto.
(D) Incorreta: `j < n & v[j] = x`. Contém dois erros: `&` é um operador bit a bit, não o operador lógico `&&` (E). Além disso, `v[j] = x` é uma atribuição, não uma comparação. Isso alteraria o valor do vetor e causaria um comportamento inesperado ou um erro de sintaxe/lógica.
(E) Incorreta: `j < n && v[j] > x`. A condição `v[j] > x` significa que o laço só continuaria se o elemento atual fosse maior que `x`. Como o vetor está ordenado e começamos do `0`, `v[0]` (que é `1`) não é maior que `89`. Assim, o laço não executaria nenhuma vez, e `j` permaneceria `0`.
Fonte: FCC TRF4 2019 Analista Judiciário - Área Apoio Especializado - Especialidade Sistemas de Tecnologia da Informação (Caderno Tipo 001). Reproduzida para fins de estudo.