Ir ao conteúdo
  • Cadastre-se

Exercicio PASCAL


eduardokazuo

Posts recomendados

Bom, pelo meu ver, esta tudo certo, mas quando executo aqui, ele vai ate a parte de recolher os dados, depois ele fecha sozinho!

Ou seja, ele não mostra os resultados.

Mas o que é estranho, é que ele compila normalmente.

Logo abaixo o codigo:

program empresa_vagas;

var nome: Array[1..1000] of string;
Idade, num, cont, anosexp: integer;
sexo, expserv: Char;
cf, cm, me, fe, hne, fne, soma, somaf, somam, ane: integer;
mi, mif, mim: real;
cme: string;

begin
//==========================
cf:= 0;
cm:= 0;
me:= 0;
fe:= 0;
hne:= 0;
fne:= 0;
soma:= 0;
somaf:= 0;
somam:= 0;
ane:= 0;
//=========================

Write('Digite o numero de vagas que serao preenchidas: ');
Readln(num);



For cont:= 1 to num Do
Begin
Writeln('');
Write('Digite o nome do ',cont,' candidato: ');
Readln(nome[cont]);
Writeln('');
Write('Digite a idade do ',cont,' candidato: ');
Readln(idade);
Writeln('');
Write('Digite o sexo do ',cont,' candidato: F - Feminino / M - Masculino ');
Readln(sexo);
Writeln('');
Writeln('O candidato tem experiencia no servico? s/n');
Readln(expserv);

If(expserv = 's') or (expserv = 'S') Then
Begin

Writeln('');
Write('======Digite quantos anos de experiencia ele tem: ');
Readln(anosexp);
End;
Writeln('----------------/-/----------------');





//----------------------/-/--------------------------
if(cont = 1) Then
Begin
ane:= anosexp;
End;

//----------------------/-/--------------------------

If(sexo = 'f') or (sexo = 'F') Then
Begin
cf:= cf+1; //numero de pessoas do sexo feminino
End
Else if(sexo = 'm') or (sexo = 'M') Then
Begin
cm:= cm+1; //numero de pessoas do sexo masculino
End;

//----------------------/-/--------------------------

If((sexo = 'm') or (sexo = 'M')) And (expserv = 's') or (expserv = 'S') Then
Begin
me:= me+1;
End
Else If((sexo = 'm') or (sexo = 'M')) And (expserv = 'n') or (expserv = 'N') Then
Begin
hne:= hne+1;
End;

//----------------------/-/--------------------------

If((sexo = 'f') or (sexo = 'F')) And (expserv = 's') or (expserv = 'S') Then
Begin
fe:= fe+1;
End
Else If((sexo = 'f') or (sexo = 'F')) And (expserv = 'n') or (expserv = 'N') Then
Begin
fne:= fne+1;
End;

//----------------------/-/--------------------------

If(anosexp > ane) Then
Begin
cme:= nome[cont];
End;

//----------------------/-/--------------------------

if(sexo = 'f') or (sexo = 'F') Then
Begin
somaf:= somaf+idade;
End
Else If(sexo = 'm') or (sexo = 'M') Then
Begin
somam:= somam+idade;
End;

//----------------------/-/--------------------------

soma:= soma+idade;
End;



mi:= soma / num;
mif:= somaf / cf;
mim:= somam / cm;


Writeln('');
Writeln('Numero de candidatos do sexo masculino e: ',cm);
Writeln('');
Writeln('O numero de candidatos do sexo feminino e: ', cf);
Writeln('');
Writeln('O numero de homens que nao possui experiencia e: ',hne);
Writeln('');
Writeln('O numero de homens que possui experiencia e: ',me);
Writeln('');
Writeln('O numero de mulheres que nao possui experiencia e: ',fne);
Writeln('');
Writeln('O numero de mulheres que possui experiencia e: ',fe);
Writeln('');
Writeln('O nome do candidato que possui mais experiencia e: ',cme,'.');
Writeln('');
Writeln('A soma de todas as idades e: ',soma);
Writeln('');
Writeln('A media de todas as idades e: ',mi:2:2);
Writeln('');
Writeln('A media das idades do sexo feminino e: ',mif:2:2);
Writeln('');
Writeln('A media de todas as idades do sexo masculino: ',mim:2:2);
Readln;

end.

Bom, se puderem me ajudar.. ^_^

Obrigado.

Link para o comentário
Compartilhar em outros sites

Bom, eu achei onde esta o problema, mas não tenho ideia de como resolver.

esta em:


mif:= somaf / cf;
mim:= somam / cm;

Quando compilo ele mostra: Hint: use DIV instead to get an integer result.

Mesmo usando o DIV ele fecha o programa e não mostra o resultado.. =/

Muito estranho, pois ele não me avisa de nenhum erro na compilação. =X

Alguem poderia me ajudar?

Link para o comentário
Compartilhar em outros sites

Visitante: Sithiun
 

