1
resposta

[Projeto] Desafio: Classificando desempenho acadêmico

{
Escreva("nota da prova 1:");
Leia(nota1);

Escreva("nota da prova 2:");
Leia(nota2);

nota1 + nota2 / 2 = media; // calculo da média

Se(media < 5,0) // condição para reprovação
{
Escreva("Você está reprovado");
}

Senão se(media > 5,0 & media < 6,9) // & pois somente se ambas as condições forem atendidas
{
Escreva("Você está de recuperação");
}

Senao // se nenhuma das condições anteriores forem atendidas, so resta a aprovação.
{
Escreva("Você está aprovado!");
}
}

1 resposta

Olá, João Pedro! Como vai?

Parabéns por enfrentar o desafio e estruturar a lógica do seu algoritmo! O uso do pseudocódigo é a melhor maneira de treinar o Pensamento Computacional, pois permite que você foque na resolução do problema antes de se preocupar com as regras rígidas de uma linguagem como C#, Java ou Python.

A sua estrutura com os blocos Se, Senão se e Senão ficou muito bem desenhada e a lógica de eliminação das notas está corretíssima! No entanto, se fôssemos rodar esse algoritmo em um computador agora, encontraríamos três pequenos bugs (dois de matemática/sintaxe e um de lógica de intervalos) que fariam o programa dar erro ou calcular as notas de forma errada.

Vamos analisar linha por linha para entender como deixar o seu algoritmo perfeito:


Os 3 Detalhes que Precisam de Ajuste

1. A Regra da Atribuição (Quem guarda quem?)

Na linha onde você fez o cálculo:

nota1 + nota2 / 2 = media;

Na programação e na lógica, a operação de atribuição funciona da direita para a esquerda. O computador primeiro calcula o que está do lado direito do sinal de igual (=) e depois guarda o resultado na variável que está isolada do lado esquerdo.

  • O correto é: media = ...

2. A Precedência Matemática (A ordem das operações)

Na mesma linha, do jeito que está escrito, o computador vai primeiro dividir a nota2 por 2 e só depois somar o resultado com a nota1. Isso acontece porque a divisão tem prioridade matemática sobre a adição.

  • Exemplo do bug: Se o aluno tirar 10 na Prova 1 e 6 na Prova 2, o computador faria: $6 / 2 = 3$ e depois $10 + 3 = 13$. A média daria 13!
  • A solução: Usar parênteses para forçar o computador a somar as duas notas primeiro: (nota1 + nota2) / 2

3. A "Zona de Limbo" das Notas (Operadores de Limiar)

Repare nas suas condições:

  • Se(media < 5.0) $\rightarrow$ Reprovado (Ex: nota 4.9)
  • Senão se(media > 5.0 ...) $\rightarrow$ Recuperação (Ex: nota 5.1)

Se o aluno tirar exatamente a média 5.0 ou exatamente a média 6.9, ele não vai entrar em nenhuma das duas primeiras condições e o programa vai cair direto no Senão, dizendo que ele foi aprovado! Para corrigir isso, precisamos usar os operadores de maior ou igual (>=) e menor ou igual (<=).


O Algoritmo Corrigido e Perfeito

Ajustando esses pontos e usando o padrão de ponto flutuante (com ponto no lugar da vírgula para decimais), o seu pseudocódigo fica assim:

{
    Escreva("nota da prova 1:");
    Leia(nota1);
    Escreva("nota da prova 2:");
    Leia(nota2);
    
    // CORREÇÃO 1 e 2: Variável na esquerda e parênteses para somar antes de dividir
    media = (nota1 + nota2) / 2; 

    // CORREÇÃO 3: Incluindo a nota 5.0 na recuperação com o '<='
    Se (media < 5.0) 
    {
        Escreva("Você está reprovado");
    }
    // CORREÇÃO 3: Incluindo os limites com '>=' e '<=' para não deixar nenhuma nota de fora
    Senão se (media >= 5.0 & media <= 6.9) 
    {
        Escreva("Você está de recuperação");
    }
    Senao 
    {
        Escreva("Você está aprovado!");
    }
}

Parabéns pelo empenho e pela ótima sacada de usar o operador comercial & para a conjunção lógica! Ajustar esses pequenos detalhes faz parte do dia a dia de qualquer desenvolvedor e é o que vai blindar a sua lógica de programação contra erros. Continue firme nos desafios de pensamento computacional!

Espero que possa ter lhe ajudado!