allancarlos123 Posted March 7, 2014 at 05:46 PM Report #547844 Posted March 7, 2014 at 05:46 PM Olá galera. Quero saber como posso fazer para que ao pesquisar o nome do candidato inscrito e caso ele não tenha passado em alguma prova, na pesquisa avise em qual prova ele não passou, se possível só usando IF's. Perguntei ao professor se ia usar Record ou algo do tipo e ele disse que é só para usar IF por enquanto. O código tá básico, ele não é assim, quero facilitar. No caso ai só coloquei duas provas só para teste, caso o indivíduo reprove na primeira ele fique no sistema e ao pesquisar pelo nome ele escreva em qual prova ele ficou reprovado. 🙂 Program Pzim ;VarSexo:Char;Nome,p:String;p1,p2,r:Integer;Begin nome:=''; For r:=1 to 2 do begin Writeln('Nome: '); readln(nome); Writeln('Sexo: '); readln(sexo); Writeln('Correu: '); readln(p1); If ((Sexo='h') and (p1>=100) OR (Sexo='m') and (p1>=50)) Then Writeln('Nadou: '); readln(p2); If ((Sexo='h') and (p2>=100) OR (Sexo='m') and (p2>=50)) Then If (p=nome) Then end; Writeln('Pesquisar por nome: '); readln (p); nome:=p; p:=nome; Writeln(p);end.[/Code]
nunopicado Posted March 7, 2014 at 05:56 PM Report #547845 Posted March 7, 2014 at 05:56 PM Explica lá como é que se pesquisa sem ter uma qualquer estrutura de dados? Ou melhor, pede ao teu professor para explicar, porque em 22 anos disto, nunca consegui fazer essa proeza. 1 Report "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
allancarlos123 Posted March 7, 2014 at 06:01 PM Author Report #547847 Posted March 7, 2014 at 06:01 PM O jeito que eu fiz já dá pra pesquisar pelo nome... Problema que eu to tendo é como ele vai fazer para mostrar onde o candidato não passou, só com estrutura de dados?
nunopicado Posted March 7, 2014 at 06:10 PM Report #547848 Posted March 7, 2014 at 06:10 PM Dá para pesquisar pelo nome, não... Dá para pedir ao utilizador que insira um conjunto de dados de forma repetida (no caso do teu exemplo, duas vezes), sem guardar esses dados em lado nenhum... Pesquisar é procurar uma determinada informação numa estrutura com vários registos. E no teu código, não tens em lado nenhum a possibilidade de guardar vários registos! Repara, para pesquisar, não tem de ser Record. O tipo de dados depende dos dados que precisas guardar. Podia ser simplesmente um array (no teu caso específico, não servia de muito). Mas tem de haver algo que agrege a informação numa estrutura pesquisável, que é o que não tens. Mas se o professor acha que para fazer pesquisa não é preciso record, bastam if's, estão a coisa está bonita... Até porque o record não é substituto dos if's, pelo que a afirmação é logo à partida muito estranha! "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
allancarlos123 Posted March 7, 2014 at 06:22 PM Author Report #547849 Posted March 7, 2014 at 06:22 PM (edited) Ele vai corrigir o exercício hoje certamente, quando ele fazer eu copio e trago pra cá 😄 ... Para a coisa ficar mais clara vou digitar o exercício que ele pediu para iluminar a cabeça (: Lembrando que os dados da pergunta não importa, é só uma ideia, o importante é que funcione o programa. 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. Edited March 7, 2014 at 06:26 PM by allancarlos123
nunopicado Posted March 7, 2014 at 06:43 PM Report #547851 Posted March 7, 2014 at 06:43 PM Bem, isso realmente trás luz à questão... 1º Tadinhas das moças! Correr 50km em 2 minutos nem o Francis Obikwelu. 2º O enunciado não fala nada em pesquisar... Sendo assim, o teu prof está perdoado! 😛 Tu é que tens de explicar-te melhor. Sendo assim: Começas por ler o nome. Depois lês a nota da prova teórica. Se inferior a 8, avisas e termina o ciclo, se superior passa à questão seguinte. Lês a distância da corrida. Se abaixo de 100 (H) ou 50 (M), avisa e termina. Se acima, passa à próxima... E por aí fora... Este exercício baseia-se em IF's encadeados, e desde já te dou um conselho: Muita atenção à indentação do código. Se o indentares bem, será fácil fazer isto. Se o indentares mal, ou não indentares, vais-te perder no emaranhado de código, tal como fizeste no teu exemplo, em que os if's de uma questão executam apenas um comando da próxima... Para teres uma ideia, olha aí o teu código indentado correctamente. O que vês de errado? Program Pzim ; Var Sexo:Char; Nome,p:String; p1,p2,r:Integer; Begin nome:=''; For r:=1 to 2 do begin Writeln('Nome: '); readln(nome); Writeln('Sexo: '); readln(sexo); Writeln('Correu: '); readln(p1); If ((Sexo='h') and (p1>=100) OR (Sexo='m') and (p1>=50)) Then Writeln('Nadou: '); readln(p2); If ((Sexo='h') and (p2>=100) OR (Sexo='m') and (p2>=50)) Then If (p=nome) Then end; Writeln('Pesquisar por nome: '); readln (p); nome:=p; p:=nome; Writeln(p); end. "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
allancarlos123 Posted March 7, 2014 at 08:16 PM Author Report #547862 Posted March 7, 2014 at 08:16 PM (edited) Com certeza ficou bem melhor e bem explicativo ! 😄 Vou fazer, depois voltarei. @Edit Achei que era pra pesquisar quando ele fala ... Fazer um programa que "leia o nome de um candidato e informe se ele foi aprovado ou em que etapa ele foi reprovado." Edited March 7, 2014 at 08:37 PM by allancarlos123
thoga31 Posted March 7, 2014 at 08:57 PM Report #547864 Posted March 7, 2014 at 08:57 PM Fazer um programa que "leia o nome de um candidato e informe se ele foi aprovado ou em que etapa ele foi reprovado." Isto não indica que é preciso pesquisar. Aliás, nada no enunciado te diz que deves guardar a informação. Eu estou a detectar um grande problema da tua parte em montar as estruturas. Uma boa técnica para não falhar com os begin e end é simples: quando escreves um begin, escreves logo o seu end correspondente. Assim diminuis imenso as probabilidades de perderes um, dois ou mais end's. Outra coisa que tens urgentemente de fazer é indentar o código. Cada estrutura deverá ter o seu conteúdo espaçado à frente. Compara estes dois códigos e diz-me qual se lê melhor: for i:=1 to 10 do begin if i mod 2 = 0 then begin for j := 1 to 2 do begin write('ola '); end; end else begin if i mod 5 = 0 then begin write('vodka'); end else begin write('pfff'); end; end; end; for i:=1 to 10 do begin if i mod 2 = 0 then begin for j := 1 to 2 do begin write('ola '); end; end else begin if i mod 5 = 0 then begin write('vodka'); end else begin write('pfff'); end; end; end; Podes achar que estás a indentar o código, mas não o estás a fazer bem. Uma pessoa perde-se facilmente a ler as tuas estruturas porque não segues as regras mais básicas da indentação. Entretanto, decidi resolver este exercício para desanuviar um pouco, e tu não vais poder utilizar a minha solução uma vez que eu utilizei coisas que nunca deste na escola. No entanto, fica aqui um exemplo de um programa minimamente estruturado: 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. Knowledge is free!
nunopicado Posted March 7, 2014 at 09:19 PM Report #547866 Posted March 7, 2014 at 09:19 PM (edited) O Thoga, e agora continua a desanuviar... Faz isto em OOP. 😉😛 Edited March 7, 2014 at 09:19 PM by nunopicado "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
allancarlos123 Posted March 7, 2014 at 09:21 PM Author Report #547867 Posted March 7, 2014 at 09:21 PM A diferença é muita com certeza. Prometo que tomarei mais cuidado na organização haha Agora que entendi como se faz vai ficar mais fácil... Só tenho a agradecer 😄 :D 😄
nunopicado Posted March 7, 2014 at 09:27 PM Report #547868 Posted March 7, 2014 at 09:27 PM Allan: Sugiro que nem olhes muito para o código do Thoga, pelo menos antes de fazeres o teu. É que, como ele diz, aquilo já não é bem código iniciado, e está sujeito a confundir-te mais um bocado. Nota sim na parte da organização. Um programa bem indentado ajuda-te imenso a evitar erros. Por exemplo, se puseres cada END debaixo do seu BEGIN correspondente (ao mesmo nível), e todo o código que estiver no meio ficar 2 ou 3 caracteres à frente, basta-te um relance para veres onde pertence cada END, e por esse motivo, será fácil veres, por exemplo, que código é executado num IF ou num FOR. Basicamente, se meteres um BEGIN num IF, tudo o que aparecer lá dentro até encontrares um END ao mesmo nível desse BEGIN, será executado. Como tu tinhas, com 3 ou 4 END's seguidos e ao mesmo nível, torna-se bem mais complicado perceber a qual BEGIN pertence qual... Indentar é algo que é fácil de fazer, e facilita todo o resto do processo de programação... Além de ficar o código mais bonito e legível! "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
thoga31 Posted March 7, 2014 at 09:58 PM Report #547869 Posted March 7, 2014 at 09:58 PM (edited) O Thoga, e agora continua a desanuviar... Faz isto em OOP. 😉😛 Agora fica para outro dia 😄 @allancarlos123, o meu código tem coisas que decerto não falaste: Arrays dinâmicos Records Records constantes (é incrível como muitas pessoas, mesmo que programam em Pascal há anos, desconheçam como se faz isto) Sets Entre outras... Portanto, cuidado, e não te baseies demasiado nele. Nem sei se vais entender metade, e não estou a dizer isto por achar que tens menos capacidades, digo isto porque és iniciado, e as técnicas eu eu utilizei baseiam-se em anos de experiência com o Pascal, tendo pelo meio uns "toques" que aprendi de outras linguagens 😉 Apenas decidi mostrar como resolvi para veres que este problema em específico pode dar pano para mangas e que convém estruturares bem o código desde o início, além de te concentrares no que estás a fazer (por exemplo, para não falhar as estruturas de controlo). Edited March 7, 2014 at 10:04 PM by thoga31 1 Report Knowledge is free!
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now