Ir ao conteúdo
  • Cadastre-se
lucashp

VisualG Vetor Armazenamento

Recommended Posts

Faça um algoritmo para ler um vetor nome de 10 elementos
 Para cada Nome de aluno sao digitados 4 notas
 Para cada Aluno imprimir a soma e a media das 4 notas
 Ao final imprimir o nome de cada aluno, as 4 notas, o total de pontos, a media e se o aluno foi aprovado ou reprovado critério de aprovação total >=60

 

Exemplo: 

Estou com dificuldade de acessar as notas pelo vetor , por exemplo eu digito as 4 notas de um aluno , ai imprime a soma e a media das notas , so que quando eu quero cadastrar novas notas , as notas ja existentes são substituidas  e  preciso de todas as notas no final para exibição.


 

Var
Nome : vetor [1..2] de Caracter
nota:vetor [1..8] de real
x,y:inteiro
Soma,Media:real

Inicio
para x de 1 ate 2 faca
escreval("Digite o nome do aluno :")
leia(Nome[x])

para y de 1 ate 4 faca
escreval("Digite a ",y,"ª nota do aluno")
leia(nota[y])
Soma<-Soma+nota[x]
Media<-Soma/4
fimpara
escreval("A soma da nota do aluno é : ",Soma)
escreval("A media do aluno é : ",Media)

fimpara

para x de 1 ate 2 faca
escreval(Nome[x])
fimpara

para y de 1 ate 4 faca
escreval(notas[y])
fimpara
Fimalgoritmo

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@lucashp    com vetores é difícil fazer isso, melhor usar matriz que vai armazenar o nome dos alunos e as notas na mesma matriz.   

     seu código com algumas modificações para funcionar com matriz :

Algoritmo "notas"
Var
Nome : vetor [1..2,1..5] de Caracter
nota:vetor [1..8] de real
x,y:inteiro
Soma,Media:real
Inicio
para x de 1 ate 2 faca
  soma:=0
  escreval("Digite o nome do aluno :")
  leia(Nome[x,1])
  para y de 2 ate 5 faca
    escreval("Digite a ",y-1,"ª nota do aluno")
    leia(nome[x,y])
    Soma<-Soma+caracpnum(nome[x,y])
    Media<-Soma/4
  fimpara
  escreval("A soma da nota do aluno é : ",Soma)
  escreval("A media do aluno é : ",Media)
fimpara
para x de 1 ate 2 faca
  escreval("Nome Do Aluno ",Nome[x,1])
  soma:=0
  para y de 2 ate 5 faca
    escreval(y-1," nota ",nome[x,y])
    soma:=soma+caracpnum(nome[x,y])
  fimpara
  escreval("teve ",soma," pontos")
  media:=soma/4
  escreval("media ",media)
  se soma >=30 ENTÃO
    escreval("Aprovado...!")
  fimse
fimpara
Fimalgoritmo

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @lucashp

 

10 horas atrás, lucashp disse:

[...], so que quando eu quero cadastrar novas notas , as notas ja existentes são substituidas[...]

São substituídas por que está utilizando as mesmas posições.

 

Veja:

10 horas atrás, lucashp disse:

   para y de 1 ate 4 faca
      escreval("Digite a ",y,"ª nota do aluno")
      leia(nota[y])
      Soma<-Soma+nota[x]
      Media<-Soma/4
   fimPara

 

Ou seja, sempre está armazenando nas posições de 1 a 4. Se você declarou de 1 a 8, por que não está utilizando as outras posições?

 

Antes mesmo de começar a escrever o algoritmo, é necessário já ter mais ou menos em mente como será feito o armazenamento e também a recuperação dos dados, ou seja, primeiro vem as ideias, depois a implementação. (obs.: sei que na prática isso é difícil, pois tendemos a tentar fazer as duas coisas ao mesmo tempo.. normal. Tem que ir praticando)

 

Como é sabido, existem diversas formas de resolver o mesmo problema... você estará apenas desenvolvendo UMA...

 

Vamos pegar a sua estrutura:
 

10 horas atrás, lucashp disse:

Var
   Nome :vetor [1..2] de Caracter
   Nota :vetor [1..8] de real

 

Você declarou uma variável para os nomes, e outra para as notas. Ok. Mas como fazer a relação de uma coisa com a outra? entende?

 

Teoricamente, talvez você tenha pensado em algo assim:

Citação

Para aluno 1, notas de 1 a 4

Para aluno 2, notas de 5 a 8

Para aluno 3, notas de 9 a 12

 

Daí, precisaria correlacionar, vou tentar demonstrar uma forma de raciocínio:

 

- É notável que a variação é sempre de 4 em 4. Até ai ok. O Aluno 1 vai até 4, aluno 2 até 8, aluno 3 vai até 12, então posso usar o valor de "4" como base, e "X" como referência ao aluno... beleza. Então, 4*X.

- Para Aluno 1, 1*4 = 4. Para aluno 2, 2*4 = 8.... mas vixe! A nota começa com 1, não com 4. Então posso diminuir 3. Então, para aluno 1, 1*4-3=1, para aluno 2, 2*4-3=5.

Por enquanto estaríamos com algo assim:

(x*4-3)

- Certo, mas são 4 notas. Nesse caso podemos usar o Y como referência (1 a 4). Então:
 

(x*4-3 + y)

Aluno 1, nota 1... 1*4-3 + 1 = 2... não deu certo, pois deu 2, deveria dar um... simples, subtraio 1. Ex.: x*4-3+y-1. Ou simplesmente x*4-4+y.

 

Vamos testar:

Aluno 3, nota 2. 3*4-4+2=10.  OK. Deu certo!

 

Fórmula geral

x*NUMERO_DE_NOTAS-NUMERO_DE_NOTAS+y.

Use:

((x*4-4)+y) //o parênteses não é necessário, apenas usei para separar os elementos

 

Pronto, casa aluno ficará com sua nota.

 

 

 

 

***

 

Uma segunda forma, um pouco mais simples e mais elegante, seria utilizando uma matriz para notas. Ex.:

   Nomes :vetor [1..2] de caracter
   Notas :vetor [1..2,1..4] de real  //"código do aluno","número da nota desse aluno"

Simples assim.

 

Nome do Aluno 4?  Nomes[4]. Nota 3 do Aluno 4?  Notas[4,3]!

 

 

 

 

***

 

Outra forma de utilizar seria como sugeriu @devair1010. Apenas faria uma ressalva para utilizar outro nome para o vetor, como por exemplo "alunos [1..2,1..5] de caracter".

 

É meio que uma mistura dos 2 exemplos que dei acima... onde a primeira coordenada valera para cada Aluno, e a segunda coordenada, a posição 1 vai para o nome, e as 4 restantes vão para as notas, ou seja, a relação das notas para o aluno está em "NUMERO_DA_NOTA+1" (pois começa com 2).

 

 

***

 

obs.: outras coisas precisam ser revistas, como o cálculo da média, que NÃO deveria ficar dentro do para... deve ficar depois.

 

 

No aguardo.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×