Ir ao conteúdo
  • Cadastre-se

VisualG Não faço ideia de como desenvolver esse código


Posts recomendados

Boa tarde, gente! Sou uma programadora iniciante e iniciei a pouco mais de uma semana um curso de formação acelerada em programação. 

 

Me passaram o seguinte projeto:

 

Instruções do projeto

---------------------------------------------------------

 

Após uma prova de vestibular, uma escola quer identificar quantos dos seus alunos foram aprovados em cada turma de formandos. Ela quer saber qual aluno teve a maior nota e de qual turma ele é. Nessa escola, há quatro turmas (A, B, C e D) com vinte e cinco alunos cada.

 

Elabore um algoritmo que solicite o nome e a nota do vestibular aos alunos. Depois, informe quantos deles foram aprovados, de que turma são, qual a maior nota em cada turma e qual aluno teve a maior nota de todas.

 

Para que o aluno seja aprovado no vestibular, ele deverá obter nota maior ou igual a 7.

 

ATENÇÃO: As notas por turma não podem se repetir.

 

 

Sugestões sobre como posso desenvolvê-lo? (Ainda não aprendi vetores)

 

 

 

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

  • Membro VIP

A proposta para resolver qualquer problema é primeiro tentar entendê-lo.

 

Basicamente ele quer coletar alguns dados relacionados a notas e quer uma espécie de relatório...


Partindo para implementação, cria um esboço inicial:

algoritmo "Aprovados num vestibular"
//Após uma prova de vestibular, uma escola quer identificar [1] quantos dos
//seus alunos foram aprovados em cada turma de formandos. Ela quer saber [2]
//qual aluno teve a maior nota e de [3] qual turma ele é. Nessa escola, há
//quatro turmas (A, B, C e D) com vinte e cinco alunos cada.
//Elabore um algoritmo que solicite o nome e a nota do vestibular aos alunos.
//Depois, informe quantos deles foram aprovados, de que turma são, qual a maior
//nota em cada turma e qual aluno teve a maior nota de todas.
//Para que o aluno seja aprovado no vestibular, ele deverá obter nota maior ou
//igual a 7.
//ATENÇÃO: As notas por turma não podem se repetir.
var
  
inicio

fimAlgoritmo

 

Observe que é pura interpretação de texto... Uma dica interessante é abstrair o problema geral em problemas menores.. Por exemplo, de vez de tentar fazer tudo de uma vez, que tal fazer algo mais simples, como por exemplo encontrar a maior nota de apenas uma turma? Algo como:

 

algoritmo "Aprovados num vestibular"
//Após uma prova de vestibular, uma escola quer identificar [1] quantos dos
//seus alunos foram aprovados em cada turma de formandos. Ela quer saber [2]
//qual aluno teve a maior nota e de [3] qual turma ele é. Nessa escola, há
//quatro turmas (A, B, C e D) com vinte e cinco alunos cada.
//Elabore um algoritmo que solicite o nome e a nota do vestibular aos alunos.
//Depois, informe quantos deles foram aprovados, de que turma são, qual a maior
//nota em cada turma e qual aluno teve a maior nota de todas.
//Para que o aluno seja aprovado no vestibular, ele deverá obter nota maior ou
//igual a 7.
//ATENÇÃO: As notas por turma não podem se repetir.
var
   nota : real
   maiorNota : real
   i : inteiro
inicio
   maiorNota <- 0

   para i de 1 ate 5 faca
      escreva ("Nota: ")
      leia(nota)

      se (nota > maiorNota) entao
         maiorNota <- nota
      fimSe
   fimPara

   escrevaL("Maior nota: ", maiorNota:1:2)
fimAlgoritmo

 

image.png

 

 

Para facilitar a tua vida, coloque para gerar números aleatórios (é uma perda de tempo absurda ficar digitando a cada testes). Algo como:

 

   para i de 1 ate 5 faca
      escreva ("Nota: ")
      ALEATORIO 3,10
      leia(nota)
      ALEATORIO OFF

      se (nota > maiorNota) entao
         maiorNota <- nota
      fimSe
   fimPara


Simplesmente o VisualG vai "digitar" números aleatórios para os leia que estiverem entre os comando ALEATORIO... bem autoexplicativo. Daí dá até para ir testando com 25 mesmo, só mudar o parâmetro do laço de repetição.

 

