Ir ao conteúdo
  • Cadastre-se

Pascal/Delphi Auxilio com Estruturas de Repetição e Contadores


Posts recomendados

Bom dia galera, tudo bem?

 

Comecei faz pouco tempo a estudar Pascal, até agora entendi bastante coisa já, mas o que estou com muita dificuldade são nas estruturas de repetição (for, while, repeat) e em relação aos contadores também, comecei a fazer esse exercício:

 

Utilizando as estruturas de repetição estudadas em sala de aula, faça um programa em Pascal que receba dez idades, pesos e alturas, calcule e mostre:
A média das idades das dez pessoas;
A quantidade de pessoas com peso superior a 90 quilos e altura inferior a 1,50 metros;
A percentagem de pessoas com idade entre 10 e 30 anos entre as pessoas que medem mais de 1,90 metros.

 

Consegui fazer somente a primeira exigência, as duas últimas eu travei, se alguém puder me ajudar, segue abaixo o que já fiz:

 

program EX2;
{$CODEPAGE UTF8} //para permitir acentos nas string em alguns compiladores [Não necessário no PascalZim, mas pode deixar]
var
  cont, cont2, cont3, cont90, cont150,
  idade, somaidade: integer;
  pesoalt, altura, somaalt150, alt150,
  peso90, peso, somapeso90, media: real;
  
begin
  for cont := 1 to 10 do  
  begin; 
    writeln('Digite a idade');
    readln(idade);        
    writeln('Digite a altura em metros');
    readln(altura); 
    writeln('Digite o peso');
    readln(peso); 
    somaidade := somaidade+idade;
    media := somaidade/10;
    clrscr
  end;
  
  writeln('A média das idades é: ', media:10:2);
  
  if (peso>90) then 
  begin
    cont90 := cont90+1;
    somapeso90 :=  cont90;
  end;
  
  //begin; 

  if (altura<1.50) then 
  begin
    cont150 := cont150+1;
    somaalt150 :=  cont150;
  end;

  pesoalt := somapeso90+somaalt150;                   
  
  writeln('A quamtidade de pessoas com mais de 90kg e menores que 1.50m é de:', pesoalt:10:2);


                

E se alguém conseguir me ajudar com esse outro que é quase o mesmo estilo:

 

Faça um programa em Pascal que receba um valor (inteiro) N. Após isso, devem ser inseridos os nomes de N pessoas e seus respectivos pesos e idades. Ao final seu algoritmo deve mostrar:
O nome e peso da pessoa mais pesada.
O nome e peso da pessoa mais leve.
O nome e idade da pessoa mais velha.
O nome e idade da pessoa mais nova.

 

Creio que com isso vou conseguir entender melhor essas questões

Link para o comentário
Compartilhar em outros sites

4 horas atrás, Pedroso90 disse:

Comecei faz pouco tempo a estudar pascal, até agora entendi bastante coisa já, mas o que estou com muita dificuldade são nas estuturas de repetição (for, while, repeat) e em relação aos contadores também, comecei a fazer esse exercício

De uma estudada em logica de programação

 

O seu algoritmo está incompleto.

Eu fiz este para demonstrar

program Estruturas_de_repeticao;
uses
    crt;
    
const
    Q_PESSOAS = 10;
    
var
    pessoas_90_150, pessoas_10_30_190, contador : integer;
    peso, altura : real;
    idade : byte;
    
begin
    { Inicia as variaveis }
    pessoas_10_30_190:= 0;
    pessoas_90_150:= 0;
    for contador:= 1 to Q_PESSOAS do
    begin
        clrscr;
        
        writeln('Digite a idade da pessoa');
        readln(idade);
        
        writeln('Digite a altura da pessoa');
        readln(altura);
        
        writeln('Digite o peso da pessoa');
        readln(peso);
        
        if (peso > 90) AND (altura < 1.50) then
            inc(pessoas_90_150);
            
        if (idade >= 10) AND (idade <= 30) AND (altura >= 1.90) then
            inc(pessoas_10_30_190);
    end;
    
    writeln('A quantidade de pessoas obesas morbidas menores que 1,50 e:', pessoas_90_150);
    writeln('A porcentagem de de pessoas entre 10 e 30 anos e que medem mais de 1,90 e:', (pessoas_10_30_190/Q_PESSOAS)*100:2:0,'%');
    readkey;
