Ir ao conteúdo
  • Cadastre-se

Algoritmo dando erro


Posts recomendados

Ola galera, sou novo aqui no forum e estou começando a aprender programação.

Estou criando um algoritmo que eu coloque o nome do aluno, com suas duas notas, dando a media das duas notas.

Até ai tudo bem, porém quero que no final ele me diga qual o aluno com a maior media e qual a maior media.

Segue algoritmo:

algoritmo "melhoralunodasala"
var
      aluno, aluno_top: caractere
      nota, nota2, cont2, media, media2: real
      sala, cont: inteiro
inicio
      cont <- 1
      cont2 <- 0

      Escreval ("----------------------------------------------------------")
      Escreval ("                    Escola Santa Nota                     ")
      Escreval ("----------------------------------------------------------")
      Escreval ("Quantos alunos tem na sala? ")
      Leia (sala)
           Enquanto (cont <= sala) faca
                    Escreval ("--------------------------------------------")
                   Escreval ("Aluno", cont)
                   Escreval ("Qual o nome do aluno? ")
                   Leia (aluno)
                   Escreval ("Qual a primeira nota de ", aluno, "?")
                   Leia (nota)
                   Escreval ("Qual a segunda nota de ", aluno, "?")
                   Leia (nota2)
                   media <- (nota + nota2) / 2)
                   Escreval ("A média do ", aluno, " foi de ", media)
                   cont <- cont + 1

           FimEnquanto
           media2 <- 9999999
                  Se (media2 > media) então
                           media2 <- media
                           aluno_top <- aluno
                           FimSe

      Escreval ("O melhor aproveitamento foi do aluno ", aluno_top, "com a media ", media2)

fimalgoritmo

No final onde deveria aparecer a maior media, esta aparecendo a ultima media digitada, já tentei de varias formas e não vai.

 

Agradeço, antes de mais nada.

Obrigado

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@Kepler Piaggi

 

Esse trecho deve estar antes do enquanto:

media2 <- 9999999

Se você quer mostrar a maior média, media2 deveria receber o menor valor e não o maior.

Ficaria assim:

media2 <- -1

 

 

E esse trecho deve ficar dentro do enquanto:

Se (media2 > media) então
                           media2 <- media
                           aluno_top <- aluno
                           FimSe

 

Pois não tem como ele testar todas as médias fora do laço de repetição.

 

Eu também mudaria esse trecho:

Se (media > media2) então
                           media2 <- media
                           aluno_top <- aluno
                           FimSe

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

24 minutos atrás, Math.Pi disse:

@Kepler Piaggi

 

Esse trecho deve estar antes do enquanto:


media2 <- 9999999

Se você quer mostrar a maior média, media2 deveria receber o menor valor e não o maior.

Ficaria assim:


media2 <- -1

 

 

E esse trecho deve ficar dentro do enquanto:


Se (media2 > media) então
                           media2 <- media
                           aluno_top <- aluno
                           FimSe

 

Pois não tem como ele testar todas as médias fora do laço de repetição.

 

Eu também mudaria esse trecho:


Se (media > media2) então
                           media2 <- media
                           aluno_top <- aluno
                           FimSe

 

 

Obrigado @Math.Pi , consegui, porém tive que declarar a variavel media2 em 1.

Ficou assim:

inicio
      cont <- 1
      media2 <- 1
      Escreval ("----------------------------------------------------------")
      Escreval ("                    Escola Santa Nota                     ")
      Escreval ("----------------------------------------------------------")
      Escreval ("Quantos alunos tem na sala? ")
      Leia (sala)
           Enquanto (cont <= sala) faca
                   Escreval ("--------------------------------------------")
                   Escreval ("                Aluno", cont, "             ")
                   Escreval ("Qual o nome do aluno? ")
                   Escreva ("R: ")
                   Leia (aluno)
                   Escreval ("Qual a primeira nota de ", aluno, "?")
                   Leia (nota)
                   Escreval ("Qual a segunda nota de ", aluno, "?")
                   Leia (nota2)
                   media <- (nota + nota2) / 2)
                   Escreval ("A média do ", aluno, " foi de ", media)
                   cont <- cont + 1
                        Se (media > media2) então
                           media2 <- media
                           aluno_top <- aluno
                           FimSe

           FimEnquanto
      Escreval ("--------------------------------------------")
      Escreval ("O melhor aproveitamento foi do aluno ", aluno_top, " com a media ", media2)

