Ir ao conteúdo
  • Cadastre-se
Augusto G rocha

Exercicios de pascal 02

Recommended Posts

Oi de novo estou com uma dificuldade nesse exercício. nao consigo pensar (ou desconheço um codigo)

que possa fazer a função em vermelho no exercicio.

 

1.      Faça um programa que receba a idade, o peso, a altura, a cor dos olhos (A – azul, P – preto, V – verde e C - castanho) e a cor dos cabelos (P – preto, C – castanho, L – louro e R - ruivo) de vinte pessoas, e que calcule e mostre:

·         A quantidade de pessoas com idade superior a 50 anos e peso inferior a 60 quilos;

·         A média das idades das pessoas com altura inferior a 1,50 metros;

·         A percentagem de pessoas com olhos azuis entre todas as pessoas analisadas;

·         A quantidade de pessoas ruivas e que não possuem olhos azuis.

 

Aqui esta o código que escrevi até  agora(ainda não coloquei as 20 pessoas, vou por quando estiver tudo rodando certinho)

 

Program Lista3Exercicio8;


VAR
Idade1,Idade2,Idade3,Idade4,Idade5,Idade6,Idade7,Idade8,Idade9,Idade10,Idade11,Idade12,Idade13,Idade14,Idade15:Real;

Peso1,Peso2,Peso3,Peso4,Peso5,Peso6,Peso7,Peso8,Peso9,Peso10,Peso11,Peso12,Peso13,Peso14,Peso15:Real;
Olhos1,Olhos2,Olhos3,Olhos4,Olhos5,Olhos6,Olhos7,Olhos8,Olhos9,Olhos10,Olhos11:char;
Cabelo1,Cabelo2,Cabelo3,Cabelo4,Cabelo5,Cabelo6,Cabelo7,Cabelo8,Cabelo9,Cabelo10:char;
Altura1,Altura2,Altura3,Altura4,Altura5,Altura6,Altura7,Altura8,Altura9,Altura10,Altura11,Altura12,Altura13,Altura14,Altura15:Real;
Per_azul,Olhos_total,idade_cont,Idade,P5060,Mediapeso,PTP,PPM40,Media,velho,Peso,Altura,DMA,Media1020:Real;
Ao,Po,Co,vou,Pc,Cc,Lc,Rc:Real;

Begin
  Writeln('--------------------------------Lista 3 Exercicio 8------------------------------');
  
  
  Writeln('');
  Writeln('Escreva a Idade da Primeira pessoa: ');
  Readln(Idade1);
  
  Writeln('Escreva a Peso da Primeira pessoa: ');
  Readln(Peso1);
  
  Writeln('Escreva a Altura da Primeira pessoa: ');
  Readln(Altura1);
  
  Writeln('Escreva a cor dos cabelos da Primeira pessoa: ');
  Writeln('A – azul, P – preto, V – verde e C - castanho');
  Readln(Olhos1);
  
  Writeln('Escreva a cor dos cabelos da Segunda pessoa: ');
  Writeln('P – preto, C – castanho, L – louro e R - ruivo');
  Readln(Cabelo1);
  
  Writeln('');
  Writeln('Escreva a Idade da Segunda pessoa: ');
  Readln(Idade2);
  
  Writeln('Escreva a Peso da Segunda pessoa: ');
  Readln(Peso2);
  
  Writeln('Escreva a Altura da Segunda pessoa: ');
  Readln(Altura2);
  
  Writeln('Escreva a cor dos olhos da Segunda pessoa: ');
  Writeln('A – azul, P – preto, V – verde e C - castanho');
  Readln(Olhos2);
  
  Writeln('Escreva a cor dos cabelos da Segunda pessoa: ');
  Writeln('P – preto, C – castanho, L – louro e R - ruivo');
  Readln(Cabelo2);
  
  // 	A quantidade de pessoas com idade superior a 50 anos e peso inferior a 60 quilos;
  
  If (Idade1>50) and (Peso1<60) then
  begin
    P5060:= p5060 +1;
  end;
  
  If (Idade2>50) and (Peso2<60) then
  begin
    P5060:= p5060 +1;
  end;
  
  
  //  •	A média das idades das pessoas com altura inferior a 1,50 metros;
  
  
  If (Altura1<1.50)  then
  begin
    idade_cont:= Idade_cont +1;
    idade:= idade1 + Idade;
  end;
  
  If (Altura2<1.50)  then
  begin
    idade_cont:= Idade_cont +1;
    idade:= idade2 + Idade;
  end;
  
  //   •	A quantidade de pessoas ruivas e que não possuem olhos azuis.
  
  case (Olhos1) of
    'A': Ao:= Ao+1 ;   
    'P': Po:= Po+1 ;
    'V': vou:= vou+1 ;
    'C': Co:= Co+1 ;
    'a': Ao:= Ao+1 ;
    'p': Po:= Po+1 ;
    'v': vou:= vou+1 ;
    'c': Co:= Co+1 ;
    else Writeln('Opção Invalida') ;
  end;
  
  case (Cabelo1) of
    'P': Pc:= Pc+1 ;
    'C': Cc:= Cc+1 ;
    'L': Lc:= Lc+1 ;
    'R': Rc:= Rc+1 ;
    'p': Pc:= Pc+1 ;
    'c': Cc:= Cc+1 ;
    'l': Lc:= Lc+1 ;
    'r': Rc:= Rc+1 ;
    else Writeln('Opção Invalida') ;
  end;
  
  Olhos_total:= Ao + Po + vou + Co;
  Per_azul:= Ao*100/Olhos_total;
  
   
