Ir ao conteúdo
  • Cadastre-se

Pascal/Delphi Algoritmo de uma empresa


Posts recomendados

Olá! Estou com um exercício em que devo criar um algoritmo para o seguinte problema :

Uma empresa decidiu fazer um levantamento em relação aos candidatos que se apresentarem para preenchimento de vagas no seu quadro de funcionários. Supondo que você seja o programador dessa empresa, faça um programa que:

-> Leia, para cada candidato, a idade, o sexo ( M e F ) e a experiência no serviço ( S ou N). Para encerrar a entrada de dados digite zero para a idade.

Calcule e mostre:

-> o número de candidatos do sexo feminino;

-> o número de candidatos do sexo masculino;

->O numero de homens que ja possui experencia no serviço;

-> O número de Homens que não possui experiencia no serviço;

->O número de mulheres que já possui experiencia no serviço;

->O numero de mulheres que não possui experiencia no serviço;

->O nome do candidato com maior tempo de experiencia no serviço;

->Soma de todas as idades;

->A media de todas as idades;

->A média de todas as idades do sexo feminino;

->A média de todas as idades do sexo masculino;

 

Consegui fazer esse começo, mais não consigo terminar, alguém poderia me ajudar, comecei o curso de programação faz pouco tempo...

var
i, idade, masculino, feminino, maior, menor, exp_masc, exp_fem, funcionarios, soma: integer;
media: real;
sexo, experiencia: char;
Begin
                 soma:= 0;
                 media:= 0;
                 exp_fem:= 0;
                 exp_masc:= 0;
                 feminino:= 0;
                 masculino:= 0;
                 readln(funcionarios);
                 
          For I:= 1 to funcionarios do
          
           Writeln ('Entre com a idade do funcionario');
           readln(idade);
           maior:= idade;
           menor:= idade;
           
           Writeln ('Agora com o sexo do funcionario <M ou F>');
           readln (sexo);
           if sexo = 'F' then
              feminino:= feminino + 1
           Else
              masculino:= masculino + 1
           
end.

 

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

você deve usar begin/end no laço para estabelecer quais linhas de código serão repetidas.

 


For I:= 1 to funcionarios do
Begin
          
           (...)
 End;

você também deve usar arrays para armazenar as idades, sexo e experiência, pois acho que é isso que o problema pede (armazenar os dados entrados). Seria interessante usar um STRUCT:

 

 

 

type
   Candidato = record
      sexo : char;
	  experiencia: char;
	  idade : integer;
   end;
 
var
   candidatos : array [1..100] of Candidato;

você leria os dados assim no laço:

Program programa;

type
   Candidato = record
      sexo : char;
	  experiencia: char;
	  idade : integer;
   end;
 
var
   candidatos : array [1..1000] of Candidato;
   i: integer;
   
begin
  writeln('Hello, world!');
  i: = 1;
  Repeat      
           Writeln ('Entre com a idade do funcionario');
           readln(idade);
		   candidatos[i].idade = idade;
		   i := i + 1;
           
  Until idade = 0;
end.

Tente alterar para ler o resto das variáveis.

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

  • Membro VIP

Vou tentar complementar ao mesmo tempo expondo alguns dicas gerais...

 

 

@Charles Diogo da Silva, acredito que inicialmente a modelagem do seu algoritmo basicamente deveria depender do que você já estudou (foi dado em aula). Geralmente os exercícios são propostos justamente para reforçar aquilo que está aprendendo. Logo, faz todo sentido biológico utilizar apenas algo que já foi "formalmente" apresentado. Não recomendo utilizar recursos além do que você já estudou!

 

Por que isso? cada tipo de estrutura que está aprendendo tem as suas características... por exemplo: o uso de vetores (array), em detrimento de variáveis simples, facilitaria, e muito, para quando é necessário armazenar esses dados de uma vez e só depois processar. Já utilizar registros (record), em detrimento de "variáveis separadas", deixará o seu código ainda mais simples, pois só precisará de um vetor, em vez de um vetor para cada dado (terá apenas um vetor de registro).

Mas então, essas "vantagens" ficarão mais evidentes a medida que você vai evoluindo nos estudos...ou seja, se você já estivesse manjando dos paranauê, já estaria usando esses recurso!!! concorda?

 

Resumindo:

Use os recursos mais simples, depois poderá ajustar o código para usar o mais avançados (no sentido que vem depois).

 

 

Mas vamos lá:

 

Temos 3 pontos importantes já foram levantados, como:

- quais tipos de laços de repetições deverá utilizar para cada contexto (for, while e repeat). Cada um funcionada de uma forma mais propícia para cada caso; Então, se não foi determinada uma quantidade de loops, e em vez disso impondo usar "uma condição de parada", o for, deixa de ser uma opção. Use while ou repeat.