Pronto... agora implemente outra coisa, por exemplo, coloque para ler nomes (nome) e use outra variável para armazenar o nome da aluno com a maior nota (nomeMaiorNota). Exibia também o nome junto com a maior nota.

 

Poste o código aqui. Se tiver dúvidas, é só postar.

 

Se terminar, tente implementar outra coisa, exemplo: contar quantos foram aprovados. Crie uma variável para servir de contador (qtdAprovados) e uma estrutura de seleção (se) para verificar se foi aprovado ou não (ir atualizando a variável). Exiba também a quantidade de aprovador na tela... por aí vai.

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

Segui suas instruções e consegui fazer um programa que coleta os dados dos alunos (usei apenas de 1 até 2 para fazer os testes, mas depois colocarei até 25), diz se ele foi aprovado ou não, quem teve a melhor nota e quantos foram os aprovados. Até então, tá rodando certinho!!!

 

Segue o código

 

Algoritmo "SistemadeNotas"
// Após uma prova de vestibular, uma escola quer identificar [1] quantos dos
//seus alunos foram aprovados em cada turma de formandos. Ela quer saber [2]
//qual aluno teve a maior nota e de [3] qual turma ele é. Nessa escola, há
//quatro turmas (A, B, C e D) com vinte e cinco alunos cada.

//Elabore um algoritmo que solicite o nome e a nota do vestibular aos alunos.
//Depois, informe quantos deles foram aprovados, de que turma são, qual a maior
//nota em cada turma e qual aluno teve a maior nota de todas.
//Para que o aluno seja aprovado no vestibular, ele deverá obter nota maior ou
//igual a 7.

//ATENÇÃO: As notas por turma não podem se repetir.


Var
   // Seção de Declarações das variáveis

   Q, contador, qtd_aprovados: inteiro
   A, MA: caractere
   Nota, Melhor_Nota: Real
   Resposta: caractere




Inicio

   Escreval("-------------------------------------------")
   Escreval("--------------Escola Progresso-------------")
   Escreval("-------------------------------------------")


   escreval("Digite Qual a Turma ")
   Leia (resposta)
   Se (resposta = "A") entao
      Escreval ("Vamos cadastrar as notas dos alunos da turma A")

      contador <- 1
      Melhor_Nota <- 0
      qtd_aprovados <- 0

      Para contador de 1 ate 2 faca

         Escreval("Aluno", contador)
         Escreval("Nome do(a) aluno(a): ")
         Leia (A)
         Escreval("Nota de " , A , ": ")
         Leia (Nota)

         Se (Nota > Melhor_nota) entao
            Melhor_nota <- Nota
            Ma <- A

            Se(Nota >= 7) entao
               Escreval("Aluno foi aprovado")
               qtd_aprovados <- qtd_aprovados + 1
            Senao
               Escreval("Aluno foi reprovado")

            Fimse
         Fimse
      Fimse

   Fimpara


   Escreval("O maior aproveitamento foi do(a) aluno(a) ",MA, " com nota", Melhor_Nota)


   Escreval("A quantidade de aprovados foi " ,qtd_aprovados)


Fimalgoritmo


Agora queria saber como posso fazer para dar a opção do usuário selecionar mais de uma turma (A, B, C, D). (Pensei na escolhacaso, não sei se seria uma boa). No exemplo, fiz apenas com uma turma, para ficar algo mais simples!

 

E, além disso, como eu poderia fazer para, no final, exibir quem foi o melhor em cada turma, e quem foi o melhor de todos e a turma dele!

 

Aguardando orientações

 

Obs1: o comando ALEATORIO realmente é mais prático, mas quando fui fazer os testes, percebi que ele repete algumas notas (usei como exemplo 1,10). No entanto, o intuito justamente é que os alunos tenham notas diferentes, então, creio que precisarei fazer isso manualmente, mas usarei intervalos menores no laço de repetição apenas para testes!

 

Obs2: muito obrigada pelo direcionamento, fez toda diferença!! 😉 

 

 

 

Programa funcionando assim:

 

Sistemadenotas1.PNG.726825715bb800c5eaed9449dfe78250.PNG

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

  • Membro VIP

@Giovanna Gabrielle, algumas pontos inicias:
 

Sobre "Maior nota" e  "Aluno aprovado", são duas verificações distintas:

         se (nota > melhor_nota) entao
            melhor_nota <- nota
            na <- a
         fimSe

         se (nota >= 7) entao
            escreval("Aluno foi aprovado")
            qtd_aprovados <- qtd_aprovados + 1
         senao
            escreval("Aluno foi reprovado")
         fimSe

 

