Questão FC373172
Considere a função abaixo na forma de pseudocódigo. função teste (x,n,p[0..7]: inteiro): inteiro var y, j, d: inteiro y ← 0 d ← n - 1 enquanto (y <= d) faça j ← (y + d) / 2 se (p[j
Algoritmos e Lógica de Programação
FCC · 2018
Considere a função abaixo na forma de pseudocódigo.
função teste (x,n,p[0..7]: inteiro): inteiro
var y, j, d: inteiro
y ← 0
d ← n - 1
enquanto (y <= d) faça
j ← (y + d) / 2
se (p[j] = x) então
retorne j
fim_se
se (p[j] < x)
então y ← j + 1
senão d ← j - 1
fim_se
fim_enquanto
retorne -1
fim_função
Se a função teste receber o valor 9 para x, 8 para n e o vetor [7, 10, 42, 88, 100, 123, 401, 502] para p, o retorno da função será
- 3
- 6
- 8
- 2
- −1
Mostrar resposta e comentário
Gabarito
Errado
Comentário do professor
O procedimento implementa uma busca binária no vetor ordenado. Inicialmente temos y = 0 e d = \(n-1 = 7\).
1ª iteração: \(j=(y+d)/2=(0+7)/2=3\). Como p[j]=88 ≠ 9 e 88 > 9, atualiza-se d=j−1=2.
2ª iteração: \(j=(0+2)/2=1\). p[j]=10 ≠ 9 e 10 > 9, então d=0.
3ª iteração: \(j=(0+0)/2=0\). p[j]=7 ≠ 9 e 7 < 9, então y=j+1=1.
Agora y=1 e d=0, logo a condição y ≤ d é falsa e o laço termina. Como o elemento 9 não foi encontrado, a função retorna -1.
Conteúdo do catálogo FC Concursos · Atualizado em