Ir ao conteúdo
  • Cadastre-se

Problemas em achar a maior idade de n idades


doors.paulo

Posts recomendados

Bom pessoal, estou tendo uma certa dificuldade com um trabalho em Pascal.

O trabalho é esse:

Foram pesquisadas N pessoas, de ambos os sexos, sendo coletados: Peso, Idade e Sexo. Faça um algoritmo que:

a) Calcule e apresente a média da idade dos homens;

B) calcule e apresente a média do peso das mulheres;

c) calcule e apresente a idade do homem mais velho;

d) calcule e apresente a idade da mulher mais nova;

Eu consegui fazer tudo funcionar direito, menos a letra C e D.

Código:

Program Trabalho ;

var

p,cont,x,y : integer;

sx,opcao, outro : char;

idade_m, peso_m,t_idade_m,v_idade_m, idade_f,

peso_f,n_idade_f,t_peso_f,m_idade_m,m_peso_f

,n_idade_m : real;

Begin

x:=0;

y:=0;

cont:=0;

Writeln ('Insira o número de pessoas: ');

readln (p);

repeat

begin

if (p<=0) then

begin

writeln ('O número de pessoas tem que ser maior que 0.');

writeln ('Insira o numero de pessoas: ');

end;

end;

until (p>0);

for cont:=1 to p do

begin

clrscr;

Repeat

Begin

Writeln ('Entre com o sexo da pessoa ',cont,': ');

Readln (sx);

End;

Until (sx = 'M') or (sx='m') or (sx='F') or (sx='f');

case sx of

'M' , 'm' :

begin

Writeln ('insira a idade da pessoa ',cont,'.');

read (idade_m);

while (idade_m<=0) do

begin

Writeln ('A idade não pode ser negativa.');

writeln ('Insira uma idade válida: ');

read (idade_m);

end;

if (y=0) then

begin

v_idade_m:=idade_m;

end;

if (v_idade_m>idade_m) then

begin

v_idade_m:=idade_m;

end;

y:=(y+1);

Writeln ('insira o peso da pessoa ',cont,':');

read (peso_m);

while (peso_m<0) do

begin

Writeln ('O peso não pode ser negativo!');

writeln ('Insira uma peso valido: ');

read (peso_m);

end;

end;

'F','f' :

begin

Writeln ('insira a idade da pessoa ',cont,'.');

read (idade_f);

while (idade_f<=0) do

begin

Writeln ('A idade não pode ser negativa.');

writeln ('Insira uma idade válida: ');

read (idade_f);

end;

if (x=0) then

begin

n_idade_f:=idade_f;

end;

if (n_idade_f<idade_f) then

begin

n_idade_f:=idade_f;

end;

Writeln ('insira o peso da pessoa ',cont,':');

read (peso_f);

while (peso_f<0) do

begin

Writeln ('O peso não pode ser negativo!');

writeln ('Insira uma peso valido: ');

read (peso_f);

end;

x:=(x+1);

end;

end;

t_idade_m:=(t_idade_m+idade_m) ;

if (n_idade_f<idade_f) then

begin

n_idade_f:=idade_f;

end;

t_peso_f:=(t_peso_f+peso_f);

end;

repeat

clrscr;

Writeln ('Escolha o resultado que deseja visualizar: ');

Writeln ('a) Média da idade dos homens: ');

Writeln ('B) Média do peso das mulheres: ');

Writeln ('c) Idade do homem mais velho: ');

Writeln ('d) Idade da mulher mais nova: ');

read (opcao);

case opcao of

'a','A' :

Begin

m_idade_m:=(t_idade_m/p);

Writeln ('Média da idade dos homens: ',m_idade_m:0:2,' anos');

end;

'b','B' :

Begin

m_peso_f:=(t_peso_f/p);

Writeln ('Média do peso das mulheres: ',m_peso_f:0:2,' Kg');

end;

'c','C' :

Begin

Writeln ('Idade do homem mais velho: ',v_idade_m:0:2,' anos');

end;

'd','D' :

Begin

Writeln ('Idade da mulher mais nova: ',n_idade_m:0:2,' anos');

end;

end;

Writeln ('Deseja visualizar outro resultado? s/n: ');

read (outro);

until (outro = 'n') or (outro='N');

End.

ps: tenho que dar uma polida no código ainda..

Link para o comentário
Compartilhar em outros sites

Crie duas variáveis: MulherMaisNova e HomemMaisVelho.

Acrescente a seguinte linha após a leitura e a confirmação da idade do homem:


if (cont=1) or (idade_m>HomemMaisVelho) then HomemMaisVelho:= idade_m;