Para ser aprovado não precisa ser a atual maior nota.

 

 

 

Sobre 

2 horas atrás, Giovanna Gabrielle disse:

Agora queria saber como posso fazer para dar a opção do usuário selecionar mais de uma turma (A, B, C, D). (Pensei na escolhacaso, não sei se seria uma boa). No exemplo, fiz apenas com uma turma, para ficar algo mais simples!)


Sim. Acho que poderia ser com "escolhacaso". 

 

 

 

Sobre 

2 horas atrás, Giovanna Gabrielle disse:

E, além disso, como eu poderia fazer para, no final, exibir quem foi o melhor em cada turma

 

Poderia criar uma variável para cada turma.

 

3 horas atrás, Giovanna Gabrielle disse:

e quem foi o melhor de todos e a turma dele!


Só usar a mesma variável para todos. Basicamente você precisaria verificar qual a maior nota das maiores notas. 

 

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

@Simon Viegas

3 horas atrás, Simon Viegas disse:

@Giovanna Gabrielle, algumas pontos inicias:
 

Sobre "Maior nota" e  "Aluno aprovado", são duas verificações distintas:

         se (nota > melhor_nota) entao
            melhor_nota <- nota
            na <- a
         fimSe

         se (nota >= 7) entao
            escreval("Aluno foi aprovado")
            qtd_aprovados <- qtd_aprovados + 1
         senao
            escreval("Aluno foi reprovado")
         fimSe

 

Para ser aprovado não precisa ser a atual maior nota.

 

 

 

 

 

 

Quanto a isso, corrigi! realmente ficou melhor

3 horas atrás, Simon Viegas disse:

Sobre 


Sim. Acho que poderia ser com "escolhacaso". 

 

 

 

 

 

 

Tentei fazer dessa forma, mas não consegui sair do lugar...acabei usando repita/ate

 

3 horas atrás, Simon Viegas disse:

 

Sobre 

 

Poderia criar uma variável para cada turma.

 


Só usar a mesma variável para todos. Basicamente você precisaria verificar qual a maior nota das maiores notas. 

 

 

Nesse últimos casos, não consegui avançar!!!

 

Até então, meu código está assim

Var
   // Seção de Declarações das variáveis

   contador, qtd_aprovados: inteiro
   Aluno, MA: caractere
   Nota, Melhor_Nota: Real
   resposta: caractere
   turmaA, turmaB, turmaC, turmaD: caractere




Inicio
   Escreval("-------------------------------------------")
   Escreval("--------------Escola Progresso-------------")
   Escreval("-------------------------------------------")
   Escreval("")
   Escreval("-----Sistema de notas - Vestibular---------")
   Escreval("")
   Escreval("")

   Repita
      Escreval("------------Digite a turma:-------------")
      Leia (resposta)
      Se (resposta = "A") entao
         Escreval ("Vamos cadastrar os alunos da turma A")
      Senao
         Se (resposta = "B") entao
            Escreval ("Vamos cadastrar os alunos da turma B")
         Senao
            Se (resposta = "C") entao
               Escreval ("Vamos cadastrar os alunos da turma C")
            Senao
               Se (resposta = "D") entao
                  Escreval ("Vamos cadastrar os alunos da turma D")
               Fimse
            Fimse
         Fimse
      Fimse



      contador <- 1
      Melhor_Nota <- 0
      qtd_aprovados <- 0

      Para contador de 1 ate 3 faca

         Escreval("Aluno", contador)
         Escreval("Nome do(a) aluno(a): ")
         Leia (Aluno)
         Escreval("Nota de " , Aluno , ": ")
         Leia (Nota)

         Se (Nota > Melhor_nota) entao
            Melhor_nota <- Nota
            Ma <- Aluno
         Fimse

         Se(Nota >= 7) entao
            Escreval ("Aluno foi aprovado")
            qtd_aprovados <- qtd_aprovados + 1
         Senao
            Escreval ("Aluno foi reprovado")

         Fimse

      Fimpara

      Escreval("Você quer cadastrar outra turma? [S/N]")
      Leia(resposta)
   Ate (resposta = "N")


   Escreval("A quantidade de aprovados foi", qtd_aprovados)

   Escreval("O maior aproveitamento foi do(a) aluno(a) ",MA, " com nota", Melhor_Nota)