- uso ou não de vetores (array). Se você já aprendeu, deve usar!. Senão, não use! mesmo que supostamente fique mais simples ou mais coerente (coletar todos os dados antes, para só depois efetuar os cálculos). Faça inicialmente lendo e tratando no mesmo loop.

- uso ou não se registro (record); Idem... se já estudou, porque não usar? senão, deixa queto (apesar de ser bacana e bem simples de usar... sobretudo usando em conjunto do vetores) obs.: esse tipo de estrutura também é conhecida como "struct" (de estrutura em inglês) em outras linguagens, como no C e C++, creio que por isso que @Flávio Pedroza usou esse termo. :).

 

Outros pontos, também importantes, seriam:

- sempre manter o código indentado. Considero essencial! Tem ir acostumando desde cedo.. verá como é útil.

- SEMPRE MANTER O CÓDIGO COMPILÁVEL, ou seja, sem erro de sintaxe. obs.: "erro lógica" é outra coisa!

- uso de nomenclaturas de variáveis de modo mais sugestivo... e ao mesmo tempo que simples.

etc

 

 

Vamos partir para exemplos em código...

 

Montando o esqueleto inicial:

Eu acho interessante deixar o enunciado no corpo do código, ex.:

program FCdH;
{/*
Uma empresa decidiu fazer um levantamento em relação aos candidatos que se apre-
sentarem para preenchimento de vagas no seu quadro de funcionários. Supondo que
você seja o programador dessa empresa, faça um programa que:

Leia, para cada candidato, a idade, o sexo (M e F) e a experiência no serviço
(S ou N). Para encerrar a entrada de dados digite zero para a idade.

Calcule e mostre:
  -o número de candidatos do sexo feminino;
  -o número de candidatos do sexo masculino;
  -o numero de homens que ja possui experencia no serviço;
  -o número de Homens que não possui experiencia no serviço;
  -o número de mulheres que já possui experiencia no serviço;
  -o numero de mulheres que não possui experiencia no serviço;
  -o nome do candidato com maior tempo de experiencia no serviço;
  -soma de todas as idades;
  -a media de todas as idades;
  -a média de todas as idades do sexo feminino;
  -a média de todas as idades do sexo masculino; 
*/}
begin

end.

Dessa forma ficando mais acessível... mas vai do gosto.

 

 

Identificando as variáveis iniciais:

Lendo o enunciado, temos inicialmente esse trecho da "entrada dos dados":

Leia, para cada candidato, a idade, o sexo (M e F) e a experiência no serviço
(S ou N). Para encerrar a entrada de dados digite zero para a idade.

Chegamos a 3 variáveis:

.../*
  -a média de todas as idades do sexo feminino;
  -a média de todas as idades do sexo masculino; 
*/}
var
  idade           :integer;
  sexo            :char;
  experiencia     :char;

begin

end.

Parece-me bem simples essa parte. Continuando...

 

Identificando possíveis "variáveis relacionadas ao resultados":

Posteriormente entra as possíveis variáveis para os dados que ele pede:

Calcule e mostre:
  -o número de candidatos do sexo feminino;
  -o número de candidatos do sexo masculino;
  -o numero de homens que já possui experiência no serviço;
  -o número de Homens que não possui experiência no serviço;
  -o número de mulheres que já possui experiência no serviço;
  -o numero de mulheres que não possui experiência no serviço;
  -o nome do candidato com maior tempo de experiência no serviço;
  -soma de todas as idades;
  -a media de todas as idades;
  -a média de todas as idades do sexo feminino;
  -a média de todas as idades do sexo masculino;

As variáveis até agora ficaram assim:

var
  //dados do candidato
  idade           :integer;
  sexo            :char;
  experiencia     :char;
  
  //variáveis auxiares para os dados solicitados
  qtdFem,                    //número de candidatos do sexo feminino;
  qtdMasc       :integer;    //número de candidatos do sexo masculino;
  qtdMascComExp,             //numero de homens que já possui experiência no serviço;
  qtdMascSemExp,             //número de homens que não possui experiência no serviço;
  qtdFemiComExp,             //número de mulheres que já possui experiência no serviço;
  qtdFemiSemExp :integer;    //numero de mulheres que não possui experiência no serviço;
  nomeMaiorExp  :string;     //nome do candidato com maior tempo de experiência no serviço;
  somaIdade     :integer;    //soma de todas as idades;
  mediaIdade    :real;       //media de todas as idades;
  mediaIdadeFemi:real;       //média de todas as idades do sexo feminino;
  mediaIdadeMasc:real;       //média de todas as idades do sexo masculino;

Perceba que apenas fui lendo o enunciado e definindo as possíveis variáveis que vou precisar... bem passo a passo mesmo. Só seguir o fluxo.

 

