Ir ao conteúdo
  • Cadastre-se

Pascal/Delphi programa pascal idade das pessoas


Posts recomendados

Type
    Idades = array[1..5] of string;
    
Var
    Idade: Idades;
    maiores, menores: integer;
    Soma, I: integer;
    
    
Begin
		       Soma:=0;
		  For I := 1 to 5 do
		      Begin
		      
		         Writeln('informe a idade:', I);
		         readln(Idade[I]);

Bom dia, tenho um Exercício para fazer mais não consigo termina-lo alguem poderia me ajudar?

Exercicio:

 

Em Pascal faça um algoritmo que armazene a idade das pessoas e ao final mostre o total das idades sendo divididos: os maiores de 18 anos e o menores de 18 anos. Utilize o Comando TYPE.

 

Não consigo fazer a parte que mostra quais são os maiores de 18 e os menores de 18.

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá.

 

1#

É de suma importância manter o código organizado. Não tem motivo para ter esse espaçamento nas linhas. Ex.:

 

Ou o código ficaria assim (caso ainda não tenha aprendido sobre indentação):

Type
Idades = array[1..5] of string;

Var
Idade: Idades;
maiores, menores: integer;
Soma, I: integer;

Begin
Soma:=0;
For I := 1 to 5 do
Begin
Writeln('informe a idade:', I);
readln(Idade[I]);

ou fica com algo assim:

Type
  Idades = array[1..5] of string;

Var
  Idade: Idades;
  maiores, menores: integer;
  Soma, I: integer;


Begin
Soma:=0;
For I := 1 to 5 do
  Begin
  Writeln('informe a idade:', I);
  readln(Idade[I]);

 

 

 

2#
Outra dica: ao implementar, sempre deixe trechos completos, ou seja, o seu código SEMPRE deve está NO MÍNIMO compilável, ou seja, você fala em:
 

12 horas atrás, Charles Diogo da Silva disse:

Não consigo fazer a parte que mostra quais são os maiores de 18 e os menores de 18. 

Mas o trecho que você postou, não está nem lendo as idades. Entende? Siga um exemplo abaixo de como você pode ir fazendo:

 

 

A parte que "você já sabe fazer poderia ficar com algo assim":

program QuantidadeMaioresMenores;
{
Em Pascal faça um algoritmo que armazene a idade das pessoas e ao final mostre o
total das idades sendo divididos: os maiores de 18 anos e o menores de 18 anos.
Utilize o Comando TYPE. 
}
type
  {Idades = array[1..5] of string;} //por que idade como string?
  t_idades = array[1..5] of integer;
  
var
  idades      :t_idades;
  qtdMaiores,
  qtdMenores  :integer;
  i           :integer;
   
begin
for i:=1 to 5 do
  begin
  writeln('Informe a idade ',i,' :');
  readln(idades[i]);
  end;
  
  
  
  
end.

Veja que a ideia é que fique apenas esperando a parte que não sabe fazer...

 

Independente de está certo ou não, se botar para compilar, não pode dar erro, ou seja, seu código NÃO DEVE TER ERROS DE SINTAXE (regras do Pascal)... enquanto não compilar, você ter que ver o que está acontecendo e corrigir. Não tem porque inserir uma coisa nova, sendo o que está fazendo ainda não está funcionando...  Veja, essa dica se refere apenas em "sempre deixar o código compilável", mas não necessariamente isso garante que está certo.. saber se o código está funcionando de acordo com o que você precisa é outra história.

 

Pronto... peguei esse código e rodei... após supostamente ler as idades, o programa fecha... ou seja, não tem como saber se leu certo ou não. Uma forma de verificar isso, seria mandar imprimir as idades. Ex.:
 

Após a leitura inseri o trecho abaixo:

whiteln('IDADES : ');
for i:=1 to 5 do
  begin
  writeln(idades[i]);
  end;

Repare que a ideia é deixar o trecho completo.  Se coloquei um begin no for, já coloco o seu end;. Depois dentro começo a inserir o que eu quero. No caso apenas uma linha que vai exibir a idade.

 

Esse trecho acima é só para testar se está lendo a idade ou não, certo?. Daí compila! Verás que vai dar erro... pois não vai reconhecer o comando whiteln (está escrito errado), ou seja, está com um erro de sintaxe. Vou lá e corrijo para writeln.. Em fim, até agora tenho isso:

program QuantidadeMaioresMenores;
{
Em Pascal faça um algoritmo que armazene a idade das pessoas e ao final mostre o
total das idades sendo divididos: os maiores de 18 anos e o menores de 18 anos.
Utilize o Comando TYPE. 
}
type
  {Idades = array[1..5] of string;} //por que idade como string?
  t_idades = array[1..5] of integer;
  
var
  idades      :t_idades;
  qtdMaiores,
  qtdMenores  :integer;
  i           :integer;
   
begin
for i:=1 to 5 do
  begin
  writeln('Informe a idade ',i,' :');
  readln(idades[i]);
  end;
writeln('IDADES : ');
for i:=1 to 5 do
  begin
  writeln(idades[i]);
  end;
  


end.

Testei aqui, mas "após inseri as idades, o programa fecha sozinho sem mostrar as idades" :(, ou seja, aquilo que estou fazendo no momento não funcionou. Tá! mas já sabia que Isso aconteceu porque, após supostamente imprimir as idades, vai para o end. e fecha, no caso não dando tempo de ver as resposta... aí insiro um readln; antes do end. para resolver, pois desta forma o programa vai parar para "ler algo", dando tempo de ver a tela (até pressionar um ENTER). (obs.: se você usa PascalZim, esse problema não ocorrerá, pois a tela fica aberta, mesmo após finalizar).

 

 

 

3#

Sobre implementar:

12 horas atrás, Charles Diogo da Silva disse:

a parte que mostra quais são os maiores de 18 e os menores de 18. 


Então, inicialmente já tem 2 pontos:

1) o enunciado não pede para "mostrar quais", mas sim "mostrar quantos". São coisas diferentes.

2) para "mostrar", é necessário antes "calcular/contar".

 

Então, já verificamos que conseguimos ler as idades. Agora, precisaria verificar se cada uma desses idades é maior igual a 18 e verificar se é menor que 18.

 

Após a parte que ler as idades, implementa essa parte que "conta quantas pessoas são maiores de 18" e "quantas pessoas são menores que 18".

 

Segue uma base:
Código:

Spoiler

program QuantidadeMaioresMenores;
{
Em Pascal faça um algoritmo que armazene a idade das pessoas e ao final mostre o
total das idades sendo divididos: os maiores de 18 anos e o menores de 18 anos.
Utilize o Comando TYPE. 
}
type
  {Idades = array[1..5] of string;} //por que idade como string?
  t_idades = array[1..5] of integer;
  
var
  idades      :t_idades;
  qtdMaiores,
  qtdMenores  :integer;
  i           :integer;
   
begin
writeln('Insira as 5 idades:');
for i:=1 to 5 do
  begin
  write  ('Idade ',i,': ');
  readln(idades[i]);
  end;
for i:=1 to 5 do
  begin
  
  
  
  end;
readln;
end.

 

Ou seja, inicialmente declara lá no var as variáveis que vão armazenar essas quantidades que está buscando. Poderia usar por exemplo qtdMaiores e qtdMenores. Ambos do tipo integer.

 

Dentro do segundo for, implemente as duas estruturas de seleção.

se idade[i ] maior que 18, então qtdMaiores será igual a ela mesma mais 1.

se idade[i ] menor que 18, então qtdMaiores será igual a ela mesma menos 1.

 

Deixe essa verificação compilando... só depois, veja: SÓ DEPOIS DE ESTÁ COMPILANDO, implemente depois do segundo a parte que exibe a resposta, ou seja, o texto que diz "o total de maiores de 18 anos e o total de menores de 18 anos" (os valores estarão nessas duas variáveis novas).

 

***

 

Tem outro pontos a analisar... mas por enquanto seria isso.

 

Qualquer dúvida ou crítica é só postar.

 

No aguardo.

 

 

 

 

 

Link para o comentário
Compartilhar em outros sites

13 horas atrás, Simon Viegas disse:
Spoiler

 

 

Olá.

 

1#

É de suma importância manter o código organizado. Não tem motivo para ter esse espaçamento nas linhas. Ex.:

 

Ou o código ficaria assim (caso ainda não tenha aprendido sobre indentação):



