Jump to content

Diferenciar de maiusculo e minusculo pascal


sabing
 Share

Recommended Posts

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.
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

@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!

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.