Ir ao conteúdo
  • Cadastre-se
Dhomus

Questao Pascal

Recommended Posts

ae pessoal, sou novo nessa linguagem i estou aprendendo a apenas algumas semanas.

me deparei com uma questao, q me deixou meio incabulado i gostaria da ajuda de vocês... segue a questao

Criar um programa que solicite ao usuário o nome, idade e sexo de 5 pessoas e efetue o seguinte processamento:

1. A média das idades das pessoas do sexo feminino;

2. A média das idades das pessoas do sexo masculino;

3. A pessoa mais velha;

4. A pessoa mais nova;

bemmmmm...

fiz um pedaco do programa mas nao to conseguindo o resto, talvez tenha usado uma tecnica errada...

vou mandar o que tenho feito ate agora

Program Pzim ;

var Sexo, nome1, nome2:char;

i, idade1,idade2:integer;

media1, media2:real;

Begin

clrscr;

for i:=1 to 5 do

begin

writeln('digite seu sexo M ou F');

readln(sexo);

case sexo of

'm': begin

writeln('digite sua idade');

readln(idade1);

writeln('digite seu nome');

readln(nome1);

end;

'f': begin

writeln('digite sua idade');

readln(idade2);

writeln('digite seu nome');

readln(nome2);

end;

end;

media1:=media1+idade1/5;

media2:=media2+idade2/5;

end;

writeln('Media de idade do sexo masculino', media1:10:0);

writeln('Media de idade do sexo feminino', media2:10:0);

End.

nao to conseguindo a 3 i 4 letra.

vlwz ae desde

Compartilhar este post


Link para o post
Compartilhar em outros sites

boa noite,

dei uma olhada no seu fonte e fiz algumas alterações nele.

Program Pzim ;

uses crt;

var

nome, nomeMaior, nomeMenor : string;

sexo: string[1];

idade,idadeMaior,idadeMenor,contador, contadorM, contadorF: integer;

somaM,somaF,mediaM,mediaF:real;

Begin

clrscr;

idade:= 0;

idadeMaior:= 0;

idadeMenor:= 9999;

contador:= 0;

contadorM:= 0;

contadorF:= 0;

mediaM:= 0;

mediaF:= 0;

while contador < 5 do begin

contador:= contador + 1;

writeln('digite o nome');

readln(nome);

writeln('digite o sexo.M para masculino e F para feminino');

readln(sexo);

writeln('digite a idade');

readln(idade);

if (sexo = 'f') or (sexo = 'F') then begin

contadorF:= contadorF + 1;

somaF:= somAF + idade;

end

else begin

if (sexo = 'm') or (sexo = 'M') then begin

contadorM:= contadorM + 1;

somaM:= somaM + idade;

end

else begin

writeln('sexo invalido');

contador:= contador - 1;

end

end;

if idade > idadeMaior then begin

idadeMaior:= idade;

nomeMaior:= nome;

end;

if idade < idadeMenor then begin

idadeMenor:= idade;

nomeMenor:= nome;

end;

clrscr;

end;

if contadorM <> 0 then begin

mediaM:= somaM/contadorM;

writeln('media da idade masculina = ', mediaM:2:2);

end

else begin

writeln('media da idade masculina = 0');

end;

if contadorF <> 0 then begin

mediaF:= somaF/contadorF;

writeln('media da idade feminina = ', mediaF:2:2);

end

else begin

writeln('media da idade feminina = 0');

end;

writeln('pessoa mais velha: ',nomeMaior);

writeln('pessoa mais nova : ',nomeMenor);

repeat until keypressed;

End.

ja testei e esta atendendo a sua questao

qualquer duvida sobre o codigo é só falar

abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Dhomus. eu fiz um programa que resolvia o que você mostrou, porém usei algumas estruturas que não sei se você conhece, para deixar o programa + caro e rápido(disso eu não tenho certeza :lol:).

segue o código abaixo:

Program novo;
uses crt;
type
form=record
nome:string[20];
idade:integer;
sexo:char;
end;
var
cadastro:array[1..5] of form;
i,j,f:integer;
mdmasculino,mdfeminino:real;
x:form;
Begin
clrscr;
for i:=1 to 5 do begin
Writeln('Cadastro',i);
write('Nome: ');
readln(cadastro[i].nome);
write('Idade: ');
readln(cadastro[i].idade);
write('Sexo (m/f): ');
readln(cadastro[i].sexo);
writeln(' ');
end;
mdmasculino:=0;
mdfeminino:=0;
j:=0;
f:=0;
for i:=1 to 5 do begin
if (cadastro[i].sexo='m')then begin
j:=j+1;
mdmasculino:=mdmasculino+cadastro[i].idade;
end
else begin
f:=f+1;
mdfeminino:=mdfeminino+cadastro[i].idade;
end;
end;
mdmasculino:=mdmasculino/j;
mdfeminino:=mdfeminino/f;
for i:=1 to 4 do begin
for j:=i+1 to 5 do begin
if (cadastro[i].idade<cadastro[j].idade) then begin
x:=cadastro[i];
cadastro[i]:=cadastro[j];
cadastro[j]:=x;
end;
end;
end;
writeln(' ');
writeln('A m‚dia da idade dos homens ‚: ',mdmasculino:10:0);
writeln('A m‚dia da idade das mulheres ‚: ',mdfeminino:10:0);
writeln('O mais velho(a) ‚: ',cadastro[1].nome);
writeln('O mais novo(a) ‚: ',cadastro[5].nome);
readkey;
End.

Esse código foi criado no turbo Pascal, caso não rode no pascal zim remova a linha 2 (uses crt;).

Caso você não entenda o que está escrito posta aqui que eu tento explicar.

sou novo também nessa linguagem e no ramo ;D

espero que tenha ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tycaio, realmente ainda nao conheco essa estrutura, estou a pouco tempo aprendendo mas logo darei uma olhadinha.;)

tiagohb, valeu pela estrutura, mas, tipo, tenho olhado as apostilas q tenho i ainda nao consegui entender como funciona i para q esses contadores, você poderia explicar???

vlwz aos dois pela ajuda:D

Compartilhar este post


Link para o post
Compartilhar em outros sites

tipo, quando se trata de estruturas de repetição(nesse caso while) é preciso um contador para controlar a quantidade de vezes que você gostaria que o proceso que está entre e estrutura de repetição(while...end;). Também foi usado nesses caso para contar quantas vezes foi lido um sexo masculino, e quantas vezes o sexo feminino(no caso contadorM e contadorF)para que ele posso fazer a média da idade dos 2 sexos, pois caso não exista contador e a idade total seja dividida por 5 sempre não vai dar a média certa, pois se você digitar 2 mulheres de 40 anos e 3 homens de 40 a média aritimética dos homens e das mulheres não vão ser 40, porque o total da idade dos homens e das mulheres vai ser dividido por 5 entendeu???

no caso, respondendo genericamente sua pergunta, os contadores, em qualquer programa, serve para você controlar algo que envolva repetição.

espero ter conseguido explicar xD

Compartilhar este post


Link para o post
Compartilhar em outros sites

bemmmmmmm

nao 100%, mas deu pra saca alguma coisa...

valeu cara...

^^

vou dar uma estudada melhor em mais algumas apostilas

so mais uma coisa...

if idade > idadeMaior then begin

idadeMaior:= idade;

nomeMaior:= nome;

end;

if idade < idadeMenor then begin

idadeMenor:= idade;

nomeMenor:= nome;

porque utilizar esses indicadores ai

Editado por gandalfnho
Evite o flood. Use Editar ou Multi-citar

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom...ja que você ainda esta começando vou tentar explicar tudo bem detalhado:

não sei se você ja aprendeu o comando while, se não aprendeu aprende agr

Essa estrutura de repetição while repete enquanto a condição for verdadeira. Caso a condição seja falsa, então a repetição será interrompida. Comando pode ser simples (uma instrução) ou composto (duas ou mais intruções) e a condição é uma expressão lógica

no caso do seu programa estava escrito que você teria q perguntar para somente 5 pessoas então eu criei uma variavel (contador)para contar ate 5(que no caso é as 5 pessoas que você irira pergutar nome, sexo e idade) .

e no meio da repeticao foi colocado os seguintes testes: se o sexo fosse feminino(f) ele entra no primeiro if, adiciona 1 para o um contador(contadorF que é usado para saber quantas pessoas do sexo feminino foram ""cadastradas"" e depois fazer a media feminina) soma a idade da pessoa na variavel somaF.

o segundo if tem a mesmo estrutura do primeiro só que é para o sexo masculino. E se o sexo for invalido aparece a msg ""sexo invalido"" e subtrai 1 do contador para que quando o sexo for invalid não conte como um valido e atrapalhe no calculo das medias.

logo apos ele entra em outro IF para saber a pessoa mais velha comaprando a idade ""lida"" com a variavel maior. se a idade lida for maior que o valor da variavel maior ele entra na condição, iguala maior com a idade e guarda o nome da pessoa.a rotinapara saber a pessoa mais nova é a mesmo q a da mais velha só a condição que muda(idade < menor).

