sabing Posted March 16, 2012 at 04:06 PM Report #444241 Posted March 16, 2012 at 04:06 PM me ajuda pessoal Program nota; var nota2,nota1,media:Real; confirmar,sair:String[1]; aluno:String[10]; Begin repeat repeat write('Digite o nome do aluno = '); read(aluno); write('Digite a primeira nota = '); read(nota1); if(nota1 <0) then begin write('Nota invalida'); break; end; write('Digite a segunda nota = '); read(nota2); if(nota2<0) then begin write('Nota invalida'); break; end; write('Os valores estão corretos? S/N : '); read(sair); // verificar se o s ou n maiuscolo se não dar um erro e voltar a na messagem(write('Os valores estão corretos? S/N : ') until sair = 'S'; media:=(nota1+nota2)/2; if(media > 6 ) then begin write('Aprovado ',aluno,' = ',media); end; if(media = 6) then begin write('Aprovado ',aluno,' = ',media); end; if(media < 3) then begin write('Reprovado ',aluno,' = ',media); end; if(media < 3 ) then begin write('O aluno está em exame ',aluno,' = ',media); end; if(media < 6) then begin write('O aluno está em exame ',aluno,' = ',media); end; if(media = 3 ) then begin write('O aluno está em exame ',aluno,' = ' ,media); end; write('Deseja sair do programa ? S/N'); read(confirmar); // verificar se o s ou n maiuscolo se não dar um erro e voltar a na messagem( write('Deseja sair do programa ? S/N') until confirmar = 'S' End.
nunopicado Posted March 16, 2012 at 05:14 PM Report #444257 Posted March 16, 2012 at 05:14 PM Se usares a função UpCase, podes sempre testar assumindo que é maiúscula: . . . until UpCase(Confirmar) = 'S'; Assim, mesmo que o utilizador insita minúscula, ele irá testar correctamente. Em alternativa, podes colocar as duas opções: . . . until (Confirmar = 'S') or (Confirmar = 's'); "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.
nunopicado Posted March 16, 2012 at 05:21 PM Report #444259 Posted March 16, 2012 at 05:21 PM Desculpa, não tinha reparado que era para dar erro se for minúsculo... Para verificares isso, tens de testar o valor ASCII do caracter lido. Se este valor estiver entre 65 (A máiusculo) e 90 (Z maiusculo) é está em maiusculas. Se estiver entre 97 e 122 é minúsculo. Para veres este valor, precisas da função ORD, que aceita um argumento do tipo char. . . . repeat write('Deseja sair do programa ? S/N'); read(confirmar); if ord(confirmar[1]) in [97..122] then writeln('erro! tem de escrever em maiúculas'); until ord(Confirmar[1]) in [65..90]; // verificar se o s ou n maiuscolo se não dar um erro e voltar a na messagem( write('Deseja sair do programa ? S/N') until confirmar = 'S' Com isto, na hora de ler a pergunta, ele irá tentar ler até que a tecla seja maiúscula, e irá apresentar um erro de cada vez que seja minúscula. "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.
sabing Posted March 16, 2012 at 05:31 PM Author Report #444261 Posted March 16, 2012 at 05:31 PM eu estou usando o compiladora pascalzim Program nota; var nota2,nota1,media:Real; confirmar,sair:String[1]; aluno:String[10]; Begin repeat repeat write('Digite o nome do aluno = '); read(aluno); write('Digite a primeira nota = '); read(nota1); if(nota1 <0) then begin write('Nota invalida'); break; end; write('Digite a segunda nota = '); read(nota2); if(nota2<0) then begin write('Nota invalida'); break; end; write('Os valores estão corretos? S/N : '); read(sair); until sair = 'S'; media:=(nota1+nota2)/2; if(media > 6 ) then begin write('Aprovado ',aluno,' = ',media); end; if(media = 6) then begin write('Aprovado ',aluno,' = ',media); end; if(media < 3) then begin write('Reprovado ',aluno,' = ',media); end; if(media < 3 ) then begin write('O aluno está em exame ',aluno,' = ',media); end; if(media < 6) then begin write('O aluno está em exame ',aluno,' = ',media); end; if(media = 3 ) then begin write('O aluno está em exame ',aluno,' = ' ,media); end; write('Deseja sair do programa ? S/N'); read(confirmar); if ord(confirmar[1]) in [97..122] then // ele esta dando erro no in por que será? writeln('erro! tem de escrever em maiúculas'); until ord(Confirmar[1]) in [65..90]; until confirmar = 'S' End. EDIT: GeSHi adicionado. thoga31
nunopicado Posted March 16, 2012 at 05:37 PM Report #444264 Posted March 16, 2012 at 05:37 PM O PascalZim não é um compilador, é um interpretador, e dos bem fracos... 🙂 Só tem um conjunto muito reduzido de funções do pascal. No caso, a palavra-chave IN não é reconhecida. Podes fazer assim: . . . . repeat // o repeat deste teste tem de ficar aqui... Se ficar a seguir ao outro vai repetir todo o programa se o utilizador colocar minuscula write('Deseja sair do programa ? S/N'); read(confirmar); if (ord(confirmar[1])>=97) and (ord(confirmar[1])<=122) then // ele esta dando erro no in por que será? writeln('erro! tem de escrever em maiúculas'); until (ord(confirmar[1])>=65) and (ord(confirmar[1])<=90) until confirmar = 'S' "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 16, 2012 at 05:41 PM Report #444265 Posted March 16, 2012 at 05:41 PM @nunopicado... é mesmo necessário o ORD? Eu acho que só complica, havendo o operador IN e uma cena maravilhosa chamada Conjuntos... 🙂 E @sabing, isto de verificar em maiúsculas e não dar a chance de ser minúscula complica a história, não só ao programador bem como ao utilizador... ? Uma solução ord-free: const maiusculas : set of char = ['A'..'Z']; opcoes_saida : set of char = ['S','N']; repeat (* PROGRAMA *) repeat (* verificação de saída *) repeat writeln; write('Deseja sair? S/N '); read(confirmar); if not (confirmar in maiusculas) then write('Escreva em maiusculas!'); until (confirmar in maiusculas); // tem de estar em maiúsculas if not (confirmar in opcoes_saida) then write('Moço! Ou S, ou N! Tah? xD'); until (confirmar in opcoes_saida); // deve ser só "S" ou "N" until (confirmar = 'S'); // Se "S", sai do programa. Knowledge is free!
nunopicado Posted March 16, 2012 at 05:46 PM Report #444267 Posted March 16, 2012 at 05:46 PM Ele não pode usar o IN... É PZim user! 🙂 Mas tens razão, nem precisava usar o ORD (sexta ao fim da tarde, mania de complicar). Bastava fazer: . . . . repeat // o repeat deste teste tem de ficar aqui... Se ficar a seguir ao outro vai repetir todo o programa se o utilizador colocar minuscula write('Deseja sair do programa ? S/N'); read(confirmar); if (confirmar[1]>='a') and (confirmar[1]<='z') then // ele esta dando erro no in por que será? writeln('erro! tem de escrever em maiúculas'); until (confirmar[1]>='A') and (confirmar[1])<='Z') until confirmar = 'S' Como o tipo char também é ordinal, pode ser assim... PS: Para o Sabing, ou o moderador aqui presente, ponham lá as tags de código no ultimo post do Sabing, que aquilo assim fica feio... 🙂 "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.
sabing Posted March 16, 2012 at 05:55 PM Author Report #444271 Posted March 16, 2012 at 05:55 PM Funcionou perfeitamente muito obrigado ! mesmo
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