Ir ao conteúdo
  • Cadastre-se
Vinícius Proença

Pascal Erro semântico (iniciante) podem me ajudar?

Posts recomendados

Bom dia, esse é o meu primeiro tópico aqui e eu gostaria de pedir desculpas pela inconveniência de tomar o tempo de vocês com erros tão toscos quanto os que cometi nesse algoritmo. Acabei de começar a disciplina de algoritmos na faculdade e já estou tendo muitos problemas com a lógica envolvendo as estruturas de repetição aninhadas e eu gostaria que me ajudassem em particular com esse algoritmo que deixarei abaixo... Estou nele a 3 dias e já não sei o que fazer, TUDO dá errado e eu já estou me achando a pessoa mais ***** da face da terra... Eu não quero que resolvam para mim, eu apenas quero entende-lo e aprender a fazer do meu próprio jeito. Desde já agradeço.

Program Pzim ;

//2. Um total de 500 alunos de uma universidade foram entrevistados. De cada um deles foram colhidas as
//seguintes informações: o código do curso que freqüenta (1-engenharia; 2-computação; 3-administração) e
//a idade. Faça um programa que processe estes dados e que forneça as seguintes informações:
//a) número de alunos por curso;
//a) número de alunos com idade entre 20 e 25 anos, por curso; e
//a) qual o curso com menor média de idade.


Var
  cda,ida,ae,ac,aa,aen,idan,acn,aan,na : real;
  resp : string;
Begin
 Repeat
  ae:=0;
  ac:=0;
  aa:=0;
   Repeat
   write('digite o número do aluno');
   readln(na);
   Write('Tecle 1 para engenharia, 2 para computação, 3 para administração e 0 para parar ');
     Readln(cda);
   Write('Digite a idade do aluno');
   readln(ida);
     if cda=1
           then begin
              ae := ae + 1;
              if (ida > 20) and (ida < 25)then 
                begin 
                aen:=aen+1;
                idan:=ida;
                end;
                
                
                
                
       if (cda =2)then 
         begin
               ac := ac + 1;
               if (ida >20 and ida <25)then 
                  begin 
                   acn:=acn+1;
                   idan:=ida;
                end;
                  
         end;
                
                    
                
            if (cda = 3) then 
                 begin
                aa := aa + 1;
                if (ida >20 and ida <25 )then 
                   begin 
                    aan:=aan+1;
                    idan:=ida;
                   end;
                
                end;
                
        Until cda = 0;
         Writeln('há mais algum estudante a ser considerado?:');
         Until resp = 'n';
     Writeln('O número de estudantes que cursam engenharia é:'ae, 'e número de estudantes com idades entre 20 e 25 anos é de:',idan );
     Writeln('O número de estudantes que cursam computação é:'ac, 'e número de estudantes com idades entre 20 e 25 anos é de:',idan );
     Writeln('O número de estudantes que cursam administração é:'aa, 'e número de estudantes com idades entre 20 e 25 anos é de:',idan );
 Readkey;  
End.

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá. Seja bem vindo ao Fórum do Clube do Hardware.

 

1) IMPORTÂNCIA DA INDENTAÇÃO E ORGANIZAÇÃO

Sempre mantenha seu código indentado. O próprio PascalZim em um botão indentar.

tela1.JPG

 

Obs.: tirei também os espaços entre linhas desnecessários.