Fimalgoritmo

 

 

Como você sugere que eu implemente as variáveis das turmas, para saber quais foram os melhores alunos? e pra, depois, saber quais foram os aprovados, de que turma são e as melhores notas em cada turma. Creio que, quando eu definir isso, ficará mais fácil de saber qual aluno foi o melhor de todos. 

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

19 horas atrás, Giovanna Gabrielle disse:

Como você sugere que eu implemente as variáveis das turmas, para saber quais foram os melhores alunos? e pra, depois, saber quais foram os aprovados, de que turma são e as melhores notas em cada turma. Creio que, quando eu definir isso, ficará mais fácil de saber qual aluno foi o melhor de todos. 

Recomendo você declarar dessa maneira

algoritmo "aprovados"

const
   Q_TURMAS = 4
   Q_ALUNOS = 25

var
   notas_alunos:vetor [1..Q_TURMAS, 1..Q_ALUNOS] de real
   nomes_alunos:vetor [1..Q_TURMAS, 1..Q_ALUNOS] de caractere
   maiores_turma:vetor [1..Q_TURMAS] de inteiro

   turmas, alunos: inteiro
   maior_nota:real
   posicao_nota:inteiro

   nomes:vetor [1..5] de caractere
   sob_nomes:vetor [1..5] de caractere

inicio
   // Inicia os nomes
   nomes[1] <- "Jose"
   nomes[2] <- "Maria"
   nomes[3] <- "Michellin"
   nomes[4] <- "Ronaldo"
   nomes[5] <- "Ivanildo"

   sob_nomes[1] <- " Machado"
   sob_nomes[2] <- " Do Allamo"
   sob_nomes[3] <- " Santana"
   sob_nomes[4] <- " Pinto"
   sob_nomes[5] <- " Soares"

   // Pega os nomes e as notas
   para turmas de 1 ate Q_TURMAS faca
      escreval("Digite os nomes e as notas dos alunos da turma ", carac(asc("A")+(turmas-1)))
      para alunos de 1 ate Q_ALUNOS faca
         escreval("Digite o nome do aluno [", alunos, "]")
         //leia(nomes_alunos[turmas, alunos])
         nomes_alunos[turmas, alunos] <- nomes[randi(5)+1]+sob_nomes[randi(5)+1]
         escreval(nomes_alunos[turmas, alunos])
         escreval("Digite a nota do aluno")
         //leia(notas_alunos[turmas, alunos])
         notas_alunos[turmas, alunos] <- (rand*9)+1
         escreval(notas_alunos[turmas, alunos]:2:2)
      fimPara
   fimPara

   para turmas de 1 ate Q_TURMAS faca
      maior_nota <- 0.0
      para alunos de 1 ate Q_ALUNOS faca
         // Checa o aluno com a maior nota
         se maior_nota < notas_alunos[turmas, alunos] entao
            maior_nota <- notas_alunos[turmas, alunos]
            posicao_nota <- alunos
         fimSe
      fimPara
      maiores_turma[turmas] <- posicao_nota
   fimPara

   escreval("Maiores notas de cada turma")
   para turmas de 1 ate Q_TURMAS faca
      escreval("Maior nota da turma ", carac(asc("A")+(turmas-1)))
      escreval("Aluno ", nomes_alunos[turmas, maiores_turma[turmas]])
      escreval("Nota ", notas_alunos[turmas, maiores_turma[turmas]]:2:2)
   fimPara
fimAlgoritmo

 

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

  • Membro VIP
Em 19/06/2022 às 22:51, Giovanna Gabrielle disse:

Tentei fazer dessa forma, mas não consegui sair do lugar...acabei usando repita/ate


Então, "escolha/caso" é uma estrutura de seleção, ou seja, seria uma opção contra "se/então". Só para exemplificar.


Isso:

Em 19/06/2022 às 22:51, Giovanna Gabrielle disse:
      Se (resposta = "A") entao
         Escreval ("Vamos cadastrar os alunos da turma A")
      Senao
         Se (resposta = "B") entao
            Escreval ("Vamos cadastrar os alunos da turma B")
         Senao
            Se (resposta = "C") entao
               Escreval ("Vamos cadastrar os alunos da turma C")
            Senao
               Se (resposta = "D") entao
                  Escreval ("Vamos cadastrar os alunos da turma D")
               Fimse
            Fimse
         Fimse
      Fimse


