Informática, perguntado por VitoriaCurosaki1578, 11 meses atrás

Olá, alguém saberia terminar este algoritmo (Visualg)? "Escrever um programa que declare um vetor de reais e leia as notas de 30 alunos". Bom, o professor começou assim: algoritmo "notas" // Síntese // Objetivo: armazenar as notas de 30 alunos de uma turma // Entrada: 30 notas // Saída: notas dos alunos // Declarações var auxiliar, quantidade :inteiro notas : vetor[0..29] de real inicio quantidade <- 30 // valor constante para auxiliar de 0 ate quantidade-1 passo 1 faca escreva("Nota do aluno ", auxiliar+1, " = ") leia(notas[auxiliar]) fimpara fimalgoritmo Aí ele pediu: => 1) Agora, altere este algoritmo para apresentar todas as notas da turma". => 2) Complete o algoritmo, calculando a média da turma e determine quais notas e quantos alunos tiveram nota igual ou superior à média. * Eu fiz assim: algoritmo "notas" // Sintese // Objetivo : armazenar as notas de 30 alunos de uma turma // Entrada : 30 notas // Saída : Notas dos alunos // Declarações : var auxiliar, quantidade, aprovados :inteiro notas : vetor[0..29] de real media, soma: real inicio quantidade <- 30 // valor constante para auxiliar de 0 ate quantidade-1 passo 1 faca escreva("Nota do aluno ", auxiliar+1, " = ") leia(notas[auxiliar]) fimpara escreval escreval("Todas as notas da turma: ") escreval para auxiliar de 0 ate quantidade-1 passo 1 faca escreva("Nota do aluno ", auxiliar+1, " = ") escreval(notas[auxiliar]) fimpara para auxiliar de 0 ate quantidade-1 passo 1 faca soma <- soma+notas[auxiliar] media <- soma/quantidade fimpara escreval("A soma das notas da turma é: ", soma) escreval("A média da turma é: ", media) Obs: (esta parte abaixo imitei de um pdf, gostaria que me explicasse esta parte, não entendi direito) para auxiliar de 0 ate quantidade-1 passo 1 faca se notas[auxiliar] >=7 entao aprovados <- aprovados+1 fimse fimpara escreval("Total de Aprovados: ", aprovados) ... ... É nesta parte que não consigo determinar (mostrar) quais notas tiveram nota igual ou superior à média (que no caso, coloquei 7 como media). Só mostra quantos alunos obtiveram nota maior ou igual a 7, e não mostra quais as notas. Agradeço!

Soluções para a tarefa

Respondido por bokomoko
0
O trecho do algoritmo que o professor iniciou apenas faz a leitura das 30 notas e coloca-as na memória. Não faz cálculo algum.

O enunciado "Escrever um programa que declare um vetor de reais e leia as notas de 30 alunos"  é exatamente o que o programa faz. Só isso.

O que você quer ? 
Primeiro o seu programa tenta calcular a média das 30 notas. Ele QUASE faz isso nesse loop aqui que você escreveu 

para auxiliar de 0 ate quantidade-1 passo 1    faca
   soma <- soma+notas[auxiliar]   
   media <- soma/quantidade
fimpara

O que você está fazendo aqui é calculando a soma das notas corretamente.
a variável soma vai ter o total das notas informadas.

Acontece que você está calculando a média ANTES de terminar a soma, inultimente, 29 vezes. Apenas na 30a vez que o loop passar por esse cálculo é que ele vai calcular a média corretamente. o cálculo da média só deveria ser feito FORA do loop pois só então a variável soma vai ter o valor da soma das notas. A média precisa da soma das notas. Mas não a cada etapa.
Então o correto seria fazer o cálculo da média DEPOIS de ter somado tudo assim

para auxiliar de 0 ate quantidade-1 passo 1    faca
   soma <- soma+notas[auxiliar]
fimpara
media <- soma/quantidade   // calculo da média



em seguida o seu programa faz o seguinte (que é a parte que você não entendeu e eu vou tentar explicar, torça por mim)

para auxiliar de 0 ate quantidade-1 passo 1 faca
   se notas[auxiliar] >=7
       entao aprovados <- aprovados+1
   fimse
fimpara
escreval("Total de Aprovados: ", aprovados)

Esse loop vai varrer o vetor de notas da posição 0 até a posição quantidade-1. Porque ??? porque sao 30 notas, concorda ? 
Entre 0 e 29 quantas notas temos ? temos (29-0) + 1
Lembre-se, para saber quantos números temos entre início e fim, a conta é (fim-início+1).
Por exemplo, quantos números existem entre 32 e 98 inclusive ? 
(98-32) + 1 = 67
Quantos números entre 1 e 10 ? 
(10-1)+1 = 10
E entre 0 e 9 ? (9-0)+1 = 10
E entre 0 e 29 ? (29-0)+1 = 30

Por isso no loop a variavel auxiliar vai variar de 0 a até 30-1 = 29, portanto trinta elementos que é a quantidade de elementos no vetor notas definido no início do programa na declaração
notas : vetor[0..29] de real

Pois bem, então sabemos que o comando para .... vai variar auxiliar de 0 a 29 (0, 1, 2 ..... até 29)

Para cada um desses valores vai fazer um SE
Se a nota[auxiliar] for maior ou igual a 7 ele vai contar mais um aprovado

Esse loop faz isso, ele apenas conta quantas notas no vetor notas[0..29] são maiores ou iguais a 7, o que significa ser aprovado
Aí ele conta 
     aprovados <- aprovados+1

No fim ele exibe quantos aprovados. 

se O que você quer é exibir as notas que foram maiores que 7 e não apenas contá-las ... 

Para isso o comando para deveria ser assim

para auxiliar de 0 até quantidade-1 faca 
     se notas[auxiliar] >= 7  entao
          // coloque aqui o que você quer que aconteça se a nota for >=7
     fimse
fimpara

Pergunto, o que você quer que aconteça caso a nota seja >=7 ???

Observe, eu sei a resposta mas quero que você mesmo pense e responda. Se tiver dificuldade, faça um comentário e esclarecerei. 


Perguntas interessantes