Acrescente a seguinte linha após a leitura e a confirmação da idade da mulher:


if (cont=1) or (idade_m<NulherMaisNova) then HomemMaisVelho:= idade_m;

No fim, basta imprimi-las.

Ficaria melhor se utilizasse UPCASE para analisar a tecla pressionada e RECORD com ARRAY para armazenar os dados, além do uso de PROCEDURE/FUNCTION.

Link para o comentário
Compartilhar em outros sites

ou cara, valeu pelo código.

Desculpe a demora, feriado prolongado ai ja viu né XD

Então, mesmo com essas linhas a mais continua dando errado..

Acho que o problema é que o como eu vou entrar com N pessoas, o cont sendo = 1 só vai funcionar na 1° execução (m ou f), depois o cont vira 2 e ja não atribui um valor na segunda execução.

E eu não estou usando RECORD com ARRAY e PROCEDURE/FUNCTION porque o professor disse que temos que nos virar com as 4 estruturas que usei... --'

edit:

Consegui utlizando um cont auxiliar.

Ficou assim

if (cont2=1) or (idade_m>HomemMaisVelho) then

HomemMaisVelho:=idade_m;

cont2:=(cont2+1);

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
ou cara, valeu pelo código.

Desculpe a demora, feriado prolongado ai ja viu né XD

Então, mesmo com essas linhas a mais continua dando errado..

Acho que o problema é que o como eu vou entrar com N pessoas, o cont sendo = 1 só vai funcionar na 1° execução (m ou f), depois o cont vira 2 e ja não atribui um valor na segunda execução.

E eu não estou usando RECORD com ARRAY e PROCEDURE/FUNCTION porque o professor disse que temos que nos virar com as 4 estruturas que usei... --'

edit:

Consegui utlizando um cont auxiliar.

Ficou assim

Olá,

doors.paulo, a proposta de viniciusbmatos está correta também, basta só ajustar alguns detalhes...

- Um contador para cada sexo

Em vez de 'Cont", o contador que deve ser referenciado é o "Y" ou "X" (respectivamente para Homens e Mulheres), ou seja, esse contador no if se refere a quantidades de pessoas do determinado sexo. (o 1º homem será de cara o mais velho, assim como a 1ª mulher será a mais nova :rolleyes:)

- Os ifs estão se referindo ao mesmo sexo

Basta ajustar..

if (y=1) or (idade_m>HomemMaisVelho) then
HomemMaisVelho:= idade_m;

e

if (x=1) or (idade_f<MulherMaisNova) then 
MulherMaisNova:= idade_f;

***

Outros pontos devem ser observados...

Vamos lá:

1) No fórum, os códigos devem ficar dentro das tags CODE

No caso, se você quiser citar um código, no caso as tagas CODE devem ficar dentro da tags QUOTE, e não o oposto! :lol:

2) Repeat/Until não necessitam de Begin/End

Não precisa nem explicar, é só removê-los

3) Evite usar Read, use somente ReadLN

Mais informações aqui: http://forum.clubedohardware.com.br/qual-diferenca-entre/777524?t=777524

4) O cálculo das médias estão erradas

O enunciado diz:

Calcule e apresente a média da idade dos homens;

calcule e apresente a média do peso das mulheres;

O cálculo da média é sempre relativo ao que se está se calculando, certo :wacko:

Veja:

A média "é obtida dividindo-se a soma das observações pelo número dela"

Média = Soma do valores / Quantidade de ocorrências.

logo:

"média das idades dos homens" = "soma das idades dos homens" / "total de homens". ^_^

Percebeu a diferença?

O mesmo vale para o caso das mulheres...

5) Você pode usar o UpCase() simplificar

O UpCase() (da unit CRT) tem a finalidade de retornar a letra maiúscula correspondente a passada pelo parâmetro dela.

exemplo:

opcao:='a';
opcao:=UpCase(opcao); //opcao passa ser 'A'

Assim só precisará comparar com a caractere maiúsculo!! :)

***

Veja ai as novas observações, e por favor poste aqui o código modificado para analisarmos também!!! ^_^

Seu código sem modificações identado (na meu padrão)


uses
CRT;
var
p,cont,x,y : integer;
sx,opcao, outro : char;
idade_m, peso_m,t_idade_m,v_idade_m, idade_f,
peso_f,n_idade_f,t_peso_f,m_idade_m,m_peso_f,n_idade_m : real;