fimalgoritmo

         

  • Curtir 3
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @Kepler Piaggi,
 

Sobre:

4 horas atrás, Kepler Piaggi disse:

Obrigado @Math.Pi , consegui, porém tive que declarar a variavel media2 em 1.

Nesse caso terá problemas, pois "a maior média inicial deverá ser menor que a menor média possível", pois caso contrário pode ocorrer de nunca ser "maior", daí ninguém vai ter a maior média! Ex.: João tem média 0.5 e Maria média 0.!

 

Ou insere um valor menor que o mínimo, como o "-1" já citado (no VisuAlg vai ficar com dois "-", pois um "-" será do comando "<-"), ou a primeira média seria sempre a maior média, até que venha (ou não) ser atualizada por outra... ou poderia fazer de outra forma viável (que conseguir imaginar e implantar...)

 

 

Complementando:

1) Nomenclatura de variáveis

Uma recomendação seria utilizar nomes mais sugestíveis para o contexto da variável. Ex.:

5 horas atrás, Kepler Piaggi disse:

var
      aluno, aluno_top: caractere
      nota, nota2, cont2, media, media2: real
      sala, cont: inteiro

 

 

- A media2 poderia ser algo como media_top (seguindo o raciocínio do nome do aluno) ou algo como maiorMedia. Acho que media2 fica parecendo que um mesmo aluno tem duas médias...

- A variável cont2 não está sendo usada. (eu acho)

- Em vez de sala, poderia ser algo como qtdAlunos.

 

Por ai vai...

 

2) Tratamento da faixa de notas

Inicialmente você pode subentender que sempre o usuário vai digitar notas válidas, como de "0 a 10"... Sendo assim, e corrigindo o que foi citado lá em cima, o programa deve funcionar bem. Mas caso queira, posteriormente, poderia implementar uma lógica para verificar se o número informado está entre a faixa aceitável ou não. Caso não esteja, poderia pedir para inserir novamente. (essa questão pode ser feita para depois... como uma "melhoria")

 

3) Identação de código

Essa é uma questão que sempre tento levantar. No seu caso, o comando enquanto deveria está na mesma coluna do comando anterior, ou seja, o que vai ser identado é o que está "dentro" do enquanto. O mesmo princípio vale para o se. Eles comandos que estão na mesma sequência do comando anterior, o que está dentro do se é que é identado, entende? Imagine as pastas do computador. Cada comando seria uma pasta... (ex.: não tem porque a pasta Windows está uma coluna pra frente da pasta Usuários. O que estaria identado, é a pasta System32, que está dentro da Windows).

Dando uma identação de 3 espaços, a identação poderia ficar assim:

algoritmo "melhoralunodasala"
var
   aluno, aluno_top: caractere
   nota, nota2, cont2, media, media2: real
   sala, cont: inteiro
Inicio
cont <- 1
media2 <- 1
Escreval ("----------------------------------------------------------")
Escreval ("                    Escola Santa Nota                     ")
Escreval ("----------------------------------------------------------")
Escreval ("Quantos alunos tem na sala? ")
Leia (sala)
Enquanto (cont <= sala) faca
   Escreval ("--------------------------------------------")
   Escreval ("                Aluno", cont, "             ")
   Escreval ("Qual o nome do aluno? ")
   Escreva ("R: ")
   Leia (aluno)
   Escreval ("Qual a primeira nota de ", aluno, "?")
   Leia (nota)
   Escreval ("Qual a segunda nota de ", aluno, "?")
   Leia (nota2)
   media <- (nota + nota2) / 2)
   Escreval ("A média do ", aluno, " foi de ", media)
   cont <- cont + 1
   Se (media > media2) então
      media2 <- media
      aluno_top <- aluno
   FimSe //obs.: esse comando poderia ficar alinhado com a linha acima, depende do padrão a seguir