Mas pera aê!!! como é que eu vou saber o nome do candidato se tenho apenas a idade, sexo e experiência??? outra: como raios vou saber quem tem a maior quantidade de experiência se eu só pergunto se "tem experiência ou não tem experiência"???

 

Percebeu? seguindo a metodologia já veria que tem coisa estranha aí. Já teria que ter resolvido essa parada!

 

Então, por essa minha interpretação, o enunciado está incompleto ou falho... teria que "revisar com quem passou o exercício". Não podemos simplesmente fazer da forma que quisermos... 😩

 

Mas claro que claro que nem tudo deve ser tão rígido assim... enquanto não descobre o que deve ser feito, podemos supor que é para "adaptar" o enunciado... vamos simplesmente aceitar que deveria ler esses dados que está faltando. Ficaria algo assim:

var
  //dados do candidato
  idade           :integer;
  sexo            :char;
  experiencia     :char;  
  //dados do candidato extras, devido ao requisitos solicitados
  nome            :string;  
  tempoExp        :integer; //tempo de experiência
  
  //variáveis auxiares para os dados solicitados
  qtdFem,                    //número de candidatos do sexo feminino;
  qtdMasc       :integer;    //número de candidatos do sexo masculino;
  qtdMascComExp,             //numero de homens que já possui experiência no serviço;
  qtdMascSemExp,             //número de homens que não possui experiência no serviço;
  qtdFemiComExp,             //número de mulheres que já possui experiência no serviço;
  qtdFemiSemExp :integer;    //numero de mulheres que não possui experiência no serviço;
  nomeMaiorExp  :string;     //nome do candidato com maior tempo de experiência no serviço;
  somaIdade     :integer;    //soma de todas as idades;
  mediaIdade    :real;       //media de todas as idades;
  mediaIdadeFemi:real;       //média de todas as idades do sexo feminino;
  mediaIdadeMasc:real;       //média de todas as idades do sexo masculino;
  
begin

end.

Pronto. Temos uma boa base do que vamos precisar.. 😀

Oh! perceba que se botar para compilar, deve finalizar sem dar erros. Sempre vá compilando de tempos em tempos!... a cada parte que vai inserindo no código, bota para compilar para ver se tem algum erro de sintaxe. Se tiver, já analisa e corrige logo. Evite deixar para compilar quando tiver muita coisa implementado.. ficará bem mais difícil de corrigir. A medida que o código vai crescendo (e a cabeça esquentando), mais propício a cometer errinhos... melhor achar logo.
 

Começando a implementar a parte do corpo:

var
  //dados do candidato
  idade           :integer;
  sexo            :char;
  ehExp           :char;    //se é experiete ou não
  //dados do candidato extras, devido ao requisitos solicitados
  nome            :string;  
  experiencia     :integer; //tempo de experiência
  
  //variáveis para os dados solicitados
  qtdFem,                 //número de candidatos do sexo feminino;
  qtdMasc       :integer; //número de candidatos do sexo masculino;
  qtdMascComExp,          //numero de homens que já possui experiência no serviço;
  qtdMascSemExp,          //número de homens que não possui experiência no serviço;
  qtdFemiComExp,          //número de mulheres que já possui experiência no serviço;
  qtdFemiSemExp :integer; //numero de mulheres que não possui experiência no serviço;
  nomeMaiorExp  :string;  //nome do candidato com maior tempo de experiência no serviço;
  somaIdade     :integer; //soma de todas as idades;
  mediaIdade    :real;    //media de todas as idades;
  mediaIdadeFemi:real;    //média de todas as idades do sexo feminino;
  mediaIdadeMasc:real;    //média de todas as idades do sexo masculino;
  
  //variáveis auxiliares
  qntCand :integer;
begin
writeln('Dados do candidato:');
qntCand:=0; //inicializa a variável. obs.: no Pascal não precisa. Iria ficar
            //com 0 automaticamente. Mas é bom acostumar, pois nem sempre é assim...
repeat
  write  ('Nome: ');
  readln(nome);
  write  ('Idade: ');
  readln(idade);
  write  ('Sexo (M ou F): ');
  readln(sexo);
  write  ('Tem experiencia? (S ou N): ')
  readln(ehExp);
  if (ehExp='S') or (ehExp='s') then
    begin
    write  ('Tempo de experiencia: ');
    readln(experiencia);
    end;
until idade = 0;



ReadKey; //aguarda alguma tecla ser pressionada
end.

Perceba que já fiz alguns ajustes nas nomenclaturas das variáveis... :D

Essa questão desse if, a medida que fui testando, achei interessante só perguntar se ele tiver experiência... sei lá. Poderia pode exemplo NÃO usar essa questão de se tem experiência ou não, e apenas quando não tiver, colocaria 0. Sacou? mas veja que isso já é diferente do que ESPECIFICADO no enunciado (mas se posso botar o nome e tempo, que não foi pedido, por que não não posso mudar isso também, rs). Em fim...

 

