Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
3
respostas

Desafio: Classificando Desempenho Acadêmico - Proposta de Solução em Linguagem Natural e Pseudocódigo

Classificando Desempenho Acadêmico

Algoritmo em linguagem natural, pseudocódigo e fluxograma

1. Enunciado e regra de negócio

Sistema educacional que exibe mensagens personalizadas para estudantes com base em sua média final.

Especificação de entrada, processamento e saída

ItemDescrição
EntradaA média final do estudante (número real, de 0,0 a 10,0)
ProcessamentoComparar a média com as faixas definidas pela equipe pedagógica
SaídaUma única mensagem de situação, correspondente à faixa em que a média se encaixa

Regra de negócio definida pela equipe pedagógica

Faixa da médiaSituaçãoMensagem exibida
Menor que 5,0Reprovado"Você está reprovado."
De 5,0 até menos de 7,0Recuperação"Você está de recuperação."
7,0 ou maisAprovado"Parabéns! Você foi aprovado."

2. Algoritmo em linguagem natural

Passo a passo

  1. Iniciar o processo.

  2. Solicitar ao estudante (ou ao operador do sistema) que informe a média final.

  3. Ler e armazenar o valor informado em uma variável chamada media.

  4. Validar o valor lido:

    • Se media for menor que 0,0 ou maior que 10,0, então exibir a mensagem "Média inválida. Informe um valor entre 0,0 e 10,0." e voltar ao passo 2.
    • Senão, seguir para o passo 5.
  5. Verificar a primeira condição: a média é menor que 5,0?

    • Se sim (verdadeiro) → exibir a mensagem "Você está reprovado." e seguir direto para o passo 8. Nenhuma outra verificação é feita.
    • Se não (falso) → seguir para o passo 6.
  6. Verificar a segunda condição: a média é menor que 7,0?

    Neste ponto já se sabe, pelo passo 5, que a média é maior ou igual a 5,0. Portanto, esta única comparação já delimita a faixa completa de 5,0 até menos de 7,0 — não é necessário testar o limite inferior novamente.

    • Se sim (verdadeiro) → exibir a mensagem "Você está de recuperação." e seguir direto para o passo 8.
    • Se não (falso) → seguir para o passo 7.
  7. Caso contrário (situação remanescente): a média é necessariamente maior ou igual a 7,0, pois todas as faixas inferiores já foram descartadas nos passos 5 e 6. Exibir a mensagem "Parabéns! Você foi aprovado."

  8. Encerrar o processo.

Por que a decisão é encadeada

A escolha é uma condicional encadeada (se / senão se / senão), e não três condicionais independentes:

  • Exclusividade mútua — assim que uma condição é satisfeita, o fluxo salta para o fim. É impossível o estudante receber duas mensagens contraditórias.
  • Economia de comparações — uma média de 3,0 exige uma comparação; uma média de 9,0 exige duas. Com condicionais independentes, as três seriam sempre avaliadas.
  • Simplificação dos testes — como o encadeamento garante que a faixa inferior já foi descartada, o teste do meio não precisa ser media >= 5,0 E media < 7,0; basta media < 7,0. Cada condição só verifica o limite superior da sua faixa.
  • O senão final não tem condição — ele captura tudo o que sobrou. Isso torna o algoritmo exaustivo por construção: nenhuma média válida pode "escapar" sem receber mensagem.
3 respostas
solução!

3.4 Diagrama essencial (somente a regra de negócio)

Versão reduzida, cobrindo apenas o que o enunciado exige — sem o laço de validação:

        ╭──────────────╮
        │    INÍCIO    │
        ╰──────┬───────╯
               │
    ┌──────────▼──────────┐
   /   LER  media         │
    └──────────┬──────────┘
               │
      ╱────────▼────────╲
     ╱  media < 5,0  ?   ╲
    ⟨                     ⟩───── SIM ─────┐
     ╲                   ╱                │
      ╲─────────────────╱                 ▼
               │             ┌───────────────────────────┐
              NÃO           /  ESCREVER                  │
               │             │  "Você está reprovado."   │
      ╱────────▼────────╲    └─────────────┬─────────────┘
     ╱  media < 7,0  ?   ╲                 │
    ⟨                     ⟩───── SIM ──┐   │
     ╲                   ╱             │   │
      ╲─────────────────╱              ▼   │
               │            ┌──────────────────────────────┐
              NÃO          /  ESCREVER                     │
               │           │  "Você está de recuperação."  │
    ┌──────────▼────────┐  └─────────────┬────────────────┘
   /  ESCREVER          │                │
    │  "Parabéns! Você  │                │
   /   foi aprovado."   │                │
    └──────────┬────────┘                │
               │                         │
               └───────────┬─────────────┘
                           │
                   ╭───────▼────────╮
                   │      FIM       │
                   ╰────────────────╯

