Ir para conteúdo
Fórum Script Brasil
  • 0

Queimando a cabeça!


diego_moicano

Pergunta

Amigos

Desde de ontem estou queimando a cabeça num exercício, ele pede o seguinte: dar um código (matricula), nome de 5 alunos, assim como suas notas (P1 e P2), e média final. O programa inicia com um menu,:

a)Cadastrar alunos

b)Cadastrar notas

c)Exibir notas

d)Exibir medias

e)Exibir os codigos, os nomes, notas e medias (em forma de matriz)

f)Sair

Toda vez que a opção é escolhida o menu deve sumir, por exemplo, escolheu a) o menu some, faz o cadastro, chegou no fim do cadastro, some esta opção e volta o menu. Não é permitido usar procedure, registro, functions, só pode usar if..then..else, case..of, vetor e matriz.

O que játenho pronto é isto:

Em VETOR

program diego1;
uses crt;
var
   aluno  : array[1..5] of string;
   nome   : array[1..5] of string;
   notas1 : array[1..5] of real;
   notas2 : array[1..5] of real;
   i, j   : integer;
   opcao  : char;
   m1, m2, m3, m4, m5 : real;
begin
   clrscr;
   opcao := 'g';            {Ignorar o Case}
   while opcao <> 'f' do
   begin
      clrscr;
      case (opcao) of
      'a' : begin          {Armazenar código e nome do aluno}
             for i := 1 to 5 do
                begin
                   writeln('Digite o codigo do ', i, ' aluno:');
                   readln(aluno[i]);
                end;
                writeln;
                   for j := 1 to 5 do
                      begin
                         writeln('Digite o nome do ', j, ' aluno:');
                         readln(nome[j]);
                      end;
             end;
      'b' : begin         {Armazenar notas do aluno}
             for i := 1 to 5 do
                begin
                   writeln('Digite a nota P1 do ', i, ' aluno:');
                   readln(notas1[i]);
                end;
                writeln;
                   for j := 1 to 5 do
                      begin
                         writeln('Digite a nota P2 do ', j, ' aluno:');
                         readln(notas2[j]);
                      end;
           end;
      'c' : begin           {Mostrar as notas do aluno}
            for i := 1 to 5 do
               begin
                  writeln('A nota P1 do aluno ', i, ' foi ', notas1[i]:2:2);
               end;
                  writeln;
                  for j := 1 to 5 do
                     begin
                        writeln('A nota P2 do aluno ', j, ' foi ', notas2[j]:2:2);
                     end;
               readln;
            end;
      'd' : begin           {Cálulo da médias e sua exibição}
                  m1 := (notas1[1] + notas2[1]) / 2;
                  m2 := (notas1[2] + notas2[2]) / 2;
                  m3 := (notas1[3] + notas2[3]) / 2;
                  m4 := (notas1[4] + notas2[4]) / 2;
                  m5 := (notas1[5] + notas2[5]) / 2;
                  writeln('A media do aluno 1 ', m1:2:2);
                  writeln('A media do aluno 2 ', m2:2:2);
                  writeln('A media do aluno 3 ', m3:2:2);
                  writeln('A media do aluno 4 ', m4:2:2);
                  writeln('A media do aluno 5 ', m5:2:2);
               readln;
            end;
      'e' : begin         {Mostrar tudo na tabela}

           write( ' Codigo ','    ', ' Nome ','    ', ' P1 ','    ',' P2 ','    ', ' Medias ');

                       FALTA ESTA PARTE
      end;
      clrscr;
      writeln('Digite a opcao desejada: ');
      writeln('a)Cadastrar alunos');
      writeln('b)Cadastrar notas');
      writeln('c)Exibir notas');
      writeln('d)Exibir medias');
      writeln('e)Exibir os codigos, os nomes, notas e medias');
      writeln('f)Sair');
      readln(opcao);
   end;
end.
Em MATRIZ
program diego2;
uses crt;
var
   dados  : array[1..5, 1..2] of string;
   notas : array[1..5, 1..2] of real;
   media  : array[1..5] of real;
   i, j   : integer;
   opcao  : char;
   m1, m2, m3, m4, m5 : real;