FimEnquanto //esse comando poderia ficar alinhado com a linha acima, depende do padrão a seguir
Escreval ("--------------------------------------------")
Escreval ("O melhor aproveitamento foi do aluno ", aluno_top, " com a media ", media2)
FimAlgoritmo

***
Por ai vai

No aguardo.

 

 

 

 

  • Curtir 3
Link para o comentário
Compartilhar em outros sites

@Simon Viegas  entendi a questão do valor da media2, mudei para -1, muito obrigado pela dica.

Em relação a indentação, corrigi.

 

Fiz melhorias no programa, tudo funcionando certinho, de uma olhada como ficou:

algoritmo "melhoralunodasala"
var
aluno, aluno_top: caractere
nota, nota2, media, media2: real
sala, cont: inteiro

inicio
cont <- 1
media2 <- -1

Escreval ("-----------------------------------------------------------------------------------")
Escreval ("                               Escola Santa Nota                     ")
Escreval ("-----------------------------------------------------------------------------------")
Escreval ("Quantos alunos tem na sala? ")
Escreva ("R: ")
Leia (sala)
Enquanto (cont <= sala) faca
   Escreval ("----------------------------------------------------------------------------------------")
   Escreval ("                                    Aluno", cont, "             ")
   Escreval ("Qual o nome do aluno? ")
   Escreva ("R: ")
   Leia (aluno)
   Escreval ("Qual a primeira nota de ", aluno, "?")
   Escreva ("R: ")
   Leia (nota)
   Escreval ("Qual a segunda nota de ", aluno, "?")
   Escreva ("R: ")
   Leia (nota2)
   Escreval (" ")
   media <- (nota + nota2) / 2)
   Escreval ("A média de ", aluno, " foi de ", media, "!")
   Escreval (" ")
   Se (media >= 9) e (media <= 10) então
      Escreval ("Excelente, ", aluno, " tirou nota A! ")
   senao
      Se (media >= 8) e (media <= 8.9) então
         Escreval ("Otimo, ", aluno, " tirou nota B! ")
      Senao
         Se (media >= 6) e (media <= 7.9) então
            Escreval ("Ok, ", aluno, " tirou nota C! ")
         Senao
            Se (media >= 4.9) e (media <= 5.9) então
               Escreval (aluno, " tirou nota C e está de recuperação! ")
            Senao
               Se (media >= 4) e (media <= 4.8) então
                  Escreval (aluno, " tirou nota D e está parcialmente reprovado! ")
               Senao
                  Se (media <= 3.9) então
                     Escreval (aluno, " tirou nota E e está completamente reprovado! ")
                  FimSe
               FimSe
            FimSe
         FimSe
      FimSe
   FimSe
   cont <- cont + 1
   Se (media > media2) então
      media2 <- media
      aluno_top <- aluno

   FimSe
FimEnquanto
Escreval ("-------------------------------------------------------------------------------------")
Escreval (" ")
Escreval ("O melhor aproveitamento foi do(a) aluno(a) ", aluno_top, " com a media ", media2, "!")

fimalgoritmo

Acho que ficou legal por enquanto.

Obrigado mais uma vez.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá.

 

Só um detalhe:

15 horas atrás, Kepler Piaggi disse:

   Se (media >= 9) e (media <= 10) então
      Escreval ("Excelente, ", aluno, " tirou nota A! ")
   senao
      Se (media >= 8) e (media <= 8.9) então
         Escreval ("Otimo, ", aluno, " tirou nota B! ")

 

As faixas de notas não estão fechadas... tem nota que não entraria.. por ex.: 8.95.

 

Poderia usar assim:

Se (media >= 8) e (media < 9) então


Daí ajustaria as outras condições também...

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

2 horas atrás, Simon Viegas disse:

Olá.

 

Só um detalhe:

As faixas de notas não estão fechadas... tem nota que não entraria.. por ex.: 8.95.

 

Poderia usar assim:


Se (media >= 8) e (media < 9) então


Daí ajustaria as outras condições também...

@Simon Viegas  entendi, valor corrigido.

Obrigado

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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...