Questão de Programação — Linguagens de programação — FGV 2023
- Código
- fg067930
- Banca
- FGV
- Órgão
- Receita Federal
- Ano
- 2023
- Nível
- Superior
- Cargo
- Auditor-Fiscal (manhã)
- A4
- B8
- C16
- D32
- E64
GabaritoC — 16
Gabarito: C) 16. O código implementa um iterador que, a cada chamada de next(), retorna o valor atual de x (inicializado em 128) e depois o atualiza subtraindo sua metade inteira (x - int(x/2)). O quarto número exibido é o retorno da quarta chamada de next(), que corresponde ao valor de x após três atualizações, ou seja, 16.
A classe enigma define __iter__ e __next__, tornando-se um iterador. O laço for k in range(5) chama next(xpto) cinco vezes. O cálculo é:
1ª chamada: retorna 128, x vira 128 - 64 = 64 2ª chamada: retorna 64, x vira 64 - 32 = 32 3ª chamada: retorna 32, x vira 32 - 16 = 16 4ª chamada: retorna 16, x vira 16 - 8 = 8 5ª chamada: retorna 8, x vira 8 - 4 = 4
Portanto, o quarto número é 16.
O valor 4 seria o sexto número, após mais duas iterações.
O valor 8 é o quinto número, não o quarto.
Como demonstrado, o quarto número é 16.
O valor 32 é o terceiro número.
O valor 64 é o segundo número.
Cuidado com o momento da atualização! O código primeiro armazena y = self.x (valor a ser exibido) e só depois recalcula self.x. O número exibido é anterior à atualização. Se você contar as atualizações em vez das exibições, pode errar.
Gabarito: C)
Link permanente: /questoes/fg067930