end.

De uma estudada nele 👍

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

  • Membro VIP

Vou tentar também aqui para demonstrar..

 

@Pedroso90, um ponto principal é: seu código SEMPRE deve está compilável, ou seja: se botar para compilar, tem que compilar sem erros... No caso do seu código postado, ele está incompleto... ou porque você esqueceu de copiar (acontece); ou porque realmente deixou parte faltando (isso é proibido :)).

 

A primeira coisa a se fazer é entender o problema... me parece que tudo está bem claro... então não tem nem muito no que pensar... dá para ir direto para o código. Exemplo de base inicial:
 

program EX2;
{$CODEPAGE UTF8} //para permitir acentos nas string em alguns compiladores [Não necessário no PascalZim, mas pode deixar]

{ 
ENUNCIADO:
Utilizando as estruturas de repetição estudadas em sala de aula, faça um programa em Pascal que receba 
dez idades, pesos e alturas, calcule e mostre:
* A média das idades das dez pessoas;
* A quantidade de pessoas com peso superior a 90 quilos e altura inferior a 1,50 metros;
* A percentagem de pessoas com idade entre 10 e 30 anos entre as pessoas que medem mais de 1,90 metros.
}
var
  mediaIdade,
  qtdPesoMaior90AlturaMenor150,
  qtdIdadeEntre10e30AlturaMaior190: real;
  
begin
  
  
end.

 

Se botar para compilar, deve compilar de boa...

 

Aí, vou partir para leitura dos dados... ex.:

[...]
const
  QTD_PESSOAS = 10;

var
  mediaIdade,
  qtdPesoMaior90AlturaMenor150,
  qtdIdadeEntre10e30AlturaMaior190: real;
  cont: integer;
  
begin
  for cont := 1 to QTD_PESSOAS do
  begin
  
  end;
  
  
end.


Observe que o código continua compilável... daí vai implementando... 

 

Mas porque isso? Dessa forma, você vai garantido que o código não tem erros de sintaxe... vai ficar apenas "preocupado" com a parte da lógica. Se compilar e der erro, vai meio que ter certeza que o erro está em algo que acabou de fazer... vai lá e corrigo.

 

OBSERVAÇÃO: deixar compilável não é mesma coisa de "deixar certo". A proposta aqui é que foque apenas na lógica...

 

Mais um pouco:

[...]
const
  //QTD_PESSOAS = 10;
  QTD_PESSOAS = 3;
var
  somaIdade,
  mediaIdade,
  qtdPesoMaior90AlturaMenor150,
  qtdIdadeEntre10e30AlturaMaior190: real;
  cont: integer;
  
  idade: integer;
  peso, altura: real;
  
begin
for cont := 1 to QTD_PESSOAS do 
  begin
  write  ('Idade : '); readln(idade); 
  //write  ('Altura: '); readln(altura); 
  //write  ('Peso  : '); readln(peso);
  
  somaIdade := somaIdade+idade;
  end;

mediaIdade := somaIdade / QTD_PESSOAS; //observe que o cálculo da média só precisa ser feito apenas uma vez!

writeln('Média das idades: ', mediaIdade:1:3);
ReadKey();
end.

 

Fazendo testes:

image.png

 

Resultado esperado:

image.png

 

 

Até aqui bateu!

 

..fui fazendo testes e ajustes. Cheguei a isso:

program EX2;
{$CODEPAGE UTF8} //para permitir acentos nas string em alguns compiladores [Não necessário no PascalZim, mas pode deixar]
uses
  CRT; //necessário para alguns compiladores reconhecerem o ReadKey()
{ 
ENUNCIADO:
Utilizando as estruturas de repetição estudadas em sala de aula, faça um programa em Pascal que receba 
dez idades, pesos e alturas, calcule e mostre:
* A média das idades das dez pessoas;
* A quantidade de pessoas com peso superior a 90 quilos e altura inferior a 1,50 metros;
* A percentagem de pessoas com idade entre 10 e 30 anos entre as pessoas que medem mais de 1,90 metros.
}
const
  //QTD_PESSOAS = 10;
  QTD_PESSOAS = 3;
var
  mediaIdade: real;
  somaIdade,
  qtdPesoMaior90AlturaMenor150,
  qtdIdadeEntre10e30AlturaMaior190,
  cont: integer;
  
  idade: integer;
  peso, altura: real;
  
begin
for cont := 1 to QTD_PESSOAS do 
  begin
  write  ('Idade : '); readln(idade); 
  write  ('Altura: '); readln(altura); 
  write  ('Peso  : '); readln(peso);
  
  somaIdade := somaIdade+idade;
  
  if ((peso > 90) and (altura < 1.50)) then
    Inc(qtdPesoMaior90AlturaMenor150);    
  
  if (((idade > 10) and (idade <=30)) and (altura > 1.90)) then
    Inc(qtdIdadeEntre10e30AlturaMaior190);
  end;


mediaIdade := somaIdade / QTD_PESSOAS; //observe que o cálculo da média só precisa ser feito apenas uma vez!

writeln();
writeln();
writeln('Média das idades');
writeln(mediaIdade:1:3);
writeln();
writeln('Quantidade de pessoas com peso superior a 90 quilos e altura inferior a 1,50 metros');
writeln(qtdPesoMaior90AlturaMenor150);
writeln();
writeln('Percentagem de pessoas com idade entre 10 e 30 anos entre as pessoas que medem mais de 1,90 metros');
writeln(qtdIdadeEntre10e30AlturaMaior190);

ReadKey();
end.

 

Teste rápido:
image.png

 

Nesses testes utilizei apenas dados para 3 pessoas... Se funciona com 3, deve funcionar com qualquer* N>1. Testar com 3 já fica chato pra c@c&t&, imagine com 10? Daí, uma ideia é criar alguma estrutura que poupe-nos desse trabalho. Tem duas formas básicas:
- deixar os dados fixos; (Seria mais útil quando usando vetores.)

- gerar dados automaticamente. (Basicamente utilizando dados aleatórios.)

 

Exemplo:

  //VERSÂO GERANDO AUTOMATICAMENTE (vou deixar você mesmo interpretar e, se desejar, efetuar ajustes)
  write  ('Idade : '); idade := 14 + Random(60); writeln(idade);
  write  ('Altura: '); altura := 1.30 + Random(70)/100; writeln(altura:1:2);
  write  ('Peso  : '); peso := 40 + Random(800)/10; writeln(peso:1:1);


Sai algo assim:

image.png

 

Ajustei para imprimir os dados de uma mesma pessoa um ao lado do outro (economizar linhas):

  //VERSÂO GERANDO AUTOMATICAMENTE (vou deixar você mesmo interpretar e, se deseja, ajustar)
  write  ('Idade: '); idade := 14 + Random(60); write  (idade);
  write  ('Altura: ':15); altura := 1.30 + Random(90)/100; write  (altura:1:2);
  write  ('Peso : ':15); peso := 40 + Random(800)/10; writeln  (peso:1:1);

 

Pode parecer estranho... mas só para para entender!!!  
Obs.: claro que essa estrutura não sai do nada.. fui fazendo teste até que ficasse mais ou menos bom... Os comandos também fui tendo contato em outros experiências e pesquisas... basicamente fui apenas testando na práticas, mas se não soubesse, poderia vir no fórum e perguntar como poderia fazer, entende?

 

Resultado:

image.png