Type
Idades = array[1..5] of string;

Var
Idade: Idades;
maiores, menores: integer;
Soma, I: integer;

Begin
Soma:=0;
For I := 1 to 5 do
Begin
Writeln('informe a idade:', I);
readln(Idade[I]);

ou fica com algo assim:



Type
  Idades = array[1..5] of string;

Var
  Idade: Idades;
  maiores, menores: integer;
  Soma, I: integer;


Begin
Soma:=0;
For I := 1 to 5 do
  Begin
  Writeln('informe a idade:', I);
  readln(Idade[I]);

 

 

 

2#
Outra dica: ao implementar, sempre deixe trechos completos, ou seja, o seu código SEMPRE deve está NO MÍNIMO compilável, ou seja, você fala em:
 

Mas o trecho que você postou, não está nem lendo as idades. Entende? Siga um exemplo abaixo de como você pode ir fazendo:

 

 

A parte que "você já sabe fazer poderia ficar com algo assim":



program QuantidadeMaioresMenores;
{
Em Pascal faça um algoritmo que armazene a idade das pessoas e ao final mostre o
total das idades sendo divididos: os maiores de 18 anos e o menores de 18 anos.
Utilize o Comando TYPE. 
}
type
  {Idades = array[1..5] of string;} //por que idade como string?
  t_idades = array[1..5] of integer;
  
var
  idades      :t_idades;
  qtdMaiores,
  qtdMenores  :integer;
  i           :integer;
   
begin
for i:=1 to 5 do
  begin
  writeln('Informe a idade ',i,' :');
  readln(idades[i]);
  end;
  
  
  
  
end.

Veja que a ideia é que fique apenas esperando a parte que não sabe fazer...

 

Independente de está certo ou não, se botar para compilar, não pode dar erro, ou seja, seu código NÃO DEVE TER ERROS DE SINTAXE (regras do Pascal)... enquanto não compilar, você ter que ver o que está acontecendo e corrigir. Não tem porque inserir uma coisa nova, sendo o que está fazendo ainda não está funcionando...  Veja, essa dica se refere apenas em "sempre deixar o código compilável", mas não necessariamente isso garante que está certo.. saber se o código está funcionando de acordo com o que você precisa é outra história.

 

Pronto... peguei esse código e rodei... após supostamente ler as idades, o programa fecha... ou seja, não tem como saber se leu certo ou não. Uma forma de verificar isso, seria mandar imprimir as idades. Ex.:
 

Após a leitura inseri o trecho abaixo:



whiteln('IDADES : ');
for i:=1 to 5 do
  begin
  writeln(idades[i]);
  end;

Repare que a ideia é deixar o trecho completo.  Se coloquei um begin no for, já coloco o seu end;. Depois dentro começo a inserir o que eu quero. No caso apenas uma linha que vai exibir a idade.

 

Esse trecho acima é só para testar se está lendo a idade ou não, certo?. Daí compila! Verás que vai dar erro... pois não vai reconhecer o comando whiteln (está escrito errado), ou seja, está com um erro de sintaxe. Vou lá e corrijo para writeln.. Em fim, até agora tenho isso:



program QuantidadeMaioresMenores;
{
Em Pascal faça um algoritmo que armazene a idade das pessoas e ao final mostre o
total das idades sendo divididos: os maiores de 18 anos e o menores de 18 anos.
Utilize o Comando TYPE. 
}
type
  {Idades = array[1..5] of string;} //por que idade como string?
  t_idades = array[1..5] of integer;
  
var
  idades      :t_idades;
  qtdMaiores,
  qtdMenores  :integer;
  i           :integer;
   
begin
for i:=1 to 5 do
  begin
  writeln('Informe a idade ',i,' :');
  readln(idades[i]);
  end;
writeln('IDADES : ');
for i:=1 to 5 do
  begin
  writeln(idades[i]);
  end;
  


end.