begin
   clrscr;
   opcao := 'g';            {Ignorar o Case}
   while opcao <> 'f' do
   begin
      clrscr;
      case (opcao) of
      'a' : begin          {Armazenar código e nome do aluno}
             for i := 1 to 5 do
                for j := 1 to 2 do
                begin
                   writeln('Digite o codigo do ', i, ' aluno:');
                   writeln('Digite o nome do ', j, ' aluno:');
                   readln(dados[i,j]);
                end;
            end;
      'b' : begin         {Armazenar notas do aluno}
             for i := 1 to 5 do
                for j := 1 to 2 do
                begin
                   writeln('Digite a nota P1 do ', i, ' aluno:');
                   writeln('Digite a nota P2 do ', j, ' aluno:');
                   readln(notas[i,j]);
                end;
           end;
      'c' : begin           {Mostrar as notas do aluno}
            for i := 1 to 5 do
               for j := 1 to 2 do
               begin
                  writeln('As notas dos alunos foram ', notas[i,j]:2:2);
               end;
               readln;
            end;
      'd' : begin          {Cálculo das médias e exibição}
                m1 := (notas[1,1] + notas[1,2]) / 2;
                m2 := (notas[2,1] + notas[2,2]) / 2;
                m3 := (notas[3,1] + notas[3,2]) / 2;
                m4 := (notas[4,1] + notas[4,2]) / 2;
                m5 := (notas[5,1] + notas[5,2]) / 2;
                writeln('A media do aluno 1 foi: ', m1:2:2);
                writeln('A media do aluno 2 foi: ', m2:2:2);
                writeln('A media do aluno 3 foi: ', m3:2:2);
                writeln('A media do aluno 4 foi: ', m4:2:2);
                writeln('A media do aluno 5 foi: ', m5:2:2);
              readln;
            end;
      'e' :  write( ' Codigo ','    ', ' Nome ','    ', ' P1 ','    ',' P2 ','    ', ' Medias ');

                       FALTA ESTA PARTE
      end;
      clrscr;
      writeln('Digite a opcao desejada: ');
      writeln('a)Cadastrar alunos');
      writeln('b)Cadastrar notas');
      writeln('c)Exibir notas');
      writeln('d)Exibir medias');
      writeln('e)Exibir os codigos, os nomes, notas e medias');
      writeln('f)Sair');
      readln(opcao);
   end;
end.

Só que EM ambos não estou conseguindo fazer o item E. Fora que no de Matriz não aparece, no prompt, o cadastro dos alunos certo, ou seja:

código nº

aluno nome

Agradeço qualquer tipo de ajuda!

Abraços :D

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Neste caso você tem que por um loop para ir exibindo a Matriz, parecido com o que você fez só que com 2 loops, um para a linha e outro para a coluna

mas, o que pode está dificultando é que você está trabalhando com 1 matriz para cada coisa, o ideal seria 1, onde você consegue guaradar nomes e notas...

com isso você pode conseguir melhorar seu código e imprimir como gostaria

Link para o comentário
Compartilhar em outros sites

  • 0

Opa raphael_suporte

Obrigado por ter me respondido :)

mas, o que pode está dificultando é que você está trabalhando com 1 matriz para cada coisa, o ideal seria 1, onde você consegue guaradar nomes e notas...

Então não posso fazer isso, porque a proposta do programa é somente exibir tudo no penúltimo item: a) somente cadastrar (matrícula e nome); no b ) somente cadastrar notas (p1 e p2); no c) somente exibir as notas (p1 e p2); no d) somente exibir as médias; no e) exibir tudo em forma de tabela, mas não precisa ter o desenho dela; e por fim o item f) que é para sair do programa.

Talvez eu não tenha sido claro na minha descrição inicial, desculpa... e mais uma vez muito obrigado!

Alguma idéia :P

Abraços :D

Link para o comentário
Compartilhar em outros sites

  • 0

Opa diego... isso não vai impedir, pois na hora de cadastrar notas e essas coisas você vai informar a posição da tabela(Matriz).. mais bem vou tentar fazer do seu jeito aqui.

Vetor:

