Pular para o conteúdo principal

Questão de Programação — Programação estruturada — FGV 2023

ProgramaçãoProgramação estruturada
Código
fg071520
Banca
FGV
Órgão
TCE-SP
Ano
2023
Nível
Médio
Cargo
Auxiliar Técnico da Fiscalização - TI
Marcos é um estudante de programação de computadores e encontrou o algoritmo apresentado a seguir em seus estudos.Imagem associada para resolução da questãoConsiderando o vetor com índice inicial 1 e final 5, e utilizando os valores {2, 1, 2, 1, 2}, Marcos obterá a impressão do valor:
  1. A3
  2. B8
  3. C9
  4. D16
  5. E19
Revelar gabarito e comentário

GabaritoE — 19

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”.

Resolução

Gabarito: letra E — a conta chega a a = 19 — alternativa E.

A ideia por trás

Um vetor é uma sequência de valores guardados em posições numeradas; aqui, cada posição guarda um número inteiro. Um laço de repetição (o 'para') executa um bloco de comandos várias vezes, mudando o valor de uma variável de controle (o i) a cada volta. Rastrear um algoritmo é simular mentalmente cada linha, anotando o valor de todas as variáveis e posições do vetor a cada iteração — é como seguir uma receita de bolo passo a passo, conferindo os ingredientes a cada etapa.

A operação v[i] = v[i] + v[6-i] lê o valor atual da posição i e o valor atual da posição simétrica (6-i), soma os dois e guarda o resultado de volta na posição i. Como o laço percorre i de 1 a 5, ele vai modificando o vetor enquanto avança. A pegadinha é que, quando i chega em 4, a posição 2 já foi alterada na iteração i=2; quando i=5, a posição 1 já foi alterada na iteração i=1. Ou seja, cada leitura usa o valor mais recente, não o valor original.

Esta questão cobra exatamente essa atualização dinâmica: é preciso acompanhar o vetor mudando a cada iteração e usar os valores já modificados nas contas seguintes. Quem usa os valores originais do vetor em todas as iterações cai nos distratores.

O que a questão dá

  • vetor com 5 posições, índices de 1 a 5

  • valores iniciais: {2, 1, 2, 1, 2}

  • algoritmo: para i de 1 até 5, faça v[i] = v[i] + v[6-i] e depois a = a + v[i]

O que queremos: o valor impresso da variável a após a execução do algoritmo

Passo 1 — Anotar o vetor inicial

Antes de começar o laço, precisamos saber o estado inicial do vetor, porque todas as contas vão partir dele. Vamos escrever os valores em cada posição: posição 1 tem 2, posição 2 tem 1, posição 3 tem 2, posição 4 tem 1, posição 5 tem 2.

v=2,1,2,1,2v = \boxed{{2, 1, 2, 1, 2}}
NÃO CAIA NESSA!

Esquecer que o índice começa em 1 e não em 0 — aqui o enunciado já avisa, mas em outras questões isso muda tudo.

Passo 2 — Executar a primeira iteração (i=1)

O laço começa com i=1. Precisamos calcular o novo valor de v[1] usando a fórmula v[i] = v[i] + v[6-i]. Aqui, 6-i = 5, então v[1] recebe a soma do valor atual de v[1] com o valor atual de v[5]. Depois, somamos esse novo v[1] ao acumulador a, que começa em 0.

Por que esta fórmula: A fórmula v[i] = v[i] + v[6-i] é a regra do algoritmo: cada posição recebe a soma dela com a posição simétrica. O 6-i vem do fato de o vetor ter 5 posições: a posição simétrica de i é 6-i (por exemplo, 1 é simétrica de 5, 2 de 4, 3 de 3).

v[1]=v[1]+v[5]v[1] = v[1] + v[5]

De onde vem cada valor: v[1]v[1] = passo 1: 2 · v[5]v[5] = passo 1: 2