Begin
x:=0;
y:=0;
cont:=0;
Writeln ('Insira o número de pessoas: ');
readln (p);
repeat
begin
if (p<=0) then
begin
writeln ('O número de pessoas tem que ser maior que 0.');
writeln ('Insira o numero de pessoas: ');
end;
end;
until (p>0);
for cont:=1 to p do
begin
clrscr;
Repeat
begin
Writeln ('Entre com o sexo da pessoa ',cont,': ');
Readln (sx);
end;
Until (sx = 'M') or (sx='m') or (sx='F') or (sx='f');
case sx of
'M' , 'm' :begin
Writeln ('insira a idade da pessoa ',cont,'.');
read (idade_m);
while (idade_m<=0) do
begin
Writeln ('A idade não pode ser negativa.');
Writeln ('Insira uma idade válida: ');
read (idade_m);
end;

if (y=0) then
begin
v_idade_m:=idade_m;
end;

if (v_idade_m>idade_m) then
begin
v_idade_m:=idade_m;
end;
y:=(y+1);

Writeln ('insira o peso da pessoa ',cont,':');
read (peso_m);
while (peso_m<0) do
begin
Writeln ('O peso não pode ser negativo!');
writeln ('Insira uma peso valido: ');
read (peso_m);
end;
end;
'F','f' :begin
Writeln ('insira a idade da pessoa ',cont,'.');
read (idade_f);
while (idade_f<=0) do
begin
writeln ('A idade não pode ser negativa.');
writeln ('Insira uma idade válida: ');
read (idade_f);
end;
if (x=0) then
begin
n_idade_f:=idade_f;
end;
if (n_idade_f<idade_f) then
begin
n_idade_f:=idade_f;
end;
Writeln ('insira o peso da pessoa ',cont,':');
read (peso_f);
while (peso_f<0) do
begin
Writeln ('O peso não pode ser negativo!');
writeln ('Insira uma peso valido: ');
read (peso_f);
end;
x:=(x+1);
end; {case}
end;
t_idade_m:=(t_idade_m+idade_m) ;
if (n_idade_f<idade_f) then
begin
n_idade_f:=idade_f;
end;
t_peso_f:=(t_peso_f+peso_f);
end;

repeat
clrscr;
Writeln ('Escolha o resultado que deseja visualizar: ');
Writeln ('a) Média da idade dos homens: ');
Writeln ('B) Média do peso das mulheres: ');
Writeln ('c) Idade do homem mais velho: ');
Writeln ('d) Idade da mulher mais nova: ');
read (opcao);
case opcao of
'a','A' :Begin
m_idade_m:=(t_idade_m/p);
Writeln ('Média da idade dos homens: ',m_idade_m:0:2,' anos');
end;

'b','B' :Begin
m_peso_f:=(t_peso_f/p);
Writeln ('Média do peso das mulheres: ',m_peso_f:0:2,' Kg');
end;

'c','C' :Begin
Writeln ('Idade do homem mais velho: ',v_idade_m:0:2,' anos');
end;

'd','D' :Begin
Writeln ('Idade da mulher mais nova: ',n_idade_m:0:2,' anos');
end;

end; {case}
Writeln ('Deseja visualizar outro resultado? s/n: ');
read (outro);
until (outro = 'n') or (outro='N');
End.
Program Trabalho ;

No aguardo..

Link para o comentário
Compartilhar em outros sites

Olá,

- Um contador para cada sexo

Em vez de 'Cont", o contador que deve ser referenciado é o "Y" ou "X" (respectivamente para Homens e Mulheres), ou seja, esse contador no if se refere a quantidades de pessoas do determinado sexo. (o 1º homem será de cara o mais velho, assim como a 1ª mulher será a mais nova :rolleyes:)

Então, eu utilizei cont1 e cont2 para a contagem dos sexos.

\o

- Os ifs estão se referindo ao mesmo sexo

Basta ajustar..

if (y=1) or (idade_m>HomemMaisVelho) then
HomemMaisVelho:= idade_m;

e

if (x=1) or (idade_f<MulherMaisNova) then 
MulherMaisNova:= idade_f;

É, eu tinha visto e ja tinha ajustado, por isso postei q tinha dado certo XD

Outros pontos devem ser observados...

Vamos lá:

1) No fórum, os códigos devem ficar dentro das tags CODE

No caso, se você quiser citar um código, no caso as tagas CODE devem ficar dentro da tags QUOTE, e não o oposto! :lol:

2) Repeat/Until não necessitam de Begin/End

Não precisa nem explicar, é só removê-los

3) Evite usar Read, use somente ReadLN

Mais informações aqui: http://forum.clubedohardware.com.br/qual-diferenca-entre/777524?t=777524

Opa, valeu!

4) O cálculo das médias estão erradas

O enunciado diz:

O cálculo da média é sempre relativo ao que se está se calculando, certo :wacko:

Veja:

A média "é obtida dividindo-se a soma das observações pelo número dela"

Média = Soma do valores / Quantidade de ocorrências.

logo:

"média das idades dos homens" = "soma das idades dos homens" / "total de homens". ^_^

Percebeu a diferença?

O mesmo vale para o caso das mulheres...

Então, na hora que executei ele eu percebi o erro e arrumei, coloquei para ser dividido pelo cont1 ou cont2 de acordo com o sexo.

5) Você pode usar o UpCase() simplificar

O UpCase() (da unit CRT) tem a finalidade de retornar a letra maiúscula correspondente a passada pelo parâmetro dela.

exemplo:

Assim só precisará comparar com a caractere maiúsculo!! :)

Então, só que o prof. falou que temos que usar somente essas quatro instruçoes (case, if, repeat e for) pra ter que dar os pulos mesmo..

***

Veja ai as novas observações, e por favor poste aqui o código modificado para analisarmos também!!! ^_^

Ai vai ele!



Program Trabalho ;
var
p,cont,cont1, cont2 : integer;
sx,opcao, outro : char;
idade_m, peso_m,t_idade_m,v_idade_m, idade_f,
peso_f,n_idade_f,t_peso_f,m_idade_m,m_peso_f
,n_idade_m, HomemMaisVelho, mulhermaisnova : real;

Begin
cont1:=1;
cont2:=1;
cont:=0;

Writeln ('Insira o número de pessoas: ');
readln (p);
repeat

if (p<=0) then
begin
writeln ('O número de pessoas tem que ser maior que 0.');
writeln ('Insira o numero de pessoas: ');
Readln (p);
end;

until (p>0);

for cont:=1 to p do
begin
clrscr;
Repeat

Writeln ('Entre com o sexo da pessoa ',cont,': ');
Readln (sx);

Until (sx = 'M') or (sx='m') or (sx='F') or (sx='f');

case sx of
'M' , 'm' :
begin

Writeln ('insira a idade da pessoa ',cont,'.');
readln (idade_m);
while (idade_m<=0) do
begin
Writeln ('A idade não pode ser negativa.');
writeln ('Insira uma idade válida: ');
readln (idade_m);
end;

if (cont2=1) or (idade_m>HomemMaisVelho) then
HomemMaisVelho:=idade_m;

cont1:=(cont1+1);

Writeln ('insira o peso da pessoa ',cont,':');
readln (peso_m);
while (peso_m<0) do
begin
Writeln ('O peso não pode ser negativo!');
writeln ('Insira uma peso valido: ');
readln (peso_m);
end;

end;

'F','f' :
begin

Writeln ('insira a idade da pessoa ',cont,'.');
readln (idade_f);
while (idade_f<=0) do
begin
Writeln ('A idade não pode ser negativa.');
writeln ('Insira uma idade válida: ');
readln (idade_f);
end;

if (cont2=1) or (idade_f<MulherMaisNova) then
MulherMaisNova:= idade_f;

cont2:=(cont2+1);

Writeln ('insira o peso da pessoa ',cont,':');
readln (peso_f);
while (peso_f<0) do
begin
Writeln ('O peso não pode ser negativo!');
writeln ('Insira uma peso valido: ');
readln (peso_f);
end;





end;

end;

t_idade_m:=(t_idade_m+idade_m) ;



t_peso_f:=(t_peso_f+peso_f);

end;

repeat
clrscr;
Writeln ('Escolha o resultado que deseja visualizar: ');
Writeln ('a) Média da idade dos homens: ');
Writeln ('B) Média do peso das mulheres: ');
Writeln ('c) Idade do homem mais velho: ');
Writeln ('d) Idade da mulher mais nova: ');

readln (opcao);

case opcao of

'a','A' :
Begin
m_idade_m:=(t_idade_m/cont1);
Writeln ('Média da idade dos homens: ',m_idade_m:0:2,' anos');
end;

'b','B' :
Begin
m_peso_f:=(t_peso_f/cont2);
Writeln ('Média do peso das mulheres: ',m_peso_f:0:2,' Kg');
end;

'c','C' :
Begin
Writeln ('Idade do homem mais velho: ',homemmaisvelho:0:2,' anos');
end;

'd','D' :
Begin
Writeln ('Idade da mulher mais nova: ',mulhermaisnova:0:2,' anos');
end;

end;
Writeln ('Deseja visualizar outro resultado? s/n: ');
readln (outro);
until (outro = 'n') or (outro='N');
Writeln ('Fim do algoritimo.');



End.

Ps: nao coloquei uses CRT pois utilizo o pascalZIM! e nele não precisa.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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!