Testei aqui, mas "após inseri as idades, o programa fecha sozinho sem mostrar as idades" :(, ou seja, aquilo que estou fazendo no momento não funcionou. Tá! mas já sabia que Isso aconteceu porque, após supostamente imprimir as idades, vai para o end. e fecha, no caso não dando tempo de ver as resposta... aí insiro um readln; antes do end. para resolver, pois desta forma o programa vai parar para "ler algo", dando tempo de ver a tela (até pressionar um ENTER). (obs.: se você usa PascalZim, esse problema não ocorrerá, pois a tela fica aberta, mesmo após finalizar).

 

 

 

3#

Sobre implementar:


Então, inicialmente já tem 2 pontos:

1) o enunciado não pede para "mostrar quais", mas sim "mostrar quantos". São coisas diferentes.

2) para "mostrar", é necessário antes "calcular/contar".

 

Então, já verificamos que conseguimos ler as idades. Agora, precisaria verificar se cada uma desses idades é maior igual a 18 e verificar se é menor que 18.

 

Após a parte que ler as idades, implementa essa parte que "conta quantas pessoas são maiores de 18" e "quantas pessoas são menores que 18".

 

Segue uma base:
Código:

  Ocultar conteúdo



program QuantidadeMaioresMenores;
{
Em Pascal faça um algoritmo que armazene a idade das pessoas e ao final mostre o
total das idades sendo divididos: os maiores de 18 anos e o menores de 18 anos.
Utilize o Comando TYPE. 
}
type
  {Idades = array[1..5] of string;} //por que idade como string?
  t_idades = array[1..5] of integer;
  
var
  idades      :t_idades;
  qtdMaiores,
  qtdMenores  :integer;
  i           :integer;
   
begin
writeln('Insira as 5 idades:');
for i:=1 to 5 do
  begin
  write  ('Idade ',i,': ');
  readln(idades[i]);
  end;
for i:=1 to 5 do
  begin
  
  
  
  end;
readln;
end.

 

Ou seja, inicialmente declara lá no var as variáveis que vão armazenar essas quantidades que está buscando. Poderia usar por exemplo qtdMaiores e qtdMenores. Ambos do tipo integer.

 

Dentro do segundo for, implemente as duas estruturas de seleção.

se idade[i ] maior que 18, então qtdMaiores será igual a ela mesma mais 1.

se idade[i ] menor que 18, então qtdMaiores será igual a ela mesma menos 1.

 

Deixe essa verificação compilando... só depois, veja: SÓ DEPOIS DE ESTÁ COMPILANDO, implemente depois do segundo a parte que exibe a resposta, ou seja, o texto que diz "o total de maiores de 18 anos e o total de menores de 18 anos" (os valores estarão nessas duas variáveis novas).

 

***

 

Tem outro pontos a analisar... mas por enquanto seria isso.

 

Qualquer dúvida ou crítica é só postar.

 

No aguardo.

 

 

 

adicionado 7 minutos depois
type
  t_idades = array[1..5] of integer;
  
var
  idade     :t_idades;
  qtdMaiores,
  qtdMenores  :integer;
  i           :integer;
   
begin
writeln('Insira as 5 idades:');
for i:=1 to 5 do
  begin
   write  ('Idade ',i,': ');
   readln(idade[i]);
  end;
     for i:=1 to 5 do
       if (idade[i] > 18) then
         qtdMaiores:= qtdMaiores + 1;
  
       if (idade[i] < 18) then
         qtdMenores:= qtdMenores - 1;
         
         Writeln('o total de maiores de 18 anos e:', qtdMaiores);
         Writeln('o total de menores de 18 anos e:', qtdMenores);
         readln;
       
end.

Então assim seria o algoritmo completo, mas o problema quando mostra as idades maiores e menores que 18, por exemplo digito 3 idades de menores que 18 e 2 idades maiores 18, o algoritmo deveria mostrar assim: "o total de idades menores de 18 anos e: 3 e assim: "o total de idades maiores de 18 anos e: 2 , mais não mostra, mostra outra numeração, o que eu fiz de errado nesse final?

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá.

 

4#

Como sugerido em 1#, é IMPRESCINDÍVEL que o código SEMPRE ESTEJA INDENTADO. Sugiro que dedique um bom esforço no entendimento desse conceito e na sua aplicação.

 

Veja o exemplo:

Seu código:

2 horas atrás, Charles Diogo da Silva disse:

begin
writeln('Insira as 5 idades:');
for i:=1 to 5 do
  begin
   write  ('Idade ',i,': ');
   readln(idade[i]);
  end;
     for i:=1 to 5 do
       if (idade[i] > 18) then
         qtdMaiores:= qtdMaiores + 1;
  
       if (idade[i] < 18) then
         qtdMenores:= qtdMenores - 1;
         
         Writeln('o total de maiores de 18 anos e:', qtdMaiores);
         Writeln('o total de menores de 18 anos e:', qtdMenores);
         readln;
       
end.

 

Agora o código indentado:

begin
writeln('Insira as 5 idades:');
for i:=1 to 5 do
  begin
   write  ('Idade ',i,': ');
   readln(idade[i]);
  end;
for i:=1 to 5 do //esse for está no mesmo nível do for acima
  if (idade[i] > 18) then //apenas esse if está dendo do for
    qtdMaiores:= qtdMaiores + 1; //apenas esse comando está dentro do if
if (idade[i] < 18) then //esse if está fora da(s) estrutura(a) acima, logo está no mesmo nível dos for.
  qtdMenores:= qtdMenores - 1; //apenas essa linha está dentro do if
writeln('o total de maiores de 18 anos e:', qtdMaiores); //está fora, logo...
writeln('o total de menores de 18 anos e:', qtdMenores);
readln;
end.

obs.: existe diversos padrões de indentação. A ideia é manter sempre uma coerência.
 

Perceba que visualmente já vemos que tem coisa errado aí... pois no mínimo esse segundo if deveria ficar dentro do for.

 

Corrigindo ficaria:

begin
writeln('Insira as 5 idades:');
for i:=1 to 5 do
  begin
   write  ('Idade ',i,': ');
   readln(idade[i]);
  end;
for i:=1 to 5 do
  begin //pois tem mais de uma linha dentro
  if (idade[i] > 18) then
    qtdMaiores:= qtdMaiores+1;
  if (idade[i] < 18) then
    {qtdMenores:= qtdMenores - 1; } //por que menos?
    qtdMenores:= qtdMenores+1;
  end;
writeln('o total de maiores de 18 anos e:', qtdMaiores);
writeln('o total de menores de 18 anos e:', qtdMenores);
readln;
end.

 

Alguma dúvida até aqui?

 

Novamente: SEMPRE, ou seja, SEMPRE MESMO... mantenha o código indentado!!! Não existe desculpa para isso!!!!

 

 

 

5#

OK, seu código está pronto e não precisa fazer mais nada... não acha? clique aqui! :)

 

Temos pelo menos 2 pontos:

5.1#

Como é matematicamente impossível um número ser maior que 18, e ao mesmo tempo menor que 18 (são mutuamente excludentes), se faz necessário um else. Ex.:

for i:=1 to 5 do
  begin
  if (idade[i] > 18) then
    qtdMaiores:= qtdMaiores+1
  else
    if (idade[i] < 18) then
      qtdMenores:= qtdMenores+1;
  end;

 

 

5.2#

Como fica se o cara tiver exatamente 18???

Veja o enunciado:

Em 26/11/2018 às 08:36, Charles Diogo da Silva disse:

Em Pascal faça um algoritmo que armazene a idade das pessoas e ao final mostre o total das idades sendo divididos: os maiores de 18 anos e o menores de 18 anos. Utilize o Comando TYPE.

 

Não fala nada em ter "exatamente" 18 (ser igual a 18). Experimente digitar 18 ai no código e veja o que acontece....

 

Então, se for seguir o pé da letra do enunciado, a estrutura está correta... se for seguir o bom senso, tirará a dúvida com quem disponibilizou o enunciado e verificará se é para considerar tendo 18 maior ou não. Se fosse para "chutar", seria para considerar... ou seja, usaria ">=" em vez de ">" no primeiro if. Mas, no mínimo levante essa questão lá com professor ou lá quem ou o quê forneceu a questão.

 

 

6#

Se incluir o ">=" lá no primeiro if, passaremos a ter uma "dicotomia", ou seja, "se não for maior ou igual a 18", OBRIGATORIAMENTE será menor que 18. Não existe uma terceira possibilidade, logo, não precisa do segundo if, apenas precisará do else.

 

 

 

***

 

Qualquer dúvida é só perguntar.

Posta o código corrigido para avaliarmos.

 

No aguardo.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!