Ir ao conteúdo

Posts recomendados

Postado

Oi pra vocês. Eu estou aprendendo a programar tem pouquíssimo tempo, e tenho que criar um programa (bem simples, no VisuAlg mesmo) pra definir a maior e a menor nota de uma quantidade de estudantes e atribuir os seus nomes no fim como "MelhorAluno" e "PiorAluno".
O problema é que sempre que executo o programa, ele me dá a menor nota sempre como "0", e não me mostra o nome do "PiorAluno" no fim.
Alguém poderia me informar/sugerir onde posso estar errando?

 

Vou inserir o que fiz até o momento:

 

algoritmo "Aluno"
var
   A, C : Inteiro
   N, MelhorAluno, PiorAluno: Caractere
   NOTA, maior, menor: Real
inicio
      Escreva ("Quantos alunos tem na turma? ")
      Leia (A)
      C <- 1
      Enquanto (C <= A) faca
               EscrevaL ("Aluno", C)
               Escreva ("Nome do aluno: ")
               Leia (N)
               Escreva ("Nota do aluno: ")
               Leia (NOTA)
               Se (NOTA > maior) então
                  maior <- NOTA
                  MelhorAluno <- N
               FimSe
               Se (NOTA < menor) então
                  menor <- NOTA
                  PiorAluno <- N
               FimSe
               C <- C + 1
      FimEnquanto
      EscrevaL ("O aluno com a maior nota foi ", MelhorAluno, " com aproveitamento de ", maior)
      EscrevaL ("O aluno com menor aproveitamento foi ", PiorAluno, " com nota ", menor)
fimalgoritmo


 

  • Curtir 1
Postado

@devair1010  Muito obrigada pela sugestão
Não consegui resolver da forma como sugeriu, mas consegui declarando um valor para a variável antes de while, da seguinte forma:

 

	C <- 1
	menor <- 100
    Enquanto (C <= A) faca

 

O programa estava apresentando um "erro" na leitura, e sempre me dava a menor nota como 0 (mesmo tendo inserido outro valor), pois "pulava" a parte em que eu solicitava para fazer o comparativo. Acontece que declarando um valor em " menor <- 100 " ele pôde comparar o menor número inserido e o programa funcionou perfeitamente.

  • Membro VIP
Postado

@Maidaekan, isso. Dessa forma também funciona. A ideia seria "iniciar o menor com o maior valor possível para o contexto"... ou simplesmente inicializar com o maior valor possível para o tipo de dado. Daí, sempre na primeira comparação esse valor deve se atualizar.

 

A forma que o @devair1010 passou seria outra forma... talvez um pouco mais elegante e precisa, mas em compensação pode ser mais custoso, já que, para todo loop, será verificado novamente se é o primeiro aluno... o que seria um "esforço extra". 

ADENDO: veja, na prática, esse esforço extra é irrisório no ponto de vista técnico, seria mais numa questão de lógica / conceito. O resultado final meio que vai ser igual... enfim. Tente fazer da forma que ele passou também. Entenda o funcionamento e vá ajustando o código... Vale a pena! Qualquer dúvida é só postar

ADENDO 2: ah! no código original dele tinha um "if" (em inglês) na primeira linha, tomei a liberdade para alterar para "se" (como é no VisualG).    Veja, se isso eventualmente teria sido um problema, o que poderiam se esperar era: "o que significa esse if"? Entende? Mas supostamente seria porque nas outras linguagens costumam se assim em inglês mesmo... deve ter sido a força do hábito, rs

  • Amei 1
Postado

@Simon Viegas Obrigada pelas sugestões 🥰
Eu consigo compreender o emprego do inglês nos códigos mesmo estando estudando em "portugol" haha
Apesar daquele ser um esforço extra e irrisório, eu estou tentando aprimorar minha visão lógica e passei um tempão tentando utilizar o modo que o @devair1010 me sugeriu, ainda sim não consegui fazer funcionar daquela maneira. Mas realmente, seria uma forma muito mais elegante rs
O negócio só funcionou mesmo depois de empregar o " menor <- 100 ", e ainda não consegui entender o motivo de não ter funfado da forma que o colega me falou pra fazer 😕 

  • Curtir 1
Postado

@Simon Viegas Na verdade agora não estou mais com problemas
Eu só não havia conseguido fazer da forma como ele sugeriu, mas agora está funcionando bem
Ainda sim, aqui o código:

 

 

algoritmo "Aluno"
var
   A, C: Inteiro
   N, MelhorAluno, PiorAluno: Caractere
   NOTA, maior, menor: Real
inicio
      Escreva ("Quantos alunos tem na turma? ")
      Leia (A)
      C <- 1
      menor <- 100
      Enquanto (C <= A) faca
               EscrevaL ("Aluno", C)
               Escreva ("Nome do aluno: ")
               Leia (N)
               Escreva ("Nota do aluno: ")
               Leia (NOTA)
               C <- C + 1
               Se (NOTA > maior) entao
                  maior <- NOTA
                  MelhorAluno <- N
               FimSe
               Se (NOTA < menor) entao
                  menor <- NOTA
                  PiorAluno <- N
               FimSe
      FimEnquanto
      EscrevaL ("O aluno com a maior nota foi ", MelhorAluno, " com aproveitamento de ", maior)
      EscrevaL ("O aluno com menor aproveitamento foi ", PiorAluno, " com nota ", menor)

 

A parte onde estava com problemas era no fim, onde solicito que o programa me informe o nome e qual foi a menor nota inserida.

  • Curtir 1
  • Membro VIP
Postado

@Maidaekan, este está funcionando, né?

Queria ver o código que está com problema e em qual parte.

 

Mas basicamente deve ser isso: coloque esse "inicializador condicional" dentro do laço de repetição... também após ter lido a nota... aí ele deve verificar se é a primeira nota ou não. Se sim, ele atribui a primeira nota como sendo o maior e o menor.

Para os outros loops, não vai mais ser o primeiro... daí, só vai ficar verificando se é um "novo" maior ou um "novo" menor.

Postado

@Simon Viegas Entendi. Coloquei o "inicializador condicional" dentro do laço de repetição também após ter lido a nota e voltou a apresentar o mesmo erro.
Enfim, como está funcionando vou deixar assim, mas muito obrigada pela ajuda ❤️ 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!