Pular para o conteúdo principal

Questão de Algoritmos e Estrutura de Dados — Algoritmos — CESPE / CEBRASPE 2023

Algoritmos e Estrutura de DadosAlgoritmos
Código
ce151513
Banca
CESPE / CEBRASPE
Órgão
AGER - Mato Grosso
Ano
2023
Nível
Superior
Cargo
Analista Regulador - Ciências da Computação e ou Sistemas de Informação
leia(x)y = 0.0m = 1.0enquanto x > 1 façaescreva(y, x, m)y = y + (x % 2) * mx = x / 2m = m * 10fim enquantoescreva(y)Assinale a opção que apresenta o valor de x para que o resultado do código precedente seja igual a 131.
  1. A3
  2. B5
  3. C9
  4. D6
  5. E7
Revelar gabarito e comentário

GabaritoB — 5

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Algoritmo – interpretação de laço e operações com ponto flutuante

Gabarito: letra B (x = 5). O algoritmo acumula em y as parcelas (x % 2) * m, onde x é um número real, % é o operador módulo sobre reais (resto da divisão), e m é multiplicado por 10 a cada iteração. O laço executa enquanto x > 1. Testando x = 5, obtém-se y = 131, conforme simulação detalhada abaixo.

A banca testa a capacidade de rastrear variáveis reais com divisão e módulo não inteiros. O ponto central é que x % 2, para x real, retorna o resto da divisão por 2 (parte fracionária não inteira), e x / 2 é a divisão real.

Simulação passo a passo para x = 5

Iteração

Antes do laço

y (antes)

x (antes)

m (antes)

Condição x>1?

y = y + (x%2)*m

x = x/2

m = m*10

1

leitura

0.0

5.0

1.0

sim

0+(1)*1 =1.0

2.5

10.0

2

1.0

2.5

10.0

sim

1+(0.5)*10=6.0

1.25

100.0

3

6.0

1.25

100.0

sim

6+(1.25)*100=131.0

0.625

1000.0

fim

131.0

0.625

1000.0

não (x≤1)

Após o laço, escreva(y) imprime 131. Assim, x = 5 produz o resultado solicitado.

  1. 1y=0, x=5, m=1
  2. 2y=1, x=2.5, m=10
  3. 3y=6, x=1.25, m=100
  4. 4y=131, x=0.625, m=1000
LEVEL · soulevel.com.br

Alternativas

Alternativa A — ❌ Incorreta (x = 3)

Simulando: primeira iteração: y=1, x=1.5, m=10; segunda iteração: y=1+(1.5%2=1.5)*10=16, x=0.75, fim. y=16 ≠ 131.

Alternativa B — ✅ Correta ⟵ GABARITO

Conforme simulação, x=5 → y=131.

Alternativa C — ❌ Incorreta (x = 9)

Iterações: (1) y=1, x=4.5, m=10; (2) y=1+(4.5%2=0.5)10=6, x=2.25, m=100; (3) y=6+(2.25%2=0.25)100=31, x=1.125, m=1000; (4) y=31+(1.125%2=1.125)*1000=1156, x=0.5625. y=1156.

Alternativa D — ❌ Incorreta (x = 6)

(1) y=0 (6%2=0), x=3, m=10; (2) y=0+(3%2=1)10=10, x=1.5, m=100; (3) y=10+(1.5%2=1.5)100=160, x=0.75. y=160.

Alternativa E — ❌ Incorreta (x = 7)

(1) y=1, x=3.5, m=10; (2) y=1+(3.5%2=1.5)10=16, x=1.75, m=100; (3) y=16+(1.75%2=1.75)100=191, x=0.875. y=191.

NÃO CAIA NESSA!

A banca explora a diferença entre divisão inteira e real e o operador módulo em ponto flutuante. O candidato pode, por hábito, considerar x como inteiro e x/2 como divisão inteira, obtendo resultados diferentes (por exemplo, para x=5 chegaria a y=1). A chave é notar que o pseudo‑código usa números reais (variáveis float) e o operador % em reais retorna o resto da divisão (ex.: 2.5 % 2 = 0.5). Simular com a primeira iteração já revela valores fracionários.

Gabarito: letra B

Link permanente: /questoes/ce151513