saindo da repetição ele faz os calculos da media. Se o contadorF ou contadorM for igual a zero daria pau na divisao, então quando o contador é = zero eu ja mostro a msg de q aquela media é = a zero e mostra a pessoa mais nova e a pessoa mais velha.

Bom...ai esta..aushusahas...qse uma biblia..Oo

qualquer duvida é só avisar!!

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

e isso ai...agora eu juro que eu vi um while no programa dele xD

essa parte é meio chatinha de aprender, mina turma teve muita dificuldade de aprender isso, porém assim que você aprende a lógica da estrutura você mata td ;D

nesse caso como ele explicou...contador conta quandas x você quer repitir determinada coisa, ou para contar alguma coisa.

É parecido com aquilo que agente aprende no primario, que antigamente os pastores usavam pedrinhas para contar ao rebanho...mesmo principio.

Compartilhar este post


Link para o post
Compartilhar em outros sites

putz tiago, qr ser meu professor nao ???

uahauhauhauahuah

se explicou bemmmmmmmmmmmmmmmmmmmm detalhado mesmo hein...

^^

vlwz, agora entendi, i vou partir para treinar...

vlwz mais uma vez aos dois...

Compartilhar este post


Link para o post
Compartilhar em outros sites

i lá venho eu novamente pedir um conselho de vocês...

voltei a estudar, i me deparei com um problema.....

Program Pzim ;

var contador, idade, idadeMaior, idadeMenor:integer;

nome:string;

Begin

contador:=0;

idadeMaior:=0;

idadeMenor:=9999;

clrscr;

contador:=contador+1;

while nome<>'fim' do

begin

write('digite o nome da pessoa');

read(nome);

writeln('digite a idade da pessoa');

readln(idade);

if idade>idadeMaior then

idadeMaior:=idade;

if idade<idadeMenor then

idadeMenor:=idade;

writeln('idade menor', idadeMenor);

writeln('idade maior', idadeMaior);

end;

readkey;

End.

ele quando le FIM, ainda continua pedindo a idade....

Compartilhar este post


Link para o post
Compartilhar em outros sites
ele quando le FIM, ainda continua pedindo a idade....

seguinte, no while você colocou fim e não FIM.

em programação são coisas diferentes. faça assim:

while nome<>'fim' or nome<>'FIM' do

PS: teu contador não está servindo para nada, está fora do laço de repetição (while)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tipo...assim, na programação, caracteres(letras nesse caso) tem valores diferentes...no casp o "f" maiúsculo é diferente de "f' minusculo...e assim vai..no seu caso, se você tiver digitenao qualquer coisinha diferente o laço vai continuar verdadeiro e assim continua repetendo...

nesse caso, o contador não é preciso...você só utliza ele caso queira delimitar quandidade de repetição ou algo parecido.

valeu ;D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia... Não conheço muito a linguagem, mas estou fazendo aula de pascal no meu curso. tem uma apostila completa na página de meu professor, o site é gelsonrei.googlepages.com, pode lhe ajudar, Não estou pegando muito bem esta parte de programação.

Espero que lhe ajude...

ae pessoal, sou novo nessa linguagem i estou aprendendo a apenas algumas semanas.

me deparei com uma questao, q me deixou meio incabulado i gostaria da ajuda de vocês... segue a questao

Criar um programa que solicite ao usuário o nome, idade e sexo de 5 pessoas e efetue o seguinte processamento:

1. A média das idades das pessoas do sexo feminino;

2. A média das idades das pessoas do sexo masculino;

3. A pessoa mais velha;

4. A pessoa mais nova;

bemmmmm...

fiz um pedaco do programa mas nao to conseguindo o resto, talvez tenha usado uma tecnica errada...

vou mandar o que tenho feito ate agora

Program Pzim ;

var Sexo, nome1, nome2:char;

i, idade1,idade2:integer;

media1, media2:real;

Begin

clrscr;

for i:=1 to 5 do

begin

writeln('digite seu sexo M ou F');

readln(sexo);

case sexo of

'm': begin

writeln('digite sua idade');

readln(idade1);

writeln('digite seu nome');

readln(nome1);

end;

'f': begin

writeln('digite sua idade');

readln(idade2);

writeln('digite seu nome');

readln(nome2);

end;

end;

media1:=media1+idade1/5;

media2:=media2+idade2/5;

end;

writeln('Media de idade do sexo masculino', media1:10:0);

writeln('Media de idade do sexo feminino', media2:10:0);

End.

nao to conseguindo a 3 i 4 letra.

vlwz ae desde

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

×