O ":" ficou separado do "Peso", estou com preguiça de tirar outro print, rs. Mas veja que seria apenas ir lá no código e tirar o espaço... e rodar novamente.


 

Principais pontos:

- deixe sempre o código compilável. Pode ficar compilando toda hora... mas a medida que vai pegando a prática, vai reduzindo a quantidade de vezes;

- utilize nomenclaturas de variáveis o mais sugestíveis possíveis ("deixar semântico"). Facilita na identificação de qual variável usar em qual momento... e deixa o código mais legível para outros lerem.

 

Adendo: observe o detalhe importante no cálculo da porcentagem... é para certas idades apenas para certa altura... veja nesse caso como a nomenclatura da variável deixa isso mais claro!!! (não é uma porcentagem sobre o total).

 

Por aí vai.

 

Qualquer dúvida é só perguntar

 

Ah! segue o código atual:

program EX2;
{$CODEPAGE UTF8} //para permitir acentos nas string em alguns compiladores [Não necessário no PascalZim, mas pode deixar]
uses
  CRT; //necessário para alguns compiladores reconhecerem o ReadKey()
{ 
ENUNCIADO:
Utilizando as estruturas de repetição estudadas em sala de aula, faça um programa em Pascal que receba 
dez idades, pesos e alturas, calcule e mostre:
* A média das idades das dez pessoas;
* A quantidade de pessoas com peso superior a 90 quilos e altura inferior a 1,50 metros;
* A percentagem de pessoas com idade entre 10 e 30 anos entre as pessoas que medem mais de 1,90 metros.
}
const
  QTD_PESSOAS = 10;
var
  mediaIdade, percIdadeEntre10e30AlturaMaior190: real;
  somaIdade,
  qtdPesoMaior90AlturaMenor150,
  qtdIdadeEntre10e30AlturaMaior190,
  qtdAlturaMaior190,
  cont: integer;
  
  idade: integer;
  peso, altura: real;
  
begin
Randomize; //evitar que gere números repetidos com o Random()

for cont := 1 to QTD_PESSOAS do 
  begin
  //write  ('Idade : '); readln(idade); 
  //write  ('Altura: '); readln(altura); 
  //write  ('Peso  : '); readln(peso);
  
  //VERSÂO GERANDO AUTOMATICAMENTE (vou deixar você mesmo interpretar e, se deseja, ajustar)
  write  ('Idade: '); idade := 14 + Random(60); write  (idade);
  write  ('Altura: ':15); altura := 1.30 + Random(90)/100; write  (altura:1:2);
  write  ('Peso: ':15); peso := 40 + Random(800)/10; writeln  (peso:1:1);
  
  
  somaIdade := somaIdade+idade;
  
  if ((peso > 90) and (altura < 1.50)) then
    Inc(qtdPesoMaior90AlturaMenor150);    
  
  if ((altura > 1.90)) then
    begin
    Inc(qtdAlturaMaior190);
    
    if ((idade > 10) and (idade <=30)) then
      Inc(qtdIdadeEntre10e30AlturaMaior190);      
    end;
    
  end;


mediaIdade := somaIdade / QTD_PESSOAS; //observe que o cálculo da média só precisa ser feito apenas uma vez!

if (qtdAlturaMaior190 > 0) then
  percIdadeEntre10e30AlturaMaior190 := (qtdIdadeEntre10e30AlturaMaior190 / qtdAlturaMaior190) * 100;

writeln();
writeln();
writeln('Média das idades');
writeln(mediaIdade:1:1);
writeln();
writeln('Quantidade de pessoas com peso superior a 90 quilos e altura inferior a 1,50 metros');
writeln(qtdPesoMaior90AlturaMenor150);
writeln();
writeln('Percentagem de pessoas com idade entre 10 e 30 anos entre as pessoas que medem mais de 1,90 metros');
writeln(percIdadeEntre10e30AlturaMaior190:1:2, '%');

ReadKey();
end.

 

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