program Pzim ;
//2. Um total de 500 alunos de uma universidade foram entrevistados. De cada um deles foram colhidas as
//seguintes informações: o código do curso que freqüenta (1-engenharia; 2-computação; 3-administração) e
//a idade. Faça um programa que processe estes dados e que forneça as seguintes informações:
//a) número de alunos por curso;
//a) número de alunos com idade entre 20 e 25 anos, por curso; e
//a) qual o curso com menor média de idade.
var
cda,ida,ae,ac,aa,aen,idan,acn,aan,na : real;
resp : string;
begin
  repeat
    ae:=0;
    ac:=0;
    aa:=0;
    repeat
      write('digite o número do aluno');
      readln(na);
      write('Tecle 1 para engenharia, 2 para computação, 3 para administração e 0 para parar ');
      readln(cda);
      write('Digite a idade do aluno');
      readln(ida);
      if cda=1 then
      begin
        ae := ae + 1;
        if (ida > 20) and (ida < 25)then
        begin
          aen:=aen+1;
          idan:=ida;
        end;
        if (cda =2)then
        begin
          ac := ac + 1;
          if (ida >20 and ida <25)then
          begin
            acn:=acn+1;
            idan:=ida;
          end;
        end;
        if (cda = 3) then
        begin
          aa := aa + 1;
          if (ida >20 and ida <25 )then
          begin
            aan:=aan+1;
            idan:=ida;
          end;
        end;
      Until cda = 0;
      Writeln('há mais algum estudante a ser considerado?:');
    Until resp = 'n';
    Writeln('O número de estudantes que cursam engenharia é:'ae, 'e número de estudantes com idades entre 20 e 25 anos é de:',idan );
    Writeln('O número de estudantes que cursam computação é:'ac, 'e número de estudantes com idades entre 20 e 25 anos é de:',idan );
    Writeln('O número de estudantes que cursam administração é:'aa, 'e número de estudantes com idades entre 20 e 25 anos é de:',idan );
    Readkey;
  end.

 

Perceba que só visualmente dá para ver que tem algo errado... como, por exemplo, que tem trechos que ficaram dentro do if cda=1 then, mas não deveriam, ou seja: provavelmente esqueceu o end;. do begin desse if.

 

 

 

2) NÃO TENTE FAZER TODO PROGRAMA DE UMA VEZ

Um dos problemas no seu código é que está tentando fazer muita coisa ao mesmo tempo... Melhor ir fazendo os programas aos poucos. A medida que for implementando, coloque para compilar (Ctrl+F9). Cada estrutura nova, coloca para compilar novamente... com o tempo/experiência vai reduzindo a quantidade.

 

 

 

3) SOBRE A DEFINIÇÃO DAS NOMENCLATURAS

Sugiro refazer o código utilizando variáveis mais sugestivas. Ex.:

program Pzim;
(*
2. Um total de 500 alunos de uma universidade foram entrevistados. De cada um 
deles foram colhidas as seguintes informações: o código do curso que freqüenta
(1-engenharia; 2-computação; 3-administração) e a idade. Faça um programa que 
processe estes dados e que forneça as seguintes informações:
a) número de alunos por curso;
b) número de alunos com idade entre 20 e 25 anos, por curso; e
b) qual o curso com menor média de idade.
*)
uses
  CRT;
var
  codigoCurso :integer; //1-engenharia; 2-computação; 3-administração
  idade       :integer;  
  contAlunos  :integer;  
  somaIdades  :integer;
  mediaIdades :real;
begin
for contAlunos := 1 to 5 do
  begin
  writeln;
  writeln('(1-Engenharia, 2-Computação, 3-Administração)');
  write  ('Códgo do curso :');
  readln(codigoCurso);
  write  ('Idade          :');
  readln(idade);
  somaIdades := somaIdades + idade;
  end;
writeln;
writeln('Total alunos :', contAlunos);
writeln('Soma idades  :', somaIdades);
ReadKey;
end.

 

Então, a ideia seria efetuar testes com dados que eu sei o resultado. Eu coloquei para ler 5, mas poderia ser apenas 3 mesmo... sei lá. Queria apenas que rodasse e desse o resultado esperado... Poderia sair inserindo 2, 2, 2.. e ver se o resultado dessa soma daria 10, por exemplo. Aí testo outra coisa mais complexa... por aí vai.

 

 

 

 

4) SOBRE O REPETIÇÕES ANINHADAS

6 horas atrás, Vinícius Proença disse:

já estou tendo muitos problemas com a lógica envolvendo as estruturas de repetição aninhadas

 

