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
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.
- A) Substituir a última atribuição por estadoAnterior <- "estável" somente após enviar aviso.
- B) Substituir a última atribuição por estadoAnterior <- "subindo".
- C) Substituir a última atribuição por estadoAnterior <- estado.
- D) Substituir a última atribuição por estadoAnterior <- avisoEnviado.
- E) Substituir a última atribuição por avisoEnviado <- falso.
✅ Resposta correta: alternativa C
Resolução passo a passo
- 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.
- 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.
- 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.
- 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.
- 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".
- 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
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".
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.
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.
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.
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
controle de fluxo em programação
avaliacao
variáveis e atribuições · estruturas condicionais
Estude estruturas condicionais e controle de estados em programas.
Confundir a atualização da variável estadoAnterior, atribuindo valor incorreto que impede o reconhecimento de leituras consecutivas.
ciencia_tecnologia
pensamento_critico
cotidiano
Questões parecidas com resolução
- Quando o rio se aproxima das casas, a Defesa Civil de um município usa um programa para avisar os moradores pelo…
- — O painel marcou 80%, mas o caminhão não recebeu o aviso de retirada — observou a responsável pelo ponto de coleta de…
- — Por que a bilheteria está cobrando “inteira” de crianças? — perguntou a atendente, ao testar um programinha que…
- Por que algumas luminárias da praça recebem revisão antes de outras? O aplicativo usado pela prefeitura acompanha quatro…
- — A última peça nunca aparece no painel — disse a monitora do centro cultural, ao conferir o inventário digital de…
- — Tem audioguia disponível? — perguntou um visitante na entrada de uma mostra interativa. A equipe tem 12 aparelhos de…
🔎 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
