Ir ao conteúdo
  • Cadastre-se
Bella Lima

Programa ordenação de discentes

Recommended Posts

Olá. Estou tentando fazer esse exercício

Este sistema deverá armazenar o nome, idade e as notas de uma turma com 45 alunos. Cada aluno irá fazer 3 avaliações. A média final do aluno será composta 20% da primeira prova, 30% da segunda e 50% da terceira. Ao final, os alunos devem ser ordenados pelas suas notas finais. Em caso de empate, o aluno com maior nota na terceira prova deve ficar melhor colocado. Se o empate persistir, o aluno com menor idade deve ficar melhor colocado e, por fim, caso aconteça novo empate, os alunos devem ser ordenados por alfabeticamente.

 

eu sei que o vetor tem q ser tamanho 45, coloquei de 1 a 2 para poder ver se estava funcionando***

 

No momento meu código esta assim:

 
program Avalia_Alunos; {***Registra e Avalia os alunos***} uses CRT; Type Dado_do_Aluno = record      nome: string;      idade: integer;      media: real;      notas: array[1..3] of real; {***Cria um vetor para que possa armazenar                                       as três notas do aluno***}      end;      Var Alunos: array[1..2] of Dado_do_Aluno;          troca:Dado_do_Aluno;          i,j,imenor: integer;          nota1,nota2,nota3: real;           begin            for i := 1 to 2 do             begin                  j:=0;  {***Inicializa a variavel nota***}                         writeln('Digite o nome do Aluno:');                                         readln(Alunos[i].nome);                                           writeln('Digite a idade do Aluno:');                                                           readln(Alunos[i].idade);                                            writeln('Digite as notas do Aluno:');                                               writeln('Digite a 1ª nota:');                                                   readln(Alunos[i].notas[j]);                                                      Alunos[i].notas[j]:= 0.2*Alunos[i].notas[j];                                                          nota1:= Alunos[i].notas[j];                                               j:= j+ 1;  {***Incrementa a variavel nota, para que o proximo valor                                                                                        a ser adicionado seja a segunda nota***}                          writeln('Digite a 2ª nota:');                                          readln(Alunos[i].notas[j]);                                             Alunos[i].notas[j]:= 0.3*Alunos[i].notas[j];                                                nota2:= Alunos[i].notas[j];                                                j:= j + 1;   {***Incrementa a variavel nota, para que o proximo valor                                                                             a ser adicionado seja a terceira nota***}                                                    writeln('Digite a 3ª nota:');                                                       readln(Alunos[i].notas[j]);                                                         Alunos[i].notas[j]:= 0.5*Alunos[i].notas[j];                                                             nota3:= Alunos[i].notas[j] ;                                                              Alunos[i].media:=  nota1 + nota2 + nota3;                                                                                     end;                                                                                  writeln('As notas dos 45 alunos foram cadastradas!');           for i:=1 to 2 do           Begin                imenor:=i;                for j:=i+1 to 2 do             {*** Ciclo para comparar o valor no índice i                                                    com os restantes números dos índices superiores***} {***Ordenando as notas dos alunos pela média***}                          Begin                           if   Alunos[i].media > Alunos[imenor].media then imenor:=j;                            {***Se ver que o valor contido no índice j é maior                             do que o valor do índice definido com o imenor, muda***}                              if Alunos[i].media <> Alunos[imenor].media then                                                           {*** Se realmente forem diferentes muda***}                                                           Begin                                                             troca:= Alunos[i];                                                               Alunos[i]:=  Alunos[imenor] ;                                                                 Alunos[imenor]:= troca;                                                                  end;                                                                      end; {***Ordenando as notas dos alunos pela terceira nota***}                            Begin                              if    Alunos[i].notas[3] > Alunos[imenor].notas[3] then imenor:=j;                                {***Se ver que o valor contido no índice j é igual ao valor do índice definido com o imenor, muda***}                                if Alunos[i].media = Alunos[imenor].media then                                                                  {*** Se realmente as medias forem iguais muda***}                                                                   Begin                                                                    troca:= Alunos[i];                                                                            Alunos[i]:=  Alunos[imenor] ;                                                                                 Alunos[imenor]:= troca;                                                                                 end;                                                                                     end;                   {***Ordenando as notas dos alunos pela idade***}                        Begin                         if    Alunos[i].idade > Alunos[imenor].idade then imenor:=j;                               {***Se ver que o valor contido no índice j é igual ao valor do índice definido com o imenor, muda***}                                      if Alunos[i].notas[3] = Alunos[imenor].notas[3] then                                                                  {*** Se realmente a terceira nota  forem iguais, muda***}                                                                  Begin                                                                    troca:= Alunos[i];                                                                             Alunos[i]:=  Alunos[imenor] ;                                                                                  Alunos[imenor]:= troca;                                                                                  end;                                                                                      end;                     {***Ordenando as notas dos alunos pela ordem alfabética***}                        Begin                         if    Alunos[i].nome > Alunos[imenor].nome then imenor:=j;                           {***Se ver que o valor contido no índice j é igual ao valor do índice definido com o imenor, muda***}                            if Alunos[i].idade = Alunos[imenor].idade then                                                                  {*** Se realmente a idade  forem iguais, muda***}                                                                   Begin                                                                    troca:= Alunos[i];                                                                            Alunos[i]:=  Alunos[imenor] ;                                                                                         Alunos[imenor]:= troca;                                                                                         end;                                                                                             end;                              {***Imprimindo os valores ordenados***}                               writeln('Valores Ordenados');                                for i:=1 to 2 do                                 Begin                                  writeln ( Alunos[i].nome  );                                    end;                                                 end;                                            readkey;                                               end.
 