Veja, no momento, o problema no seu código NÃO está no uso de aninhamentos... mas sim nas sintaxes em geral do Pascal. Seu código não compila. Aqui entra também essa questão de fazer o código aos poucos... É isso... faça um código simples. Deixe rodando legal. Quando precisar inserir um novo recurso, você vai se preocupar só com esse recurso novo, entende? a ideia é fica limitado a lógica! assuma que a sintaxe do Pascal é obrigação está rodando! :)

 

***

 

Sugiro que refaça o código. Além do código no 3), segue outro exemplo de base que poderia aproveitar:

program FCdH;
(*
2. Um total de 500 alunos de uma universidade foram entrevistados. De cada um 
deles foram colhidas as seguintes informações: o código do curso que freqüenta
(1-engenharia; 2-computação; 3-administração) e a idade. Faça um programa que 
processe estes dados e que forneça as seguintes informações:
a) número de alunos por curso;
b) número de alunos com idade entre 20 e 25 anos, por curso; e
b) qual o curso com menor média de idade.
*)
uses
  CRT;
var
  codigoCurso :integer; //1-engenharia; 2-computação; 3-administração
  idade       :integer;  
  contAlunos  :integer;  
  somaIdades  :integer;
  mediaIdades :real;
begin
repeat
  writeln;
  contAlunos := contAlunos + 1;
  writeln('ALUNO ', contAlunos);
  writeln('(1-Engenharia, 2-Computação, 3-Administração    ou 0-SAIR)');
  write  ('Códgo do curso :');
  readln(codigoCurso);
  write  ('Idade          :');
  readln(idade);
  somaIdades := somaIdades + idade;
until (codigoCurso = 0) or (contAlunos >= 5);
writeln;
writeln('Total alunos :', contAlunos);
writeln('Soma idades  :', somaIdades);
ReadKey;
end.

 

PS: compare esse código com o outro. Teoricamente o outro estava rodando certo, mas daí resolvi implementar esse opção de "0 para sair". Só essa mudança já trás diversas outros "probleminhas a mais". Tem que analisar direito o que impactar... fazer novos testes e ir ajustando. (já vi que vai dar errada a quantidade de alunos e pode dar errada a soma da idade. Precisaria ajutar). Por aí vai.

 

Para começar, sugiro que pegue o código lá do 3) e edite-o para exibir o "número de alunos por curso". Obs.: deixe esse total e a soma lá também.. apenas para servi de base. Mais pra frente você só deixa o que foi pedido de fato.

 

Qualquer coisa poste o novo código completo e onde está com dúvidas.

 

No aguardo. 

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Citação

Muito Obrigado! Vou me dedicar o MÁXIMO que puder. Eu consegui resolver o algoritmo anterior, no entanto o código ficou no PC da faculdade. Assim que puder postarei ele resolvido. Agora, se não abusar muito, gostaria da sua opinião sobre a minha resolução do algoritmo abaixo... Tô no caminho ou nem? kkkk. Aguardo resposta. Muito Obrigado!

 

 

@Vinícius Proença, como o novo código trata-se de outro escopo, criei um novo tópico para ele.

 

 

Nesse tópico, vamos tratar apenas do problema inicial, ok?

 

Fico no aguardo do código.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Maninho, uma dica, leia código dos outros parceiros de faculdade e n tenho medo de pedir pra alguém fazer um código pra você copiar, pois isso ajudará você no aprendizado, porque todos nos temos um código diferente. mesmo sendo o mesmo desenvolvimento.

 

 

@Vinícius Proença

Olhei e Re olhei seu código, modifiquei algumas coisas e identifiquei os erros(e os desesperos): IF's sem fechar o end;, Alguns IF's que deveriam ficar dentro de outro IF's estavam fora, Variaveis todas em real, coloque as que devem ser inteira em integer, Faça o seguinte, n use abreviações nas variaveis isso faz você se perder no labirinto do código...  Pense, leia e releia antes de fazer o código, era simples, n precisava de dois repeat

 