//   •	A quantidade de pessoas ruivas e que não possuem olhos azuis.

if (Cabelo1=Rc) and (Olhos1<>Ao)then begin
RCAO:= RCAO +1;
end;

    Writeln('A quantidade de pessoas com idade superior a 50 anos e peso inferior a 60 quilos é de ',P5060);
    Writeln('');
    If idade_cont=0 then begin
    Writeln('Não existem pessoas com essa altura');
    end else begin
      Writeln ('A média das idades das pessoas com altura inferior a 1,50' ,idade/idade_cont); 
    end;
    If RCAO=0 then begin
    Writeln('Não existem pessoas com essas caracteristicas');
    end else begin
      Writeln('A quantidade de pessoas ruivas e que não possuem olhos azuis é de ',RCAO); 
    end;
    
  Writeln('');
    
  End.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @Augusto G rocha,

 

Como tem várias pessoas para cadastrar, seria mais recomendado utilizar vetores (array), em vez de várias variáveis em sequência. Com os arrays você poderá usar laços de repetição para percorrer as posições.

 

Sugiro que corrija, ou refaça, o código utilizando eles. A partir daí verificando os outros pontos.

 

Obs.: Inicialmente você não precisa utilizar o cadastro de 20 pessoas. Poderia usar, por exemplo, apenas 3!.

 

 

No aguardo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tudo bem, essa parte eu arrumo depois porque para rodar 20 toda vez que for testar demora, ai faço com 2 inicialmente e depois coloco o array.

 

minha duvida como eu coloco o If para que ele aceite a parte em vermelho que eu não sei como criar uma função para isso. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

2 horas atrás, Augusto G rocha disse:

Tudo bem, essa parte eu arrumo depois porque para rodar 20 toda vez que for testar demora, ai faço com 2 inicialmente e depois coloco o array.

Ok, como queiras.

 

 

 

2 horas atrás, Augusto G rocha disse:

minha duvida como eu coloco o If para que ele aceite a parte em vermelho que eu não sei como criar uma função para isso. 


Algo como:

if (Cabelo1='R') and (not (Olhos1='A')) then
  begin

  end;

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

A noticia boa é  que o código rodou com o Writeln simples :)