e' :  write( ' Codigo ','    ', ' Nome ','    ', ' P1 ','    ',' P2 ','    ', ' Medias ');
for  i:= 1 to 5 do
begin
    write(Codigo[i],'       ');
    write (nome[i],'        ');
    write (notas1[i],'        ');
    write (notas2[i],'        ');
    write (media'&[i],'        ');  --Poderia ter usado um vetor tambem
    writeln;

end;
Matriz como eu falei usando o for dentro do outro for.
'e' :  write( ' Codigo ','    ', ' Nome ','    ', ' P1 ','    ',' P2 ','    ', ' Medias ');
for i:= 1 to 5 do --Nesse loop eu preencho as linhas
begin
   -- Agora eu vou abrindo os loops de acordo com o que quero preencher
     for j:= 1 to 2 do -- preencher o primeiro e segundo campo ( codigo, e nome)
     begin
        write(campos[i,j],'       ');
     end;
     for j:= 1 to 2 do -- preencher os campos da notas
     begin
        write(notas[i,j],'       ');
     end;
     write(media[i],'       ');
     writeln;
            
end;

Seria mais ou menos assim, fiz rapido, por isso pode haver algum erro de fechamento... mas acho que conseguir passar a ideia

Link para o comentário
Compartilhar em outros sites

  • 0

Opa raphael_suporte

No de MATRIZ, eu fiz o que sugeriu, mas está com este erro: 67 / 41 trd399~1.pas

Warning: Variable MEDIA does not seem to be initialized

Pelo que entendo é com o variável media que não foi colocada! Ele não deveria ser posta no item d?

Veja o código:

program diego2;
uses crt;
var
   dados  : array[1..5, 1..2] of string;
   notas : array[1..5, 1..2] of real;
   media  : array[1..5] of real;
   i, j   : integer;
   opcao  : char;
   m1, m2, m3, m4, m5 : real;
begin
   clrscr;
   opcao := 'g';            {Ignorar o Case}
   while opcao <> 'f' do
   begin
      clrscr;
      case (opcao) of
      'a' : begin          {Armazenar código e nome do aluno}
             for i := 1 to 5 do
                for j := 1 to 2 do
                begin
                   writeln('Digite o codigo do ', i, ' aluno:');
                   writeln('Digite o nome do ', j, ' aluno:');
                   readln(dados[i,j]);
                end;
            end;
      'b' : begin         {Armazenar notas do aluno}
             for i := 1 to 5 do
                for j := 1 to 2 do
                begin
                   writeln('Digite a nota P1 do ', i, ' aluno:');
                   writeln('Digite a nota P2 do ', j, ' aluno:');
                   readln(notas[i,j]);
                end;
           end;
      'c' : begin           {Mostrar as notas do aluno}
            for i := 1 to 5 do
               for j := 1 to 2 do
               begin
                  writeln('As notas dos alunos foram ', notas[i,j]:2:2);
               end;
               readln;
            end;
      'd' : begin          {Cálculo das médias e exibição}
                m1 := (notas[1,1] + notas[1,2]) / 2;
                m2 := (notas[2,1] + notas[2,2]) / 2;
                m3 := (notas[3,1] + notas[3,2]) / 2;
                m4 := (notas[4,1] + notas[4,2]) / 2;
                m5 := (notas[5,1] + notas[5,2]) / 2;
                writeln('A media do aluno 1 foi: ', m1:2:2);
                writeln('A media do aluno 2 foi: ', m2:2:2);
                writeln('A media do aluno 3 foi: ', m3:2:2);
                writeln('A media do aluno 4 foi: ', m4:2:2);
                writeln('A media do aluno 5 foi: ', m5:2:2);
              readln;
            end;
      'e' : begin
               write( ' Codigo ','    ', ' Nome ','    ', ' P1 ','    ',' P2 ','    ', ' Medias ');
                  for i:= 1 to 5 do
                    for j:= 1 to 2 do
                       begin
                       write(dados[i,j],'       ');
                       end;
                    for j:= 1 to 2 do
                    begin
                       write(notas[i,j],'       ');
                    end;
               write(media[i],'       ');
             writeln;
           end;
      end;
      clrscr;
      writeln('Digite a opcao desejada: ');
      writeln('a)Cadastrar alunos');
      writeln('b)Cadastrar notas');
      writeln('c)Exibir notas');
      writeln('d)Exibir medias');
      writeln('e)Exibir os codigos, os nomes, notas e medias');
      writeln('f)Sair');
      readln(opcao);
   end;
end.

Valeu :)

Abraços :D

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...