Passei uns 30 minutos ou mais no seu código-labirinto, mudei pouca coisa, coloca um do lado do outro e compara, estudar, tenta modificar, assim q se aprende, e na facul faça perguntas, n fique perdendo tempo.

 

Segue o código: 

Program Pzim ;

//2. Um total de 500 alunos de uma universidade foram entrevistados. De cada um deles foram colhidas as
//seguintes informações: o código do curso que freqüenta (1-engenharia; 2-computação; 3-administração) e
//a idade. Faça um programa que processe estes dados e que forneça as seguintes informações:
//a) número de alunos por curso;
//a) número de alunos com idade entre 20 e 25 anos, por curso; e
//a) qual o curso com menor média de idade.


Var
    ContEnginner1, ContComput2, ContAdm3, idade1, idade2, idade3, NumeroAlunos, idade, Curso, ContEnginner, ContComput, contAdm : integer;
    Media2, Media1, Media3, MediaMenor: real;
    M: string;

Begin 
     Writeln('Digite o total de alunos: '); Readln(NumeroAlunos);
  Repeat
      Write('Tecle 1 para engenharia, 2 para computação, 3 para administração e 0 para parar:  ');
      Readln(Curso);
      Write('Digite a idade do aluno:  ' );
      readln(idade);
      
      if Curso = 1 then 
			  begin
         inc(ContEnginner1);
         if (idade > 20) and (idade < 25)then
         begin
           inc(ContEnginner); {A mesma coisa que contenginner:=contenginner+1; }
          idade1:=contEnginner;
          Media1:=Media1+idade;
         end;
        end;
    
        
      if Curso =2 then
        begin
         inc(ContComput2);
          if (idade > 20) and (idade < 25) then
          begin
            inc(ContComput);
            idade2:=ContComput;
             Media2:= Media2 +idade; 
          end;  
         
        End;  
    
          
      if Curso = 3 then
        begin
          inc(ContAdm3);
          if (idade >20) and (idade <25 )then
          begin
            inc(ContAdm);
            idade3 :=ContAdm; 
            Media3:=Media3+ idade;
          end;
        end ;

      
     
          
      Until Curso = 0;
      
        Media1:= Media1/Idade1;
        Media2:= Media2/Idade2;         
        Media3:= Media3/Idade3;
				
				If (Media1 < Media2) and (Media1 < Media3) then
				 Begin
				  MediaMenor:= Media1;
				  M:= 'Engenharia' ;
				 end;  
					If (Media2 < Media1) and (Media2 < Media3) then
				 Begin
				  MediaMenor:= Media2;
				  M:= 'Computação';
				 end;
				 	If (Media3 < Media2) and (Media3 < Media1) then
				 Begin
				  MediaMenor:= Media3;
				  M:= 'Administração';
				 end;     
    Writeln('O número de estudantes que cursam engenharia é:    ', ContEnginner1 , '     e número de estudantes com idades entre 20 e 25 anos é de:    ', ContEnginner );
    Writeln('O número de estudantes que cursam computação é:    ', ContComput2 , '     e número de estudantes com idades entre 20 e 25 anos é de:    ' , ContComput );
    Writeln('O número de estudantes que cursam administração é:    ', ContAdm3 , '     e número de estudantes com idades entre 20 e 25 anos é de:    ', ContAdm );
    Writeln('A menor média de ->   ', M ,'      das idades entre 20 e 25 é:  ', MediaMenor:2:2);
    Readkey;
  End.

Me mande perguntas, sobre o código, No aguardo... lembre-se dediquei 1 horas + ou - para te ajudar, cola aqui de novo hahaha valeu :D 

adicionado 0 minutos depois

obs: deixei bem separado p/ você identificar bem <>

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá a todos.

 

@AnonymousLPH, alguns pontos sobre o código:

 

Sobre:

10 horas atrás, AnonymousLPH disse:

Writeln('Digite o total de alunos: '); Readln(NumeroAlunos);

 

A quantidade de alunos é fixa. Vide:

Em 27/06/2019 às 06:13, Vinícius Proença disse:

//2. Um total de 500 alunos de uma universidade foram entrevistados.

 

E no seu código não está utilizando essa variável NumeroAlunos posteriormente. Basta apagar essa linha.

 

 

Sobre:

      Inc(contEnginner);
      idade1 := contEnginner;

Está utilizando duas variáveis para a mesma coisa. No programa, o valor de contEnginner sempre será igual ao valor de idade1,  no caso, basta utilizar uma variável (e apagar a outra).

 

Em fim, existem outros detalhes que poderiam ser revisados.

 

 

 

 

Baseado nesse último código, fui fazendo uns "ajustes" a medida que ia lendo o enunciado;

 

Vou aproveitar para tentar demonstrar como geralmente faço para criar um algoritmo:

 

obs.: apesar de seguir a base do código do @AnonymousLPH, vou seguir como se fosse indo do zero.

 

 

Crio a base inicial:

program Pzim;
{
2. Um total de 500 alunos de uma universidade foram entrevistados. De cada um
deles foram colhidas as seguintes informações: o código do curso que freqüenta
(1-engenharia; 2-computação; 3-administração) e a idade. Faça um programa que
processe estes dados e que forneça as seguintes informações:
a) número de alunos por curso;
b) número de alunos com idade entre 20 e 25 anos, por curso; e
c) qual o curso com menor média de idade.
}
uses
  CRT;
begin
  
end.

 

Daí vou tentando seguir o fluxo do enunciado.

 

Em 27/06/2019 às 06:13, Vinícius Proença disse:

2. Um total de 500 alunos de uma universidade foram entrevistados.

const
  TOTAL_ALUNOS = 500;

 

 

 

Em 27/06/2019 às 06:13, Vinícius Proença disse:

De cada um deles foram colhidas as seguintes informações: o código do curso que frequenta (1-engenharia; 2-computação; 3-administração) e a idade.

var
  codigoCurso :integer;
  idade :integer;

 

 

 

Em 27/06/2019 às 06:13, Vinícius Proença disse:

Faça um programa que processe estes dados e que forneça as seguintes informações:

 

Em 27/06/2019 às 06:13, Vinícius Proença disse:

a) número de alunos por curso;

var
  qtdAlunosEngenharia,
  qtdAlunosComputacao,
  qtdAlunosAdministracao :integer;

 

 

 

Em 27/06/2019 às 06:13, Vinícius Proença disse:

b) número de alunos com idade entre 20 e 25 anos, por curso; e

var
  qtdAlunosEntre20e25Engenharia,
  qtdAlunosEntre20e25Computacao,
  qtdAlunoEntre20e25Administracao :integer;

 

 

 

Em 27/06/2019 às 06:13, Vinícius Proença disse:

c) qual o curso com menor média de idade.

var
  cursoMenorMediaIdade :string;

 

 

Até o momento temos:

program Pzim;
{
2. Um total de 500 alunos de uma universidade foram entrevistados. De cada um
deles foram colhidas as seguintes informações: o código do curso que freqüenta
(1-engenharia; 2-computação; 3-administração) e a idade. Faça um programa que
processe estes dados e que forneça as seguintes informações:
a) número de alunos por curso;
b) número de alunos com idade entre 20 e 25 anos, por curso; e
c) qual o curso com menor média de idade.
}
uses
  CRT;
const
  TOTAL_ALUNOS = 500;
var
  codigoCurso :integer;
  idade :integer;
  
  qtdAlunosEngenharia,
  qtdAlunosComputacao,
  qtdAlunosAdministracao :integer;
  
  qtdAlunosEntre20e25Engenharia,
  qtdAlunosEntre20e25Computacao,
  qtdAlunoEntre20e25Administracao :integer;
  
  cursoMenorMediaIdade :string;
begin
  
end.

 

 

Vou montando uma base e fazendo pequenos testes e ajustes:

program Pzim;
{
2. Um total de 500 alunos de uma universidade foram entrevistados. De cada um
deles foram colhidas as seguintes informações: o código do curso que freqüenta
(1-engenharia; 2-computação; 3-administração) e a idade. Faça um programa que
processe estes dados e que forneça as seguintes informações:
a) número de alunos por curso;
b) número de alunos com idade entre 20 e 25 anos, por curso; e
c) qual o curso com menor média de idade.
}
uses
  CRT;
const
  {TOTAL_ALUNOS = 500;} //utilizado um valor menor para testes
  TOTAL_ALUNOS = 5;
var
  codigoCurso :integer;
  idade :integer;
  
  qtdAlunosEngenharia,
  qtdAlunosComputacao,
  qtdAlunosAdministracao :integer;
  
  qtdAlunosEntre20e25Engenharia,
  qtdAlunosEntre20e25Computacao,
  qtdAlunoEntre20e25Administracao :integer;
  
  cursoMenorMediaIdade :string;
  
  contAlunos :integer;
begin
writeln();
repeat
  ClrScr;
  writeln;
  contAlunos := contAlunos + 1;
  writeln('ALUNO ', contAlunos);
  writeln('(1-Engenharia, 2-Computação, 3-Administração    ou 0-SAIR)');
  write  ('Códgo do curso :'); readln(codigoCurso);
  write  ('Idade          :'); readln(idade);
  
  //a) número de alunos por curso;
  if (codigoCurso = 1) then
    begin
    
    end
  else
    if (codigoCurso = 2) then
      begin
    
      end
    else
      if (codigoCurso = 3) then
        begin
    
        end;
   
  
until (codigoCurso = 0) or (contAlunos >= 5);


end.

 

Indo para:

program Pzim;
{
2. Um total de 500 alunos de uma universidade foram entrevistados. De cada um
deles foram colhidas as seguintes informações: o código do curso que freqüenta
(1-engenharia; 2-computação; 3-administração) e a idade. Faça um programa que
processe estes dados e que forneça as seguintes informações:
a) número de alunos por curso;
b) número de alunos com idade entre 20 e 25 anos, por curso; e
c) qual o curso com menor média de idade.
}
uses
  CRT;
const
  {TOTAL_ALUNOS = 500;} //utilizado um valor menor para testes
  TOTAL_ALUNOS = 5;
var
  codigoCurso :integer;
  idade :integer;
  
  qtdAlunosEngenharia,
  qtdAlunosComputacao,
  qtdAlunosAdministracao :integer;
  
  qtdAlunosEntre20e25Engenharia,
  qtdAlunosEntre20e25Computacao,
  qtdAlunoEntre20e25Administracao :integer;
  
  cursoMenorMediaIdade :string;
  
  contAlunos :integer;
begin
writeln();
repeat
  ClrScr;
  writeln;
  contAlunos := contAlunos + 1;
  writeln('ALUNO ', contAlunos);
  writeln('(1-Engenharia, 2-Computação, 3-Administração    ou 0-SAIR)');
  write  ('Códgo do curso :'); readln(codigoCurso);
  write  ('Idade          :'); readln(idade);
  
  if (codigoCurso = 1) then
    begin
    Inc(qtdAlunosEngenharia);
    
    end
  else
    if (codigoCurso = 2) then
      begin
      Inc(qtdAlunosComputacao);
      
      end
    else
      if (codigoCurso = 3) then
        begin
        Inc(qtdAlunosAdministracao);
        end;
   
  
until (codigoCurso = 0) or (contAlunos >= 5);

writeln('NÚMERO DE ALUNOS POR CURSO:');
writeln('Engenharia   : ', qtdAlunosEngenharia);
writeln('Computação   : ', qtdAlunosComputacao);
writeln('Administração: ', qtdAlunosAdministracao);

ReadKey;
end.

 

Vejam que apenas fiz um esboço para APENAS UM DOS REQUISITOS. Vou fazendo testes para ver se vai se comportando legal.

 

 

 

Insiro um novo requisito (mais alguns ajustes)

