Ir ao conteúdo
  • Cadastre-se

Programa ordenação de discentes


Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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.

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