GeraProva GeraProva Provas com IA para professores do Brasil
Computação7º anoBNCC EF07CO02Difícil⏱ medio

Por que o painel de alerta do rio não envia aviso mesmo quando o nível sobe em duas medições seguidas? Em uma…

Publicado por Alexandre Lombardi dos Santos, fundador do GeraProva

Habilidade BNCC EF07CO02

Analisar programas para detectar e remover erros, ampliando a confiança na sua correção.

Fonte: Base Nacional Comum Curricular (MEC).

Questão

Por que o painel de alerta do rio não envia aviso mesmo quando o nível sobe em duas medições seguidas? Em uma simulação do sistema municipal, cada leitura recebe o estado “subindo” ou “estável”. A regra é enviar apenas um aviso quando ocorrerem duas leituras consecutivas de “subindo”; um novo aviso só pode ocorrer depois de uma leitura “estável”. O programa usa as variáveis estadoAnterior e avisoEnviado. Nos testes com as sequências “subindo, subindo, subindo” e “subindo, estável, subindo, subindo”, nenhum aviso foi enviado. para cada estado recebido se estado = "subindo" e estadoAnterior = "subindo" e avisoEnviado = falso enviar aviso avisoEnviado <- verdadeiro se estado = "estável" avisoEnviado <- falso estadoAnterior <- "estável" Analise o rastreamento do programa e determine a alteração na última atribuição que permite cumprir a regra de aviso nos dois testes.

  1. A) Substituir a última atribuição por estadoAnterior <- "estável" somente após enviar aviso.
  2. B) Substituir a última atribuição por estadoAnterior <- "subindo".
  3. C) Substituir a última atribuição por estadoAnterior <- estado.
  4. D) Substituir a última atribuição por estadoAnterior <- avisoEnviado.
  5. E) Substituir a última atribuição por avisoEnviado <- falso.

✅ Resposta correta: alternativa C

Resolução passo a passo

  1. Identifique o problema no programa. A última atribuição, estadoAnterior <- "estável", é executada a cada leitura, independentemente do estado recebido. Assim, quando a próxima leitura chega, estadoAnterior vale sempre "estável" e a condição estadoAnterior = "subindo" nunca é verdadeira. Por isso nenhum aviso é enviado nos testes.
  2. Defina o que a memória precisa guardar. Para cumprir a regra, o programa precisa lembrar se a leitura anterior foi "subindo". Portanto, a variável estadoAnterior deve receber o estado atual, e não um valor fixo.
  3. Teste a alternativa C, estadoAnterior <- estado. No teste 1 (subindo, subindo, subindo): na leitura 1, não há aviso e estadoAnterior vira "subindo"; na leitura 2, estado e estadoAnterior são "subindo" e avisoEnviado é falso, então o aviso é enviado e avisoEnviado vira verdadeiro; na leitura 3, avisoEnviado é verdadeiro, então não há novo aviso. Resultado: um aviso, como a regra exige.
  4. Teste a mesma alternativa no teste 2 (subindo, estável, subindo, subindo). Leitura 1: sem aviso, estadoAnterior vira "subindo". Leitura 2: estado "estável", avisoEnviado vira falso e estadoAnterior vira "estável". Leitura 3: sem aviso, pois estadoAnterior é "estável"; estadoAnterior vira "subindo". Leitura 4: duas leituras consecutivas de "subindo" e avisoEnviado falso, então o aviso é enviado. Resultado: um aviso, como esperado.
  5. Verifique as demais alternativas. A) não cumpre o teste 1, pois estadoAnterior nunca recebe "subindo". B) passa nos testes, mas fixa estadoAnterior em "subindo", então um único "subindo" depois de "estável" geraria aviso indevido. D) atribui um booleano a estadoAnterior, que nunca será igual a "subindo", então nunca há aviso. E) reinicia avisoEnviado, mas não corrige a comparação com estadoAnterior, que continua sempre "estável".
  6. Conclusão. A alternativa C é a única que cumpre a regra nos dois testes e preserva o comportamento correto em outros casos. O gabarito oficial, C, está correto.

💡 Dica: Analise passo a passo a atualização das variáveis estadoAnterior e avisoEnviado.

Alternativa por alternativa

A Erradaerro: Conceitual

Acredita que estadoAnterior só precisa ser marcado como "estável" após o envio do aviso, sem perceber que a memória do estado anterior deve existir a cada leitura, inclusive para a primeira de dois "subindo".

B Erradaerro: Procedimental

Supõe que basta guardar "subindo" fixo para detectar duas leituras seguidas, sem perceber que isso faz qualquer leitura "subindo" após um "estável" disparar aviso indevidamente.

C Correta

A variável deve guardar o estado recebido para que a leitura seguinte possa ser comparada a ele. Assim, duas leituras consecutivas de “subindo” ativam um único aviso.

D Erradaerro: Conceitual

Confunde a variável de estado (texto "subindo"/"estável") com a variável lógica de controle avisoEnviado, atribuindo um valor de tipo diferente e sem relação com a comparação.

E Erradaerro: Interpretação

Pensa que o problema está em avisoEnviado não ser reiniciado, e que zerá-lo a cada leitura resolveria. Não percebe que a comparação com estadoAnterior continua falsa.

Raio-X da questão

Dificuldade Difícil
Bloom Analisar
Leitura medio
Discriminação medio
Peso pedagógico medio
Autonomia do enunciado completo
Cobertura da habilidade unica
🧪 Simulado🩺 Diagnóstico🧮 Exige cálculo🏠 Cotidiano🔗 Interdisciplinar⭐ Representativa✍️ interpretativa🧩 progressao
🎯 Conceito central

controle de fluxo em programação

📌 Objetivo

avaliacao

🧱 Pré-requisitos

variáveis e atribuições · estruturas condicionais

📚 Reveja

Estude estruturas condicionais e controle de estados em programas.

⚠️ Erro mais comum

Confundir a atualização da variável estadoAnterior, atribuindo valor incorreto que impede o reconhecimento de leituras consecutivas.

🌎 Tema transversal

ciencia_tecnologia

🤝 Socioemocional

pensamento_critico

🏫 Contexto

cotidiano

Questões parecidas com resolução

Todas as questões de Análise de programas

🔎 Procurar outra questão

Procure no banco do GeraProva pelo tema ou por um trecho do enunciado. Cada questão já vem com resolução comentada e a análise de cada alternativa.

Professor: monte a prova com questões como esta, com gabarito e folha de respostas, em 30 segundos. Ver planos · Blog

Ocorreu um erro inesperado. Recarregar X

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.