É análogo a isso:
 

      escolha resposta
      caso "A"
         escrevaL("Vamos cadastrar os alunos da turma A")
      caso "B"
         escrevaL("Vamos cadastrar os alunos da turma B")
      caso "C"
         escrevaL("Vamos cadastrar os alunos da turma C")
      caso "D"
         escrevaL("Vamos cadastrar os alunos da turma D")
      fimEscolha

 

São "a mesma coisa"... apenas escritos de formas diferentes.

 

 

 

Sobre:

Em 19/06/2022 às 22:51, Giovanna Gabrielle disse:

Como você sugere que eu implemente as variáveis das turmas, para saber quais foram os melhores alunos? e pra, depois, saber quais foram os aprovados, de que turma são e as melhores notas em cada turma. Creio que, quando eu definir isso, ficará mais fácil de saber qual aluno foi o melhor de todos. 

 

Faça por etapas. Exemplo:

Em 18/06/2022 às 23:04, Simon Viegas disse:
[1] quantos dos seus alunos foram aprovados em cada turma de formandos.

 


Antes, uma dica/orientação importante:

Use OU camelCase, OU snake_case para as nomenclaturas de variáveis.. No caso no snake, começando com minúscula...

 

Iniciando com Maiúscula fica muito confuso para ler... 😄

 

 

Segue um exemplo de esboço inicial:


Código:

algoritmo "Aprovados num vestibular"
//Após uma prova de vestibular, uma escola quer identificar [1] quantos dos
//seus alunos foram aprovados em cada turma de formandos. Ela quer saber [2]
//qual aluno teve a maior nota e de [3] qual turma ele é. Nessa escola, há
//quatro turmas (A, B, C e D) com vinte e cinco alunos cada.
//Elabore um algoritmo que solicite o nome e a nota do vestibular aos alunos.
//Depois, informe quantos deles foram aprovados, de que turma são, qual a maior
//nota em cada turma e qual aluno teve a maior nota de todas.
//Para que o aluno seja aprovado no vestibular, ele deverá obter nota maior ou
//igual a 7.
//ATENÇÃO: As notas por turma não podem se repetir.

var
   nome : caractere
   nota : real
   contAluno, contTurma : inteiro
   qtdAprovTurmaA, qtdAprovTurmaB : inteiro
   qtdAprovTurmaC, qtdAprovTurmaD : inteiro
   letraTurma : caractere

inicio
   escrevaL("-------------------------------------------")
   escrevaL("------------- Escola Progresso ------------")
   escrevaL("-------------------------------------------")
   escrevaL("")
   escrevaL("---- Sistema de notas - Vestibular --------")
   escrevaL("")
   escrevaL("")

   para contTurma de 1 ate 4 faca
      escolha contTurma
      caso 1
         letraTurma <- "A"
      caso 2
         letraTurma <- "B"
      caso 3
         letraTurma <- "C"
      caso 4
         letraTurma <- "D"
      fimEscolha

      escrevaL("")
      escrevaL("######################")
      escrevaL("TURMA: ", letraTurma)

      para contAluno de 1 ate 3 faca
         escrevaL("")
         escrevaL("Aluno ", contAluno:1)
         escrevaL("Dados do aluno")
         escreva ("Nome: ")
         ALEATORIO ON
         lista "Estados"
         leia(nome)
         escreva ("Nota: " )
         ALEATORIO 3,10
         leia(nota)
         ALEATORIO OFF

         se (nota >= 7) entao
            escrevaL("Aluno foi aprovado")

            escolha letraTurma
            caso "A"
               qtdAprovTurmaA <- qtdAprovTurmaA+1
            caso "B"
               qtdAprovTurmaB <- qtdAprovTurmaB+1
            caso "C"
               qtdAprovTurmaC <- qtdAprovTurmaC+1
            caso "D"
               qtdAprovTurmaD <- qtdAprovTurmaD+1
            fimEscolha
         senao
            escrevaL("Deu zebra")
         fimSe

      fimPara
   fimPara
fimAlgoritmo

 

 

Vê o que dá para melhorar ou ajustar... aí insere mais alguma coisa, como:

Em 18/06/2022 às 23:04, Simon Viegas disse:
[2] qual aluno teve a maior nota e de [3] qual turma ele é

 

Como verifica a maior nota? Você já sabe.
Como sabe qual a turma do aluno? Só pegar o valor da letraTurma.

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

  • 2 semanas depois...

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