Melhor e pior aluno visualg

Pessoal, eu tô fazendo um exercício que pede o número de alunos de uma turma da escola, solicita a nota de cada um, e depois diz qual foi a melhor e a pior nota. Porém não estou conseguindo obter a pior nota. A melhor aparece, mas a pior não. O que estou estranhando é que o código é semelhante a um contador que me diz o menor e o maior número digitado, mas não está funcionando neste da escola.

algoritmo "semnome"
var
   A, M: Inteiro
   Nota, Melhor, Pior: Real
   N: Caractere
inicio
      Escreval("ESCOLA ALEATÓRIA")
      Escreva("Quantos alunos tem na turma? ")
      Leia(A)
      M <- 1
      Enquanto A >= M faca
               Escreva("Aluno", M, " : ")
               M <- M + 1
               Leia(N)
               Escreva("Digite a nota de ", N, " :")
               Leia(Nota)
               Se (Nota = 0) entao
                  Melhor <- Nota
                  Pior <- Nota
               FimSe
               Se (Nota > Melhor) entao
                  Melhor <- Nota
               FimSe
               Se (Nota < Pior) entao
                  Pior <- Nota
               FimSe
      FimEnquanto
      Escreva("A melhor nota foi: ", Melhor, ". E a pior foi: ", Pior)
      
fimalgoritmo

O que tem de errado nesse código que não me mostra a pior nota?

Inicie as variáveis Melhor e PIor fora do loop com valores fora dos limites das notas, por exemplo, se as notas vão de 0 a 10, inicie Melhor com -1 e Pior com 11, depois é só continuar a fazer as comparações dentro do loop separadamente como está fazendo.

Poderia me explicar a lógica? Fiz a alteração assim e funcionou.

Esses números servem para serem comparados com as notas lidas na primeira leitura, já que de outra forma não haveriam valores anteriores para serem comparados.

Atribuindo inicialmente -1 à melhor nota faz com que qualquer nota lida seja maior que esse valor, então ele é descartado logo na primeira comparação.

De forma semelhante, atribuindo 11 à pior nota, faz com que qualquer nota lida seja menor que esse valor, então ele é descartado também logo na primeira comparação.

Espero que você tenha percebido que com essas alterações, deve tirar o primeiro “Se” do seu programa.

E dê nomes mais significativos para as variáveis, porque “A”, “M” e “N” não dizem muita coisa para quem vai ler o seu código, principalmente quando estiver escrevendo programas mais complexos.

1 curtida

Entendi. Eu tinha retirado sim o primeiro “Se”. Quanto à dica sobre a definição das variáveis não tinha pensando nisso, vou me atentar. Obrigado!