program Pzim;
{
2. Um total de 500 alunos de uma universidade foram entrevistados. De cada um
deles foram colhidas as seguintes informações: o código do curso que freqüenta
(1-engenharia; 2-computação; 3-administração) e a idade. Faça um programa que
processe estes dados e que forneça as seguintes informações:
a) número de alunos por curso;
b) número de alunos com idade entre 20 e 25 anos, por curso; e
c) qual o curso com menor média de idade.
}
uses
  CRT;
const
  {TOTAL_ALUNOS = 500;} //utilizado um valor menor para testes
  TOTAL_ALUNOS = 5;
var
  codigoCurso :integer;
  idade :integer;
  
  qtdAlunosEngenharia,
  qtdAlunosComputacao,
  qtdAlunosAdministracao :integer;
  
  qtdAlunosEntre20e25Engenharia,
  qtdAlunosEntre20e25Computacao,
  qtdAlunosEntre20e25Administracao :integer;
  
  cursoMenorMediaIdade :string;
  
  contAlunos :integer;
begin
writeln();
repeat
  ClrScr;
  writeln;
  contAlunos := contAlunos + 1;
  writeln('ALUNO ', contAlunos);
  writeln('(1-Engenharia, 2-Computação, 3-Administração    ou 0-SAIR)');
  write  ('Códgo do curso :'); readln(codigoCurso);
  write  ('Idade          :'); readln(idade);
  
  if (codigoCurso = 1) then
    begin
    Inc(qtdAlunosEngenharia);
    if (idade >= 20) and (idade <=25) then
      begin
      Inc(qtdAlunosEntre20e25Engenharia);
      end;
    end
  else
    if (codigoCurso = 2) then
      begin
      Inc(qtdAlunosComputacao);
      if (idade >= 20) and (idade <=25) then
        begin
        Inc(qtdAlunosEntre20e25Computacao);
        end;
      end
    else
      if (codigoCurso = 3) then
        begin
        Inc(qtdAlunosAdministracao);
        if (idade >= 20) and (idade <=25) then
          begin
          Inc(qtdAlunosEntre20e25Administracao);
//obs.: vi que a variável "qtdAlunosEntre20e25Administracao estava escrito errada. Corrigi.
          end;
        end;
until (codigoCurso = 0) or (contAlunos >= 5);

ClrScr;
writeln();
writeln('NÚMERO DE ALUNOS POR CURSO:');
writeln('Engenharia   : ', qtdAlunosEngenharia);
writeln('Computação   : ', qtdAlunosComputacao);
writeln('Administração: ', qtdAlunosAdministracao);
writeln;
writeln('NÚMERO DE ALUNOS COM IDADE ENTRE 20 E 25, POR CURSO:');
writeln('Engenharia   : ', qtdAlunosEntre20e25Engenharia);
writeln('Computação   : ', qtdAlunosEntre20e25Computacao);
writeln('Administração: ', qtdAlunosEntre20e25Administracao);

ReadKey;
end.

 

 

O código por enquanto ficou assim:

program Pzim;
{
2. Um total de 500 alunos de uma universidade foram entrevistados. De cada um
deles foram colhidas as seguintes informações: o código do curso que freqüenta
(1-engenharia; 2-computação; 3-administração) e a idade. Faça um programa que
processe estes dados e que forneça as seguintes informações:
a) número de alunos por curso;
b) número de alunos com idade entre 20 e 25 anos, por curso; e
c) qual o curso com menor média de idade.
}
uses
  CRT;
const
  {TOTAL_ALUNOS = 500;} //utilizado um valor menor para testes
  TOTAL_ALUNOS = 5;
