Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (*
- O estado de Pernambuco resolveu abrir um processo seletivo para PM, este processo é composto das seguintes etapas:
- A = Prova teórica - Média acima de 8
- B = Corrida - Candidatos do sexo masculino, correr 100km em 30 minutos e do sexo feminino correr 50km em 2 minutos.
- C = Natação - Candidato do sexo masculino, nadar 10 km em 5 minutos e feminino nadar 10km em 10 minutos.
- D = Barra = masculino 1 barra em 60 minutos, feminino 1 barra em 120 minutos.
- Obs: O candidato só passa para a próxima etapa se for aprovado na etapa anterior.
- Fazer um programa que leia o nome de um candidato e informe se ele foi aprovado ou em que etapa ele foi reprovado.
- *)
- program pernambuco;
- uses crt;
- type TLimite = set of byte;
- TProvaTeorica = record
- aprovado : boolean;
- media : byte;
- end;
- TProvaPratica = record
- aprovado : boolean;
- nome : string;
- distancia : smallint;
- tempo : smallint;
- end;
- TCandidato = record
- nome : string;
- sexo : char;
- teoria : TProvaTeorica;
- pratica : array of TProvaPratica;
- end;
- const MASCULINO = 'M';
- FEMININO = 'F';
- GENEROS = [MASCULINO, FEMININO];
- QTD_PRATICAS = 3;
- VAL_CORRIDA_M : TProvaPratica = (aprovado : true;
- nome : 'corrida masculino';
- distancia : 100;
- tempo : 30);
- VAL_CORRIDA_F : TProvaPratica = (aprovado : true;
- nome : 'corrida feminino';
- distancia : 50;
- tempo : 2);
- VAL_NATACAO_M : TProvaPratica = (aprovado : true;
- nome : 'natacao masculino';
- distancia : 10;
- tempo : 5);
- VAL_NATACAO_F : TProvaPratica = (aprovado : true;
- nome : 'natacao feminino';
- distancia : 10;
- tempo : 10);
- VAL_BARRA_M : TProvaPratica = (aprovado : true;
- nome : 'barra masculino';
- distancia : 1;
- tempo : 60);
- VAL_BARRA_F : TProvaPratica = (aprovado : true;
- nome : 'barra feminino';
- distancia : 1;
- tempo : 120);
- procedure ProvaTeorica(const NOME_PROVA : string; const LIMITE : TLimite; const MINIMO : byte; var cand : TCandidato);
- begin
- WriteLn(UpCase(NOME_PROVA), ':');
- repeat
- Write('Media? (0-20) ');
- ReadLn(cand.teoria.media);
- until cand.teoria.media in LIMITE;
- cand.teoria.aprovado := cand.teoria.media >= MINIMO;
- end;
- procedure ProvaPratica(const NOME_PROVA, DIST_UNIDADE, TEMPO_UNIDADE : string; const IND : byte; const DIST_M, DIST_F, TEMPO_M, TEMPO_F : smallint; var cand : TCandidato);
- begin
- cand.pratica[IND].nome := NOME_PROVA;
- WriteLn(UpCase(NOME_PROVA), ':');
- repeat
- Write('Distancia percorrida? (em ', DIST_UNIDADE, ') ');
- ReadLn(cand.pratica[IND].distancia);
- until cand.pratica[IND].distancia >= 0;
- repeat
- Write('Tempo decorrido? (em ', TEMPO_UNIDADE, ') ');
- ReadLn(cand.pratica[IND].tempo);
- until cand.pratica[IND].tempo >= 0;
- cand.pratica[IND].aprovado := ((cand.sexo = MASCULINO) and (cand.pratica[IND].distancia >= DIST_M) and (cand.pratica[IND].tempo >= TEMPO_M)) or ((cand.sexo = FEMININO) and (cand.pratica[IND].distancia >= DIST_F) and (cand.pratica[IND].tempo >= TEMPO_F));
- end;
- procedure ValidarCandidato(cand : TCandidato);
- var i : byte;
- begin
- Write('Juizo final: ');
- if not cand.teoria.aprovado then begin
- WriteLn('REPROVADO na prova teorica.');
- exit;
- end;
- for i := Low(cand.pratica) to High(cand.pratica) do
- if not cand.pratica[i].aprovado then begin
- WriteLn('REPROVADO na prova pratica "', cand.pratica[i].nome, '".');
- exit;
- end;
- WriteLn('APROVADO!');
- end;
- procedure NovoCandidato;
- var candidato : TCandidato;
- begin
- Write('Nome: ');
- ReadLn(candidato.nome);
- repeat
- Write('Sexo (M/F): ');
- candidato.sexo := UpCase(ReadKey);
- until candidato.sexo in GENEROS;
- ProvaTeorica('A - prova teorica', [0..20], 8, candidato);
- SetLength(candidato.pratica, QTD_PRATICAS);
- ProvaPratica('B - corrida', 'km', 'min', 0, VAL_CORRIDA_M.distancia, VAL_CORRIDA_F.distancia, VAL_CORRIDA_M.tempo, VAL_CORRIDA_F.tempo, candidato);
- ProvaPratica('C - natacao', 'km', 'min', 1, VAL_NATACAO_M.distancia, VAL_NATACAO_F.distancia, VAL_NATACAO_M.tempo, VAL_NATACAO_F.tempo, candidato);
- ProvaPratica('D - barra', 'barras', 'min', 2, VAL_BARRA_M.distancia, VAL_BARRA_F.distancia, VAL_BARRA_M.tempo, VAL_BARRA_F.tempo, candidato);
- ValidarCandidato(candidato);
- end;
- var sair : char = 'N';
- begin
- repeat
- NovoCandidato;
- repeat
- Write('Sair? (S/N) ');
- sair := UpCase(ReadKey);
- until sair in ['N', 'S'];
- until sair = 'S';
- end.
Advertisement
Add Comment
Please, Sign In to add comment