allancarlos123 Posted February 28, 2014 at 10:08 PM Report #547187 Posted February 28, 2014 at 10:08 PM Olá, estou aqui mais uma vez para chatiar vcs 😛 Quero fazer com que o programa faça outro cadastro caso o usuário queira, e quero que ele feche caso o usuário escolha fechar também. Já tentei de vários modos, mas só da erro de UNTIL não esperado. Program Pzim ; Uses CRT; Var Prova,Corrida,Natacao,Barra:Integer; Nome,Sexo:Char; Aprovado:Boolean; Begin Aprovado:=TRUE; //-------------------------NOME------------------------------- Writeln('Qual o seu nome: '); Readln(Nome); clrscr; //--------------------------SEXO------------------------------ Writeln('"M" para Masculino ou "F" para Feminino: '); Readln(Sexo); clrscr; //---------------------MÉDIA DA PROVA-------------------------------- Writeln('Qual foi a sua media na prova: '); Readln(Prova); clrscr; If (Prova>8) AND (Prova<=10) Then //--------------------------CORRIDA------------------------------ Begin IF APROVADO Then Begin Writeln('Quantos Km voce correu: '); Readln(Corrida); clrscr; If (Sexo='m') AND (Corrida>=100) OR (Sexo='f') AND (Corrida>=50) Then //-------------------------NATAÇÃO------------------------------- Begin IF APROVADO Then Begin Writeln('Quantos Km voce nadou: '); Readln(Natacao); clrscr; If (Sexo='m') AND (Natacao>=10) OR (Sexo='f') AND (Natacao>=10) Then //---------------------------BARRA----------------------------- Begin IF APROVADO Then Begin Writeln('Quantas barras vc fez: '); Readln(Barra); clrscr; If (Sexo='m') AND (Barra>=1) OR (Sexo='m') AND (Barra>=1) Then Begin IF APROVADO Then END; Begin textcolor(YELLOW); Writeln('Voce foi aprovado em todas as etapas. Parabens!'); //----------------------FECHAR OU REINICIAR---------------------------------- end; end; end; end; end; end; end; End.
thoga31 Posted February 28, 2014 at 10:14 PM Report #547188 Posted February 28, 2014 at 10:14 PM Vais fazer um favor e editar o teu post e colocar o código como deve ser. Usa o editor simples (primeiro botão do editor) e não o "todo bonito" que só dá asneira deste tipo. Para concluir, vais acrescentar, à frente de "code", na tag de início, "=pascal" de forma a ficar "code=pascal" para que seja feito o highlight. Não faço eu isto para que aprendas a colocar bem o código e veres que se deve ter cuidado a colocar as coisas, fizeste Copy-Paste de algum sítio e a formatação veio toda atrás, e agora o código está cheio de tags como "font" e "color". Depois disso, eu verei o código, ok? 😉 Knowledge is free!
allancarlos123 Posted February 28, 2014 at 10:19 PM Author Report #547189 Posted February 28, 2014 at 10:19 PM Desculpa, não sabia :/ Juro que tentei, mas agora com sua dica conseguir 🙂
thoga31 Posted February 28, 2014 at 10:28 PM Report #547190 Posted February 28, 2014 at 10:28 PM (edited) Não faz mal, não nascemos ensinados, portanto há que ensinar para se aprender 😉 Não sei onde obténs um erro com um until se não há nenhum no código. Mas se tivesses indentado bem o código, terias visto o erro que assinalei: Program Pzim ; Uses CRT; Var Prova,Corrida,Natacao,Barra:Integer; Nome,Sexo:Char; Aprovado:Boolean; Begin Aprovado:=TRUE; //-------------------------NOME------------------------------- Writeln('Qual o seu nome: '); Readln(Nome); clrscr; //--------------------------SEXO------------------------------ Writeln('"M" para Masculino ou "F" para Feminino: '); Readln(Sexo); clrscr; //---------------------MÉDIA DA PROVA-------------------------------- Writeln('Qual foi a sua media na prova: '); Readln(Prova); clrscr; If (Prova>8) AND (Prova<=10) Then //--------------------------CORRIDA------------------------------ Begin IF APROVADO Then Begin Writeln('Quantos Km voce correu: '); Readln(Corrida); clrscr; If (Sexo='m') AND (Corrida>=100) OR (Sexo='f') AND (Corrida>=50) Then //-------------------------NATAÇÃO------------------------------- Begin IF APROVADO Then Begin Writeln('Quantos Km voce nadou: '); Readln(Natacao); clrscr; If (Sexo='m') AND (Natacao>=10) OR (Sexo='f') AND (Natacao>=10) Then //---------------------------BARRA----------------------------- Begin IF APROVADO Then Begin Writeln('Quantas barras vc fez: '); Readln(Barra); clrscr; If (Sexo='m') AND (Barra>=1) OR (Sexo='m') AND (Barra>=1) Then Begin IF APROVADO Then END; Begin // o que é isto??? textcolor(YELLOW); Writeln('Voce foi aprovado em todas as etapas. Parabens!'); //----------------------FECHAR OU REINICIAR---------------------------------- end; end; end; end; end; end; end; End. Não sei para que queres a variável APROVADO se ela nunca muda de valor. Não era suposto estares a controlar o seu valor? Um conselho. não uses mega-comentários, são desnecessários. Por último, usa procedimentos e/ou funções para modular o código. Isto tudo enfiado no bloco principal não é boa prática. Edited February 28, 2014 at 10:29 PM by thoga31 Knowledge is free!
allancarlos123 Posted February 28, 2014 at 10:37 PM Author Report #547191 Posted February 28, 2014 at 10:37 PM Esse APROVADO é para caso alguma linha não aceite a quantidade pedida ele pare por ali e não continue a mostrar as próximas perguntas. E Until não está dessa vez porque eu apaguei, ai quando colei agora ele já estava sem... Por tanto, o que eu posso fazer para ele repetir o código ou feche caso o usuário escolha... Ex: Deseja cadastrar outro candidato (s/n) ?
thoga31 Posted February 28, 2014 at 10:41 PM Report #547193 Posted February 28, 2014 at 10:41 PM Esse APROVADO é para caso alguma linha não aceite a quantidade pedida ele pare por ali e não continue a mostrar as próximas perguntas. Isto não está a acontecer. A variável APROVADO não está a fazer nada neste momento. Por tanto, o que eu posso fazer para ele repetir o código ou feche caso o usuário escolha... Ex: Deseja cadastrar outro candidato (s/n) ? Como tentaste fazer? Já corrigiste o erro que te apontei? P.S.: aqui fica um exemplo de modulação do código. function GetAge(var age : byte; const VALIDATION : set of byte; const PROMPT : string = '') : boolean; const LIMIT = [0..150]; // há velhos recordistas xD begin repeat write(PROMPT); readln(age); until age in LIMIT; GetAge := age in VALIDATION; end; // ... procedure GetCandidate(var candidate : TPerson); var approved : boolen = true; begin // etc... if approved then approved := GetAge(candidate.age, [18..35], 'Idade? ') else exit; if approved then // etc... end; 1 Report Knowledge is free!
allancarlos123 Posted February 28, 2014 at 10:45 PM Author Report #547194 Posted February 28, 2014 at 10:45 PM É que é meu primeiro período de lógica, não aprendi isso ainda : ) Vou tomar um banho e quando voltar verifico direito o que posso fazer, caso eu tenha alguma dúvida postarei aqui 🙂 Agradeço Thoga31
thoga31 Posted February 28, 2014 at 10:50 PM Report #547196 Posted February 28, 2014 at 10:50 PM (edited) Não te esqueças de controlar a variável APROVADO, porque ela sozinha não adivinha o que queres. Para haver repetição, podes fazer assim: var opcao : string; repeat // código aqui repeat write('Introduzir um novo candidato? (S/N) '); readln(opcao); opcao := UpCase(opcao); // coloca em maiúscula until (opcao = 'S') or (opcao = 'N'); // controla o input, o utilizador não pode inserir mais nada se não "S" ou "N". until opcao = 'N'; // se "N", então pára e não regista mais nada. Edited February 28, 2014 at 10:51 PM by thoga31 Knowledge is free!
allancarlos123 Posted February 28, 2014 at 11:28 PM Author Report #547202 Posted February 28, 2014 at 11:28 PM (edited) Rsrsrsrs realmente não precisava, agora que vi e corrigi... Enquanto o repeat, ainda dá problema na UNTIL, segue a print... Como posso mandar o código inteiro sem tornar uma mega-comentário? Edited February 28, 2014 at 11:29 PM by allancarlos123
thoga31 Posted March 1, 2014 at 12:56 AM Report #547209 Posted March 1, 2014 at 12:56 AM O código não se torna um megacomentário. Eu estou a falar dos comentários do programa que são exageradamente grandes, tipo isto: //---------------------------nunca mais acaba-------------------------- Foi interessante ver que copiaste literalmente tudo o que escrevi, comentários incluídos... Já corrigiste o erro que apontei antes nos Begin e End? É lá que está o teu problema. Knowledge is free!
allancarlos123 Posted March 1, 2014 at 05:36 AM Author Report #547212 Posted March 1, 2014 at 05:36 AM Corrigir sim, olha como ficou :/ Obs: Se tirar o repeat ele funciona, se coloca ele dá erro de Until Program Pzim ; Var Prova,Corrida,Natacao,Barra:Integer; Nome,Sexo:Char; Aprovado:Boolean; opcao:String; Begin Repeat Aprovado:=TRUE; Writeln('Qual o seu nome: '); Readln(Nome); clrscr; Writeln('"M" para Masculino ou "F" para Feminino: '); Readln(Sexo); clrscr; Writeln('Qual foi a sua media na prova: '); Readln(Prova); clrscr; If (Prova>8) AND (Prova<=10) Then Begin Writeln('Quantos Km voce correu: '); Readln(Corrida); clrscr; If (Sexo='m') AND (Corrida>=100) OR (Sexo='f') AND (Corrida>=50) Then Begin Writeln('Quantos Km voce nadou: '); Readln(Natacao); clrscr; If (Sexo='m') AND (Natacao>=10) OR (Sexo='f') AND (Natacao>=10) Then Begin Writeln('Quantas barras vc fez: '); Readln(Barra); clrscr; If (Sexo='m') AND (Barra>=1) OR (Sexo='f') AND (Barra>=1) Then Begin textcolor(yellow); Writeln('Voce foi aprovado em todas as etapas. Parabens!'); repeat write('Introduzir outro candidato (s/n) ? '); readln(opcao); opcao := UpCase(opcao); until (opcao = 'S') or (opcao = 'N'); until opcao = 'N'; end;end;end;end; End.
thoga31 Posted March 1, 2014 at 12:28 PM Report #547217 Posted March 1, 2014 at 12:28 PM Indenta bem o código! Aqueles 4 ends estão fora do sítio. Toma atenção com as estruturas. 1 Report Knowledge is free!
allancarlos123 Posted March 1, 2014 at 01:00 PM Author Report #547218 Posted March 1, 2014 at 01:00 PM Tá endentado o problema é quando colo aqui ele não indenta... tomarei cuidado na próxima, vou ver os ends, depois retorno aqui.
allancarlos123 Posted March 1, 2014 at 01:16 PM Author Report #547222 Posted March 1, 2014 at 01:16 PM (edited) Tu é de mais Thoga :3 😄 Finalmente conseguir, ficou assim... Program Pzim ; Var Prova,Corrida,Natacao,Barra:Integer; Nome,Sexo:Char; Aprovado:Boolean; opcao:String; Begin repeat Aprovado:=TRUE; Writeln('Qual o seu nome: '); Readln(Nome); clrscr; Writeln('"M" para Masculino ou "F" para Feminino: '); Readln(Sexo); clrscr; Writeln('Qual foi a sua media na prova: '); Readln(Prova); clrscr; If (Prova>8) AND (Prova<=10) Then Begin Writeln('Quantos Km voce correu: '); Readln(Corrida); clrscr; end; If (Sexo='m') AND (Corrida>=100) OR (Sexo='f') AND (Corrida>=50) Then Begin Writeln('Quantos Km voce nadou: '); Readln(Natacao); clrscr; end; If (Sexo='m') AND (Natacao>=10) OR (Sexo='f') AND (Natacao>=10) Then Begin Writeln('Quantas barras vc fez: '); Readln(Barra); clrscr; end; If (Sexo='m') AND (Barra>=1) OR (Sexo='f') AND (Barra>=1) Then Begin Writeln('Voce foi aprovado em todas as etapas. Parabens!'); end; repeat write('Introduzir um novo candidato? (S/N) '); readln(opcao); opcao := UpCase(opcao); until (opcao = 'S') or (opcao = 'N'); until opcao = 'N'; End. Edited March 1, 2014 at 01:16 PM by allancarlos123
thoga31 Posted March 1, 2014 at 05:52 PM Report #547236 Posted March 1, 2014 at 05:52 PM A variável aprovado existe para quê? Ocupar memória? Nao é suposto haver uma validação sequencial dos dados? É que um dado inválido faz saltar a introdução de apenas mais um e não de todos os que se seguem. Knowledge is free!
allancarlos123 Posted March 1, 2014 at 06:37 PM Author Report #547239 Posted March 1, 2014 at 06:37 PM Que louco, antes não funcionava sem Boolean, agora funciona 👍 Tirei e deu certo '-'
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