v[1]=2+2v[1] = 2 + 2

v[1] = 4, a = 4

NÃO CAIA NESSA!

Esquecer de atualizar o valor de v[1] no vetor — nas próximas iterações ele será usado como 4, não como 2.

Passo 3 — Executar a segunda iteração (i=2)

Agora i=2. A posição simétrica é 6-2 = 4, então v[2] recebe a soma do valor atual de v[2] com o valor atual de v[4]. Nenhuma dessas posições foi alterada ainda, então usamos os valores originais. Depois, somamos o novo v[2] ao acumulador.

Por que esta fórmula: Mesma regra do passo anterior, agora com i=2.

v[2]=v[2]+v[4]v[2] = v[2] + v[4]

De onde vem cada valor: v[2]v[2] = passo 1: 1 · v[4]v[4] = passo 1: 1

v[2]=1+1v[2] = 1 + 1

v[2] = 2, a = 6

NÃO CAIA NESSA!

Achar que v[2] continua 1 depois desta iteração — ele passa a ser 2, e isso será usado na iteração i=4.

Passo 4 — Executar a terceira iteração (i=3)

i=3, e a posição simétrica é 6-3 = 3, ou seja, a própria posição. Então v[3] recebe o dobro do valor atual de v[3]. Como v[3] ainda não foi alterado, usamos o valor original 2. Depois, somamos o novo v[3] ao acumulador.

Por que esta fórmula: A fórmula v[i] = v[i] + v[6-i] com i=3 vira v[3] = v[3] + v[3], que é o mesmo que 2 × v[3].

v[3]=v[3]+v[3]v[3] = v[3] + v[3]

De onde vem cada valor: v[3]v[3] = passo 1: 2

v[3]=2+2v[3] = 2 + 2

v[3] = 4, a = 10

NÃO CAIA NESSA!

Confundir e usar v[3] = 2 + 2 = 4, mas esquecer de somar 4 ao acumulador — o a precisa ser atualizado a cada iteração.

Passo 5 — Executar a quarta iteração (i=4)

i=4, e a posição simétrica é 6-4 = 2. Aqui está a pegadinha: v[2] já foi alterado na iteração i=2 e agora vale 2, não 1. Então v[4] recebe a soma do valor atual de v[4] (que ainda é 1) com o valor atual de v[2] (que é 2). Depois, somamos o novo v[4] ao acumulador.

Por que esta fórmula: A regra é sempre a mesma, mas o valor de v[2] agora é o atualizado, não o original.

v[4]=v[4]+v[2]v[4] = v[4] + v[2]

De onde vem cada valor: v[4]v[4] = passo 1: 1 · v[2]v[2] = passo 3: 2

v[4]=1+2v[4] = 1 + 2

v[4] = 3, a = 13

NÃO CAIA NESSA!

Usar v[2] = 1 (valor original) em vez de 2 — isso daria v[4] = 2 e a = 12, errando o resultado final.

Passo 6 — Executar a quinta iteração (i=5)

i=5, e a posição simétrica é 6-5 = 1. v[1] já foi alterado na primeira iteração e agora vale 4, não 2. Então v[5] recebe a soma do valor atual de v[5] (que ainda é 2) com o valor atual de v[1] (que é 4). Depois, somamos o novo v[5] ao acumulador, encerrando o laço.

Por que esta fórmula: A regra continua a mesma, mas v[1] agora é 4.

v[5]=v[5]+v[1]v[5] = v[5] + v[1]

De onde vem cada valor: v[5]v[5] = passo 1: 2 · v[1]v[1] = passo 2: 4

v[5]=2+4v[5] = 2 + 4

v[5] = 6, a = 19

NÃO CAIA NESSA!

Usar v[1] = 2 (valor original) em vez de 4 — isso daria v[5] = 4 e a = 17, errando o resultado final.

Resposta: a = 19 — alternativa E

Link permanente: /questoes/fg071520