3.5 Leitura do fluxograma

  • Um único ponto de entrada e um único ponto de saída. Todos os três caminhos convergem para o mesmo terminal FIM, o que caracteriza um algoritmo estruturado — sem desvios incondicionais.
  • O laço de validação é o único retorno para trás. A seta que sai de "Média inválida" volta ao símbolo de ESCREVER do prompt, reproduzindo graficamente o Repita ... Ate do pseudocódigo. É o único ciclo do diagrama.
  • Os losangos são atravessados em cascata, nunca em paralelo. O segundo teste (média < 7,0) só é alcançado pela saída NÃO do primeiro. É essa dependência que garante, sem escrever média ≥ 5,0 em lugar nenhum, que quem chega ao segundo losango já tem média igual ou superior a 5,0.
  • O caminho mais curto tem um losango; o mais longo tem dois. Uma média 3,0 sai na primeira decisão; uma média 9,0 percorre as duas. Nenhuma média percorre três.
  • Não existe caminho sem saída. Cada losango tem obrigatoriamente as duas saídas preenchidas (SIM e NÃO), e ambas terminam em um símbolo de saída. Essa é a verificação visual de que o algoritmo é exaustivo — nenhuma média válida fica sem mensagem.

4. Pseudocódigo — versão direta

Algoritmo "CLASSIFICACAO_DESEMPENHO_ACADEMICO"

Var
   media : real

Inicio
   // ---------- ENTRADA E VALIDACAO ----------
   Repita
      Escreva("Informe a media final (0,0 a 10,0): ")
      Leia(media)

      Se (media < 0) OU (media > 10) Entao
         Escreval(">> Media invalida. Informe um valor entre 0,0 e 10,0.")
         Escreval("")
      FimSe
   Ate (media >= 0) E (media <= 10)

   // ---------- DECISAO ENCADEADA ----------
   Escreval("")
   Escreval("=== RESULTADO ===")
   Escreval("Media final: ", media:0:1)

   Se (media < 5) Entao
      Escreval("Voce esta reprovado.")
   Senao
      Se (media < 7) Entao                 // aqui ja se sabe que media >= 5
         Escreval("Voce esta de recuperacao.")
      Senao                                // resta apenas media >= 7
         Escreval("Parabens! Voce foi aprovado.")
      FimSe
   FimSe

Fimalgoritmo

5. Pseudocódigo — versão modularizada

Separa as três responsabilidades — obter o dado, decidir a situação, exibir o resultado — em módulos independentes.

Algoritmo "CLASSIFICACAO_DESEMPENHO_ACADEMICO_MODULAR"

Var
   media : real
   situacao : caractere


// ============================================================
// MODULO 1 - VALIDACAO DA MEDIA
// ============================================================
Funcao MediaValida(m : real) : logico
Inicio
   Retorne (m >= 0) E (m <= 10)
FimFuncao


// ============================================================
// MODULO 2 - ENTRADA COM VALIDACAO
// Insiste ate receber um valor dentro da escala 0,0 a 10,0.
// ============================================================
Funcao LerMedia() : real
Var
   m : real
Inicio
   Repita
      Escreva("Informe a media final (0,0 a 10,0): ")
      Leia(m)

      Se (NAO MediaValida(m)) Entao
         Escreval(">> Media invalida. Informe um valor entre 0,0 e 10,0.")
         Escreval("")
      FimSe
   Ate MediaValida(m)

   Retorne m
FimFuncao


// ============================================================
// MODULO 3 - REGRA DE NEGOCIO (decisao encadeada)
// Unico ponto do algoritmo que conhece as notas de corte.
// ============================================================
Funcao ClassificarDesempenho(m : real) : caractere
Inicio
   Se (m < 5) Entao
      Retorne "REPROVADO"
   FimSe

   Se (m < 7) Entao                        // aqui ja se sabe que m >= 5
      Retorne "RECUPERACAO"
   FimSe

   Retorne "APROVADO"                      // resta apenas m >= 7
FimFuncao


// ============================================================
// MODULO 4 - MENSAGEM CORRESPONDENTE A SITUACAO
// Separar texto de regra permite mudar a redacao das
// mensagens sem tocar nas notas de corte.
// ============================================================
Funcao MensagemDe(s : caractere) : caractere
Inicio
   Se (s = "REPROVADO") Entao
      Retorne "Voce esta reprovado."
   FimSe

   Se (s = "RECUPERACAO") Entao
      Retorne "Voce esta de recuperacao."
   FimSe

   Retorne "Parabens! Voce foi aprovado."
