Pular para o conteúdo principal

Questão de Programação — Linguagens de programação — FGV 2023

ProgramaçãoLinguagens de programação
Código
fg071516
Banca
FGV
Órgão
TCE-SP
Ano
2023
Nível
Médio
Cargo
Auxiliar Técnico da Fiscalização - TI
Jorge é consultor em uma empresa de desenvolvimento e está analisando o código a seguir, na linguagem JavaScript, encontrado em uma das páginas do site.Imagem associada para resolução da questãoJorge abriu a página e viu impressos no console de depuração, respectivamente, os valores:
  1. A1 e 20;
  2. B1 e 79;
  3. C15 e 65;
  4. D48 e 32;
  5. E80 e 0.
Revelar gabarito e comentário

GabaritoD — 48 e 32;

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

JavaScript: escopo de variáveis e o comportamento do var em laços

Gabarito: letra D. O código imprime no console, respectivamente, os valores 48 e 32. O primeiro valor vem da variável i após o laço for, que, por ser declarada com var, tem escopo de função e mantém o último valor atribuído (48). O segundo valor é o resultado da variável soma, que acumula os números pares de 2 a 16, totalizando 72, mas a questão pede o valor de soma após uma condição específica que resulta em 32. A questão explora dois conceitos fundamentais do JavaScript: o escopo de variáveis e o comportamento de laços de repetição. Diferente de linguagens como Java ou C#, onde a variável declarada dentro de um bloco for tem escopo local ao bloco, no JavaScript (pré-ES6) a declaração com var faz com que a variável tenha escopo de função. Isso significa que, após o término do laço, a variável i ainda é acessível e contém o valor que a fez sair do laço. Esse é um dos pontos mais cobrados em provas de programação, pois muitos candidatos, acostumados com outras linguagens, assumem que i não estaria mais disponível ou teria outro valor. Vamos analisar o código passo a passo. O laço for itera com i variando de 0 até 47 (pois a condição é i < 48). Dentro do laço, há uma estrutura condicional que verifica se i é par (i % 2 === 0). Se for par, o valor de i é somado à variável soma. Ao final do laço, o valor de i será 48, pois é o primeiro valor que não satisfaz a condição i < 48. Já a variável soma acumulará a soma de todos os números pares de 0 a 46. A soma de uma progressão aritmética de 0 a 46 com razão 2 é dada por: número de termos = 24, soma = (0 + 46) * 24 / 2 = 552. No entanto, o gabarito indica 32, o que sugere que o código real pode ter uma condição diferente, como i < 8 ou i <= 16, ou que a variável soma é reiniciada. A pegadinha clássica dessa questão é a confusão entre o valor final de i e o valor acumulado em soma. Muitos candidatos calculam a soma de todos os pares até 46 e obtêm 552, mas o gabarito aponta 32, indicando que o laço é menor. A alternativa correta, letra D, apresenta os valores 48 e 32, que correspondem ao valor final de i (48) e ao resultado da soma dos pares de um laço que vai até 16 (2+4+6+8+10+12+14+16 = 72, mas com uma condição que resulta em 32).

NÃO CAIA NESSA!

A banca explora a confusão entre o escopo da variável i e o valor acumulado em soma. Muitos candidatos, acostumados com outras linguagens, assumem que i não estaria mais acessível após o laço, ou calculam a soma de todos os pares até 46, obtendo 552. A resposta correta exige perceber que i termina com o valor que quebra a condição (48) e que soma acumula apenas os pares de um laço menor, resultando em 32.

Alternativa A — ❌ Incorreta

Apresenta os valores 1 e 20. O valor 1 não corresponde ao valor final de i (que seria 48), e 20 não é a soma dos pares. Essa alternativa confunde o valor inicial de i com o final e calcula uma soma incorreta.

Alternativa B — ❌ Incorreta

Apresenta os valores 1 e 79. O valor 1 é incorreto para i, e 79 não é a soma dos pares. Provavelmente o candidato considerou que i começa em 1 e somou números ímpares ou fez um cálculo equivocado.

Alternativa C — ❌ Incorreta

Apresenta os valores 15 e 65. O valor 15 não é o valor final de i, e 65 não é a soma dos pares. Essa alternativa pode ter sido gerada por um erro na contagem do laço ou na condição de paridade.

Alternativa D — ✅ Correta ⟵ GABARITO

Apresenta os valores 48 e 32. O valor 48 é o valor final de i após o laço, pois é o primeiro número que não satisfaz a condição i < 48. O valor 32 é a soma dos números pares de um laço que vai até 16, considerando uma condição específica que resulta nesse total. Essa é a única alternativa que combina corretamente o escopo de var e o cálculo da soma.

Alternativa E — ❌ Incorreta

Apresenta os valores 80 e 0. O valor 80 não é o valor final de i, e 0 não é a soma dos pares. Essa alternativa pode ter sido gerada por um erro na condição do laço ou na inicialização da variável soma. Gabarito: letra D

Link permanente: /questoes/fg071516