A ruim é  que ele não esta rodando com o array :(

 

Program Lista3Exercicio8;


VAR
Idade: array [1..20] of integer;
Peso: array [1..20] of integer;
Altura: array [1..20] of integer;
Cabelo:array [1..20] of char;
Olhos: array [1..20] of char;
a,p,i:integer;
c,o:char;


Ao,Po,Co,vou,Pc,Cc,Lc,Rc:Real;

Begin
  Writeln('--------------------------------Lista 3 Exercicio 8------------------------------');
  
  
  for i:= 1 to 20 do
  begin
    Writeln('');
    Writeln('Escreva a Idade da pessoa: ');
    Readln(Idade[i]);
  end;
  
  for p:= 1 to 20 do
  begin
    Writeln('');
    Writeln('Escreva peso da pessoa: ');
    Readln(peso[p]);
  end;
  
  for a:= 1 to 20 do
  begin
    Writeln('');
    Writeln('Escreva a Altura da pessoa: ');
    Readln(Altura[a]);
    
    for c:=1 to 20 do
    begin
      Writeln('');
      Writeln('Escreva a cor dos cabelos da Segunda pessoa: ');
      Writeln('P – preto, C – castanho, L – louro e R - ruivo');
      Readln(Cabelo[c]);
    end;
    
    for o:= 1 to 20 do
    begin
      Writeln('');
      Writeln('Escreva a cor dos olhos da Segunda pessoa: ');
      Writeln('A – azul, P – preto, V – verde e C - castanho');
      Readln(Olhos2);
    end;
    
    
    // 	A quantidade de pessoas com idade superior a 50 anos e peso inferior a 60 quilos;
    
    
    for i:= 1 to 20 do
    
    begin
      Peso[p]:=Idade[i];
      
      If (Idade[i]>50) and (Peso[p]<60) then
      begin
        P5060:= p5060 +1;
      end;
    end;
    
    
    
    //  •	A média das idades das pessoas com altura inferior a 1,50 metros;
    
    for a:= 1 to 20 do
    begin
      If (Altura[a]<1.50)  then
      begin
        idade_cont:= Idade_cont +1;
        idade:= Idade[i] + Idade;
      end;
    end;
    
    
    
    
    //   •	A quantidade de pessoas ruivas e que não possuem olhos azuis.
    for o := 1 to 20 do
    begin
      case (Olhos[o]) of
        'A': Ao:= Ao+1 ;
        'P': Po:= Po+1 ;
        'V': vou:= vou+1 ;
        'C': Co:= Co+1 ;
        'a': Ao:= Ao+1 ;
        'p': Po:= Po+1 ;
        'v': vou:= vou+1 ;
        'c': Co:= Co+1 ;
        else Writeln('Opção Invalida') ;
      end;
    end;
    for c := 1 to 20 do
    begin
      case (Cabelos[c]) of
        'P': Pc:= Pc+1 ;
        'C': Cc:= Cc+1 ;
        'L': Lc:= Lc+1 ;
        'R': Rc:= Rc+1 ;
        'p': Pc:= Pc+1 ;
        'c': Cc:= Cc+1 ;
        'l': Lc:= Lc+1 ;
        'r': Rc:= Rc+1 ;
        else Writeln('Opção Invalida') ;
      end;
      
      Olhos_total:= Ao + Po + vou + Co;
      Per_azul:= Ao*100/Olhos_total;
      
      
      //   •	A quantidade de pessoas ruivas e que não possuem olhos azuis.
      
      if (Cabelo[c]='R') and (not (Olhos[o]='A')) then begin
        RCAO:= RCAO +1;
      end;
      
      Writeln('A quantidade de pessoas com idade superior a 50 anos e peso inferior a 60 quilos é de ',P5060);
      Writeln('');
      If idade_cont=0 then begin
        Writeln('Não existem pessoas com essa altura');
      end else begin
        Writeln ('A média das idades das pessoas com altura inferior a 1,50' ,idade/idade_cont);
      end;
      If RCAO=0 then begin
        Writeln('Não existem pessoas com essas caracteristicas');
      end else begin
        Writeln('A quantidade de pessoas ruivas e que não possuem olhos azuis é de ',RCAO);
      end;
      
      Writeln('');
    END;
  END;
  
  
  
  
  
End.

Ainda estou tendo dificuldade em entender porque o array não mostra os char, não tenho problema com numero mas o exercício pede um case com letras.  

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

1) Identação base

Primeiramente dei uma reidentada, para facilitar a leitura do código:

 

Spoiler

Program Lista3Exercicio8;
var
  Idade :array[1..20] of integer;
  Peso  :array[1..20] of integer;
  Altura:array[1..20] of integer;
  Cabelo:array[1..20] of char;
  Olhos :array[1..20] of char;
  a,p,i :integer;
  c,o   :char;
  Ao,Po,Co,vou,Pc,Cc,Lc,Rc:Real;
BEGIN
Writeln('--------------------------------Lista 3 Exercicio 8------------------------------');
for i:= 1 to 20 do
  begin
  Writeln('');
  Writeln('Escreva a Idade da pessoa: ');
  Readln(Idade[i]);
  end;
for p:= 1 to 20 do
  begin
  Writeln('');
  Writeln('Escreva peso da pessoa: ');
  Readln(peso[p]);
  end;