FimFuncao


// ============================================================
// MODULO 5 - SAIDA
// ============================================================
Procedimento ExibirResultado(m : real ; s : caractere)
Inicio
   Escreval("")
   Escreval("=== RESULTADO ===")
   Escreval("Media final : ", m:0:1)
   Escreval("Situacao    : ", s)
   Escreval(MensagemDe(s))
FimProcedimento


// ============================================================
// PROGRAMA PRINCIPAL
// ============================================================
Inicio
   media    <- LerMedia()
   situacao <- ClassificarDesempenho(media)
   ExibirResultado(media, situacao)

Fimalgoritmo

Catálogo de módulos

MóduloTipoParâmetrosRetornoResponsabilidade
MediaValidaFunçãom: reallogicoVerifica se a média está na escala 0,0 a 10,0
LerMediaFunçãorealLê do teclado insistindo até obter valor válido
ClassificarDesempenhoFunçãom: realcaractereAplica a decisão encadeada e devolve o código da situação
MensagemDeFunçãos: caracterecaractereTraduz o código da situação na frase exibida
ExibirResultadoProcedimentom: real, s: caractereMonta e imprime o bloco de resultado

6. Teste de mesa

Média lidam < 5m < 7Retorno de ClassificarDesempenhoMensagem exibida
0,0VREPROVADOVocê está reprovado.
4,9VREPROVADOVocê está reprovado.
4,99VREPROVADOVocê está reprovado.
5,0FVRECUPERACAOVocê está de recuperação.
6,0FVRECUPERACAOVocê está de recuperação.
6,9FVRECUPERACAOVocê está de recuperação.
6,99FVRECUPERACAOVocê está de recuperação.
7,0FFAPROVADOParabéns! Você foi aprovado.
8,5FFAPROVADOParabéns! Você foi aprovado.
10,0FFAPROVADOParabéns! Você foi aprovado.
−1,0rejeitado por MediaValidaMédia inválida (relê)
11,0rejeitado por MediaValidaMédia inválida (relê)

As linhas em negrito são os casos de fronteira — os que efetivamente comprovam que as faixas são contíguas e que os limites 5,0 e 7,0 pertencem à faixa superior.


7. Justificativas de projeto

7.1 Observação sobre a redação da regra

O enunciado descreve a faixa intermediária como "média entre 5,0 e 6,9". Lido ao pé da letra, isso deixaria as médias de 6,91 a 6,99 sem classificação — não seriam recuperação (passam de 6,9) nem aprovação (não chegam a 7,0).

O algoritmo adota a leitura pedagógica correta: a faixa intermediária vai de 5,0 até qualquer valor abaixo de 7,0. Por isso o teste é media < 7,0, e não media <= 6,9. Assim, as três faixas ficam contíguas e sem lacunas, cobrindo toda a escala de 0,0 a 10,0.

O mesmo cuidado vale para as fronteiras exatas: 5,0 é recuperação (não reprovação) e 7,0 é aprovação (não recuperação), conforme o "5,0 ou mais" e o "7,0 ou mais" implícitos na regra.

7.2 Pontos de atenção na codificação

  • Retornos antecipados dispensam o Senao. Em ClassificarDesempenho, cada Retorne encerra a função na hora. Por isso os três testes ficam sequenciais e ainda assim mutuamente exclusivos — o segundo Se só é alcançado quando o primeiro foi falso. O efeito é o mesmo do encadeamento Se/Senao, com menos aninhamento.

  • O limite inferior nunca é testado duas vezes. O segundo teste é m < 7, e não m >= 5 E m < 7. A condição m >= 5 já está garantida pelo fato de o primeiro teste ter falhado — repeti-la seria redundante e abriria espaço para inconsistência caso uma das notas de corte mudasse no futuro.

  • Comparação < 7 em vez de <= 6,9. Esta é a decisão que fecha a lacuna dos valores entre 6,91 e 6,99. Com <= 6,9, uma média de 6,95 cairia no Senao final e seria classificada indevidamente como aprovada.

  • Repita ... Ate para a entrada. O laço pós-testado é o adequado aqui porque a leitura precisa acontecer pelo menos uma vez antes de qualquer validação — diferente do Enquanto, que testaria uma variável ainda não preenchida.

  • Situação e mensagem separadas. ClassificarDesempenho devolve um código ("APROVADO"), não o texto final. Isso permite reaproveitar a classificação para outros fins — gravar em boletim, contar alunos por situação, aplicar cor na tela — sem depender da redação da frase.