Agora só ir implementando a computação dos dados e testando:

program FCdH;
uses
  CRT; //necessário em alguns compiladores para reconhecer o ReadKey, ClrScr etc
{/*
Uma empresa decidiu fazer um levantamento em relação aos candidatos que se apre-
sentarem para preenchimento de vagas no seu quadro de funcionários. Supondo que
você seja o programador dessa empresa, faça um programa que:

Leia, para cada candidato, a idade, o sexo (M e F) e a experiência no serviço
(S ou N). Para encerrar a entrada de dados digite zero para a idade.

Calcule e mostre:
  -o número de candidatos do sexo feminino;
  -o número de candidatos do sexo masculino;
  -o numero de homens que já possui experiência no serviço;
  -o número de homens que não possui experiência no serviço;
  -o número de mulheres que já possui experiência no serviço;
  -o numero de mulheres que não possui experiência no serviço;
  -o nome do candidato com maior tempo de experiência no serviço;
  -soma de todas as idades;
  -a media de todas as idades;
  -a média de todas as idades do sexo feminino;
  -a média de todas as idades do sexo masculino;
*/}
var
  //dados do candidato
  idade           :integer;
  sexo            :char;
  ehExp           :char;    //se é experiete ou não
  //dados do candidato extras, devido ao requisitos solicitados
  nome            :string;  
  experiencia     :integer; //tempo de experiência
  
  //variáveis para os dados solicitados
  qtdFemi,                //número de candidatos do sexo feminino;
  qtdMasc       :integer; //número de candidatos do sexo masculino;
  qtdMascComExp,          //numero de homens que já possui experiência no serviço;
  qtdMascSemExp,          //número de homens que não possui experiência no serviço;
  qtdFemiComExp,          //número de mulheres que já possui experiência no serviço;
  qtdFemiSemExp :integer; //numero de mulheres que não possui experiência no serviço;
  nomeMaiorExp  :string;  //nome do candidato com maior tempo de experiência no serviço;
  somaIdade     :integer; //soma de todas as idades;
  mediaIdade    :real;    //media de todas as idades;
  mediaIdadeFemi:real;    //média de todas as idades do sexo feminino;
  mediaIdadeMasc:real;    //média de todas as idades do sexo masculino;
  
  //variáveis auxiliares
  qntCand :integer;
begin
writeln('Dados do candidato:');
qntCand:=0; //inicializa a varipavel. obs.: no Pascal não precisa. Iria ficar
            //com 0 automaticamente. Mas é bom acostumar...
repeat
  //LER DADOS DO CANDIDATO
  writeln;
  write  ('NOME: '); readln(nome);
  write  ('IDADE: '); readln(idade);
  write  ('SEXO (M ou F): '); readln(sexo); sexo:=UpCase(sexo);
  write  ('TEM EXPERIENCIA? (S ou N): '); readln(ehExp); ehExp:=UpCase(ehExp);
  if (ehExp='S') then
    begin
    write  ('Tempo de experiencia (em meses): '); readln(experiencia);
    end;
  
  //ANALISA OS DADOS E FAZ OS "CÁLCULOS"
  if sexo='M' then //[1]
    qtdMasc:=qtdMasc+1 //número de candidatos do sexo masculino;
  else
    if sexo='F' then
      qtdFemi:=qtdFemi+1 //número de candidatos do sexo feminino;
until idade = 0;
writeln;
writeln('RELATORIO DOS CANDIDATOS');
writeln;
writeln('Numero de candidatos do sexo feminino : ',qtdFemi);
writeln('Numero de candidatos do sexo masculino: ',qtdMasc);

ReadKey; //aguarda alguma tecla ser pressionada
end.

Veja que só inseri um "item": a quantidade de de feminino e a quantidade de masculino. Foi necessário fazer vários pequenos testes até chegar nesse ponto. NÃO TENTE IMPLEMENTAR TUDO DE UMA VEZ... É melhor dividir em problemas menores e ir avançando...

 

 

Continuar implementando:

Agora insira outro item qualquer... por exemplo "A media de todas as idades"... como é bem simples. Pode já fazer também "a média de todas as idades do sexo feminino" e "a média de todas as idades do sexo masculino". Só essas 3 coisas tá bom. Faz testes. Vê se tudo dá os resultados corretamente.

 

Posta o código aqui para analisarmos.

 

Depois implementa outro. Por exemplo "o nome do candidato com maior tempo de experiência no serviço". Por ai vai...

 

Sugiro que implemente o código assim. Depois passamos para vetores (array) e/ou registros (record). Te ajudamos a "converter". Verás que é bem simples.

 

 

 

No aguardo.

  • Curtir 1
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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!