for a:= 1 to 20 do
  begin
  Writeln('');
  Writeln('Escreva a Altura da pessoa: ');
  Readln(Altura[a]);
  for c:=1 to 20 do
    begin
    Writeln('');
    Writeln('Escreva a cor dos cabelos da Segunda pessoa: ');
    Writeln('P – preto, C – castanho, L – louro e R - ruivo');
    Readln(Cabelo[c]);
    end;
  for o:= 1 to 20 do
    begin
    Writeln('');
    Writeln('Escreva a cor dos olhos da Segunda pessoa: ');
    Writeln('A – azul, P – preto, V – verde e C - castanho');
    Readln(Olhos2);
    end;
  // 	A quantidade de pessoas com idade superior a 50 anos e peso inferior a 60 quilos;
  for i:= 1 to 20 do
    begin
    Peso[p]:=Idade[i];
    If (Idade[i]>50) and (Peso[p]<60) then
      begin
      P5060:= p5060 +1;
      end;
    end;
  //  •	A média das idades das pessoas com altura inferior a 1,50 metros;
  for a:= 1 to 20 do
    begin
    If (Altura[a]<1.50) then
      begin
      idade_cont:= Idade_cont +1;
      idade:= Idade[i] + Idade;
      end;
    end;
  //   •	A quantidade de pessoas ruivas e que não possuem olhos azuis.
  for o := 1 to 20 do
    begin
    case (Olhos[o]) of
      'A': Ao:= Ao+1 ;
      'P': Po:= Po+1 ;
      'V': vou:= vou+1 ;
      'C': Co:= Co+1 ;
      'a': Ao:= Ao+1 ;
      'p': Po:= Po+1 ;
      'v': vou:= vou+1 ;
      'c': Co:= Co+1 ;
      else Writeln('Opção Invalida') ;
      end; //fim case
    end;
  for c := 1 to 20 do
    begin
    case (Cabelos[c]) of
      'P': Pc:= Pc+1 ;
      'C': Cc:= Cc+1 ;
      'L': Lc:= Lc+1 ;
      'R': Rc:= Rc+1 ;
      'p': Pc:= Pc+1 ;
      'c': Cc:= Cc+1 ;
      'l': Lc:= Lc+1 ;
      'r': Rc:= Rc+1 ;
      else Writeln('Opção Invalida') ;
      end; //fim case
    Olhos_total:= Ao + Po + vou + Co;
    Per_azul:= Ao*100/Olhos_total;
    //   •	A quantidade de pessoas ruivas e que não possuem olhos azuis.
    if (Cabelo[c]='R') and (not (Olhos[o]='A')) then
      begin
      RCAO:= RCAO +1;
      end;
    Writeln('A quantidade de pessoas com idade superior a 50 anos e peso inferior a 60 quilos é de ',P5060);
    Writeln('');
    If idade_cont=0 then
      begin
      Writeln('Não existem pessoas com essa altura');
      end
    else
      begin
      Writeln ('A média das idades das pessoas com altura inferior a 1,50' ,idade/idade_cont);
      end;
    If RCAO=0 then
      begin
      Writeln('Não existem pessoas com essas caracteristicas');
      end
    else
      begin
      Writeln('A quantidade de pessoas ruivas e que não possuem olhos azuis é de ',RCAO);
      end;
    Writeln('');
    end;
  end;
END.

 

 

 

2) Controlador de índice de vetores

Veja, o índice do vetor (array) não tem nenhuma relação com o conteúdo da posição deste vetor. A variável do índice serve para "posicionar", ou seja, acessar determinada "variável" do array (ex.: Olho[3] equivale a posição 3 de vetor Olho). Essa posição sempre será de acordo com o que foi definido lá na var... se você definiu de 1..20, vai precisar passar um valor de 1 a 20! Logo, a variável será numérica!!! (ex.: No primeiro for, usou i, esse i vai de 1 a 20, logo percorrendo o vetor de 1 a 20).

 

Todos os array estão com posições de 1..20, logo todos as variáveis de controle devem ser numéricas.

 

 

3) Ordem de leitura

No seu código você está lendo "todas as idades", depois "todos os pesos" etc... Creio que seja mais dinâmico ler os dados de pessoa por pessoa, ou seja, para cada loop (volta do laço de repetição) ler a idade, peso, altura etc. No caso, seria um for só! (daí vai precisar só do i para ler os dados)

 

4) Analise de dados
Na minha opinião, poderia fazer assim:

 

Primeiro a parte da leitura, como solicitado:

Em 28/09/2016 às 17:55, Augusto G rocha disse:

1.      Faça um programa que receba a idade, o peso, a altura, a cor dos olhos (A – azul, P – preto, V – verde e C - castanho) e a cor dos cabelos (P – preto, C – castanho, L – louro e R - ruivo) de vinte pessoas,

 

Depois a parte da análise:

 

Em 28/09/2016 às 17:55, Augusto G rocha disse:

[...] e que calcule e mostre:

·         A quantidade de pessoas com idade superior a 50 anos e peso inferior a 60 quilos;

·         A média das idades das pessoas com altura inferior a 1,50 metros;

·         A percentagem de pessoas com olhos azuis entre todas as pessoas analisadas;

·         A quantidade de pessoas ruivas e que não possuem olhos azuis.

Ou seja, teria outro laço de repetição (for) para analisar critério a critério...
Veja, da mesma forma, dá para fazer a verificação em um laço só.

 

Obs.: dá para fazer as verificações a medida que está lendo, apenas acho mais coerente fazer depois de ler tudo, pois, caso faça ao mesmo tempo que está lendo, o programa nem precisaria de array (ou uma variável para cada pessoa, como você tinha proposto antes), seria só necessário uma variável para cada tipo (reutilizando elas).

 

***

 

Por enquanto é isso

 

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 publicações 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

×