Questão de Programação — Programação estruturada — FGV 2023
Programação›Programaçã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.Considerando 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:
A3
B8
C9
D16
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.
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).
De onde vem cada valor: = passo 1: 2 · = passo 1: 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.
De onde vem cada valor: = passo 1: 1 · = passo 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].
De onde vem cada valor: = passo 1: 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.
De onde vem cada valor: = passo 1: 1 · = passo 3: 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.
De onde vem cada valor: = passo 1: 2 · = passo 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.