Pular para o conteúdo principal

Questão de Programação — Conceitos básicos de programação — FGV 2026

ProgramaçãoConceitos básicos de programação
Código
fg127773
Banca
FGV
Órgão
AL-RO
Ano
2026
Nível
Médio
Cargo
Assistente Legislativo (Técnico em Informática)
Um programa calcula o desconto progressivo em compras: 5% para compras acima de R$ 100, 10% para compras acima de R$ 500, e 15% para compras acima de R$ 1000. O programador escreveu o código a seguir, que contém um erro de lógica na ordem das condições:Imagem associada para resolução da questãoA partir da análise do código, que será executado para uma compra de R$ 1200,00, identifique o problema lógico e selecione a opção que descreve corretamente o que será calculado e como corrigir o código.
  1. AO código calculará 15% de desconto (R$ 180,00). Para corrigir, deve-se trocar a ordem dos elif, colocando valor > 1000 primeiro.
  2. BO código calculará 5% de desconto (R$ 60,00). Para corrigir, deve-se trocar a ordem dos elif, colocando valor > 1000 primeiro.
  3. CO código calculará 10% de desconto (R$ 120,00). Para corrigir, deve-se usar operadores >= em vez de >.
  4. DO código não dará nenhum desconto (R$ 0,00). Para corrigir, deve-se usar if independentes em vez de elif.
  5. EO código causará um erro porque valor > 1000 deveria ser a primeira condição.
Revelar gabarito e comentário

GabaritoB — O código calculará 5% de desconto (R$ 60,00). Para corrigir, deve-se trocar a ordem dos elif, colocando valor > 1000 primeiro.

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

Desconto progressivo e a ordem das condições em estruturas condicionais

Gabarito: letra B. Para uma compra de R$ 1200,00, o código com a ordem errada das condições calculará 5% de desconto (R$ 60,00), porque a primeira condição verdadeira (valor > 100) captura o valor antes que as condições de desconto maior sejam avaliadas. A correção é inverter a ordem dos elif, colocando a condição valor > 1000 primeiro, para que o maior desconto seja aplicado primeiro.

O problema central desta questão é a ordem de avaliação das condições em uma estrutura condicional encadeada (como if/elif em Python ou else if em outras linguagens). Quando usamos elif, o programa testa as condições na ordem em que aparecem e executa apenas o primeiro bloco cuja condição seja verdadeira. Isso significa que, se uma condição mais genérica (como valor > 100) vem antes de uma mais específica (como valor > 1000), a genérica será sempre a primeira a ser satisfeita para valores que também atendem à específica, impedindo que o desconto maior seja aplicado.

Vamos entender o fluxo com o valor de R$ 1200,00. O código, na ordem errada, provavelmente é algo como:

if valor > 100:
    desconto = 0.05
elif valor > 500:
    desconto = 0.10
elif valor > 1000:
    desconto = 0.15

Ao executar com valor = 1200, a primeira condição valor > 100 é verdadeira (1200 > 100). Como é um elif, o programa executa o bloco correspondente e ignora todas as condições seguintes. Portanto, o desconto aplicado será de 5%, resultando em R$ 60,00 de desconto (1200 × 0,05). O valor de R$ 1200,00 também atenderia às condições valor > 500 e valor > 1000, mas como a primeira condição já foi satisfeita, o programa não chega a avaliá-las.

A correção é simples: inverter a ordem das condições, colocando a mais específica (maior limiar) primeiro. Assim, para R$ 1200,00, a primeira condição valor > 1000 seria verdadeira e o desconto de 15% seria aplicado corretamente (R$ 180,00). Essa é uma armadilha clássica em programação: quando se usa elif, a ordem importa, e condições mais amplas devem vir depois das mais restritivas.

NÃO CAIA NESSA!

A banca explora a confusão entre a ordem das condições e o uso de >= versus >. Muitos candidatos pensam que o problema é o operador, mas o erro real é a ordem dos elif. Para R$ 1200,00, a condição valor > 100 é verdadeira, então o programa nunca chega a testar valor > 1000. A correção não é trocar > por >=, mas sim reordenar as condições, colocando valor > 1000 primeiro. Fique atento: em estruturas elif, a primeira condição verdadeira vence, e as demais são ignoradas.

  1. 1valor > 100? Sim → 5%
  2. 2valor > 500? Não avaliado
  3. 3valor > 1000? Não avaliado
  4. 4Desconto = R$ 60
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Afirma que o código calculará 15% de desconto (R$ 180,00). Isso está errado porque, com a ordem atual, a condição valor > 100 é a primeira verdadeira para R$ 1200,00, então o programa aplica 5%, não 15%. A correção sugerida (trocar a ordem dos elif) é correta, mas o valor calculado está errado. O desconto de 15% só seria aplicado se a condição valor > 1000 fosse avaliada primeiro, o que não acontece no código original.

Alternativa B — ✅ Correta ⟵ GABARITO

Esta alternativa descreve exatamente o que acontece: o código calculará 5% de desconto (R$ 60,00) porque a condição valor > 100 é a primeira verdadeira para R$ 1200,00. A correção é inverter a ordem dos elif, colocando valor > 1000 primeiro, para que o maior desconto seja aplicado. Isso está alinhado com o comportamento das estruturas condicionais encadeadas: a primeira condição verdadeira determina o bloco executado.

Alternativa C — ❌ Incorreta

Afirma que o código calculará 10% de desconto (R$ 120,00) e que a correção é usar >= em vez de >. Isso está errado por dois motivos: primeiro, o código calculará 5%, não 10%, pois a condição valor > 100 é a primeira verdadeira. Segundo, o problema não é o operador de comparação, mas a ordem das condições. Usar >= não mudaria o fato de que valor > 100 é verdadeiro para R$ 1200,00, então o desconto continuaria sendo 5%. A correção correta é reordenar as condições, não trocar os operadores.

Alternativa D — ❌ Incorreta

Afirma que o código não dará nenhum desconto (R$ 0,00) e que a correção é usar if independentes em vez de elif. Isso está errado porque o código aplicará 5% de desconto, já que valor > 100 é verdadeiro. Usar if independentes não resolveria o problema da ordem; na verdade, se usasse if independentes, todas as condições seriam testadas e o desconto seria o último atribuído (15%), o que também não é o comportamento desejado. A correção correta é reordenar os elif, não mudar a estrutura.

Alternativa E — ❌ Incorreta

Afirma que o código causará um erro porque valor > 1000 deveria ser a primeira condição. Isso está errado porque o código não causará erro algum; ele simplesmente aplicará o desconto errado (5% em vez de 15%). A ordem das condições não gera erro de execução, apenas um erro de lógica. A correção é reordenar as condições, mas não porque há um erro de sintaxe ou de execução, e sim porque a lógica está incorreta.

Gabarito: letra B

Link permanente: /questoes/fg127773