Não estou conseguindo ver onde estou errando

Compartilhar este post


Link para o post
Compartilhar em outros sites

OIá Bella Lima,

 

1) ERRO DE SINTAXE

Apenas peguei o seu código e compilei, deu o erro:

(185,38) Error: Illegal assignment to for-loop variable "i"

ou seja, na linha 185, você está utilizando "i" de forma "ilegal"... resumidamente, tem um for, dentro de outro for e ambos estão usando a mesma variável!!! E isso está dando conflito... (o segundo for atrapalha a contagem do primeiro).

 

2) IMPLEMENTAR POR PARTES

Você não precisa fazer tudo de uma vez. Vá fazendo por partes, vai compilando e testando... compilando e testando...

 

Ex.:
 

program Avalia_Alunos; {***Registra e Avalia os alunos***}uses   CRT;type   Dado_do_Aluno = record     nome: string;     idade: integer;     media: real;     notas: array[1..3] of real; {***Cria um vetor para que possa armazenar as três notas do aluno***}     end;Var   Alunos: array[1..2] of Dado_do_Aluno;   troca:Dado_do_Aluno;   i,j,imenor: integer;   nota1,nota2,nota3: real;BEGINfor i := 1 to 2 do  begin  j:=0;  {***Inicializa a variavel nota***}  writeln('Digite o nome do Aluno:');  readln(Alunos[i].nome);  writeln('Digite a idade do Aluno:');  readln(Alunos[i].idade);  writeln('Digite as notas do Aluno:');  writeln('Digite a 1ª nota:');  readln(Alunos[i].notas[j]);  Alunos[i].notas[j]:= 0.2*Alunos[i].notas[j];  nota1:= Alunos[i].notas[j];  j:= j+ 1;  {***Incrementa a variavel nota, para que o proximo valora ser adicionado seja a segunda nota***}  writeln('Digite a 2ª nota:');  readln(Alunos[i].notas[j]);  Alunos[i].notas[j]:= 0.3*Alunos[i].notas[j];  nota2:= Alunos[i].notas[j];  j:= j + 1;   {***Incrementa a variavel nota, para que o proximo valor  a ser adicionado seja a terceira nota***}  writeln('Digite a 3ª nota:');  readln(Alunos[i].notas[j]);  Alunos[i].notas[j]:= 0.5*Alunos[i].notas[j];  nota3:= Alunos[i].notas[j] ;  Alunos[i].media:=  nota1 + nota2 + nota3;  end;writeln('As notas dos 45 alunos foram cadastradas!');//aqui um trecho que imprime os dados para testar se está armazenado corretamente(*depois tenta implementar a ordenação pela notas finais, sem se preocupar com o desempate e verifica se deu certo  depois tenta implementar com os critérios de desempate.... por ai vai*)end.

***

 

No aguardo.

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

×