var
  contAlunos :integer;
  codigoCurso :integer;
  idade :integer;
  qtdAlunosEngenharia,
  qtdAlunosComputacao,
  qtdAlunosAdministracao :integer;
  qtdAlunosEntre20e25Engenharia,
  qtdAlunosEntre20e25Computacao,
  qtdAlunosEntre20e25Administracao :integer;
  
  somaIdadesEngenharia,
  somaIdadesComputacao,
  somaIdadesAdministracao :integer;
  mediaIdadeEngenharia,
  mediaIdadeComputacao,
  mediaIdadeAdministracao :integer;
  cursoMenorMediaIdade :string;
  menorMediaIdade :integer;
begin
repeat
  ClrScr;
  writeln;
  contAlunos := contAlunos + 1;
  writeln('ALUNO ', contAlunos);
  writeln('(1-Engenharia, 2-Computação, 3-Administração    ou 0-SAIR)');
  write  ('Códgo do curso :'); readln(codigoCurso);
  write  ('Idade          :'); readln(idade);
  if (codigoCurso = 1) then
    begin
    Inc(qtdAlunosEngenharia);
    if (idade >= 20) and (idade <=25) then
      begin
      Inc(qtdAlunosEntre20e25Engenharia);
      end;
    end
  else
    if (codigoCurso = 2) then
      begin
      Inc(qtdAlunosComputacao);
      if (idade >= 20) and (idade <=25) then
        begin
        Inc(qtdAlunosEntre20e25Computacao);
        end;
      end
    else
      if (codigoCurso = 3) then
        begin
        Inc(qtdAlunosAdministracao);
        if (idade >= 20) and (idade <=25) then
          begin
          Inc(qtdAlunosEntre20e25Administracao);
          end;
        end;
until (codigoCurso = 0) or (contAlunos >= 5);
ClrScr;
writeln();
writeln('NÚMERO DE ALUNOS POR CURSO:');
writeln('Engenharia   : ', qtdAlunosEngenharia);
writeln('Computação   : ', qtdAlunosComputacao);
writeln('Administração: ', qtdAlunosAdministracao);
writeln;
writeln('NÚMERO DE ALUNOS COM IDADE ENTRE 20 E 25, POR CURSO:');
writeln('Engenharia   : ', qtdAlunosEntre20e25Engenharia);
writeln('Computação   : ', qtdAlunosEntre20e25Computacao);
writeln('Administração: ', qtdAlunosEntre20e25Administracao);
writeln();
writeln('CURSO COM MENOR MÉDIA DE IDADE'); //FALTA IMPLEMENTAR OS CÁLCULOS E VERIFICAÇÕES
writeln(cursoMenorMediaIdade, ' com média de ', menorMediaIdade, ' anos');
ReadKey;
end.

 

Creio que basicamente ficou faltando "calcular a média de idade de cada curso, para assim após encontrar a menor média entre eles". Aí lá no final dar essa última resposta. Outro ponto que poderia implementar é que, após inserir 0 para o curso, o programa NÃO deveria perguntar a idade.

 

 

Caso alguém queria reanalisar esse algoritmo acima e fazer ajustes, fiquem a vontade. Mas já deixo a dica: evitem fazer todas as alterações de uma vez. Faz uma coisa, testa. Após tudo ok, começa a fazer outra e vai fazendo ajustes. Fazer ao mesmo tempo tende a dar problemas.. exemplo:

 

- ou implementa a parte para não ler a idade após informar o código de curso igual a 0; (dica: coloca um if  após ler o código do curso e dentro dele deixa a continuação);

- ou implementa o cálculo da médias e a menor média. obs.: aqui também pode subdividir as tarefas. Primeiro implementa o cálculo das médias, só após, implementa a parte de encontrar a menor média (pois não vai adiantar encontrar a menor média, se a médias estiverem erradas).

- ou implementa outra coisa, como "resolver a questão que o enunciado pede 500 alunos especificamente, mas no código está lendo tendo como condição de para o curso igual a 0, ou seja: isso não está no enunciado! tem que ler os 500 e pronto... não tem isso de 'até curso igual a zero". (<-- isso podemos analisar também, mas deixem mais pra frente)

 

 

 

Qualquer dúvida ou comentário é só postar.

 

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

Aprenda a ler resistores e capacitores

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!