Ele está dando erro porque se você não colocar nenhum homem ou nenhuma mulher, ele vai tentar dividir por zero.

O código está correto, não troque o "/" pelo "DIV" pois se você trocar, a média não vai dar numero quebrado, ficando incorreta. (Ex.: A soma deu '6' e o numero de pessoas é '4', usando "DIV" vai dar '1', quando o correto seria '1.5'.)

Coloque apenas uma estrutura condicional, igual a da resposta acima (somente onde está "somaf" e "somam" respectivamente, coloque "cf" e "cm").

E fiz aqui e deu certo. Boa sorte.

Link para o comentário
Compartilhar em outros sites

Obrigado ao Samuk514 e ao Sithiun.

Vocês me ajudaram muito!

Pergunta solucionada!

Eu só não entendi muito bem o porque de fechar o programa.

Se não tivesse a condição ele dividiria por 0, então daria o mesmo numero.

Mas deve ser coisa do pascal.. então agora ja sei deste erro! ^_^

Para quem quiser saber como ficou o código esta ae:

program empresa_vagas;


var nome: Array[1..1000] of string;
Idade, num, cont, anosexp: integer;
sexo, expserv: Char;
cf, cm, me, fe, hne, fne, ane, soma, somaf, somam: integer;
mif, mim, mi: Real;
cme: string;

begin
//==========================
cf:= 0;
cm:= 0;
me:= 0;
fe:= 0;
hne:= 0;
fne:= 0;
soma:= 0;
somaf:= 0;
somam:= 0;
ane:= 0;
//=========================

Write('Digite o numero de vagas que serao preenchidas: ');
Readln(num);



For cont:= 1 to num Do
Begin
Writeln('');
Write('Digite o nome do ',cont,' candidato: ');
Readln(nome[cont]);
Writeln('');
Write('Digite a idade do ',cont,' candidato: ');
Readln(idade);
Writeln('');
Write('Digite o sexo do ',cont,' candidato: F - Feminino / M - Masculino ');
Readln(sexo);
Writeln('');
Writeln('O candidato tem experiencia no servico? s/n');
Readln(expserv);

If(expserv = 's') or (expserv = 'S') Then
Begin

Writeln('');
Write('======Digite quantos anos de experiencia ele tem: ');
Readln(anosexp);
End;
Writeln('----------------/-/----------------');




soma:= soma+idade;


//----------------------/-/--------------------------
if(cont = 1) Then
Begin
ane:= anosexp;
cme:= nome[cont];
End;

//----------------------/-/--------------------------

If(sexo = 'f') or (sexo = 'F') Then
Begin
cf:= cf+1; //numero de pessoas do sexo feminino
somaf:= somaf + idade;
End
Else if(sexo = 'm') or (sexo = 'M') Then
Begin
cm:= cm+1; //numero de pessoas do sexo masculino
somam:= somam + idade;
End;

//----------------------/-/--------------------------

If((sexo = 'm') or (sexo = 'M')) And (expserv = 's') or (expserv = 'S') Then
Begin
me:= me+1;
End
Else If((sexo = 'm') or (sexo = 'M')) And (expserv = 'n') or (expserv = 'N') Then
Begin
hne:= hne+1;
End;

//----------------------/-/--------------------------

If((sexo = 'f') or (sexo = 'F')) And (expserv = 's') or (expserv = 'S') Then
Begin
fe:= fe+1;
End
Else If((sexo = 'f') or (sexo = 'F')) And (expserv = 'n') or (expserv = 'N') Then
Begin
fne:= fne+1;
End;

//----------------------/-/--------------------------

If(anosexp > ane) Then
Begin
cme:= nome[cont];
End;

//----------------------/-/--------------------------
End;

mi:= soma / num;

if somaf > 0 then
Begin
mif:= somaf / cf;
End;
if somam > 0 then
Begin
mim:= somam / cm;
End;

Writeln('');
Writeln('Numero de candidatos do sexo masculino e: ',cm);
Writeln('');
Writeln('O numero de candidatos do sexo feminino e: ', cf);
Writeln('');
Writeln('O numero de homens que nao possui experiencia e: ',hne);
Writeln('');
Writeln('O numero de homens que possui experiencia e: ',me);
Writeln('');
Writeln('O numero de mulheres que nao possui experiencia e: ',fne);
Writeln('');
Writeln('O numero de mulheres que possui experiencia e: ',fe);
Writeln('');
Writeln('O nome do candidato que possui mais experiencia e: ',cme,'.');
Writeln('');
Writeln('A soma de todas as idades e: ',soma);
Writeln('');
Writeln('A media de todas as idades e: ',mi:2:2);
Writeln('');
Writeln('A media das idades do sexo feminino e: ',mif:2:2);
Writeln('');
Writeln('A media de todas as idades do sexo masculino: ',mim:2:2);
READLN;

end.

Porque do Begin..End; no comando de decisão?

Pois pra mim fica mais organizado o algoritmo, sendo assim, mais fácil de entender.

Obrigado a todos.!

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!