Ir ao conteúdo
  • Cadastre-se

Pascal/Delphi Programinha simples de login


Posts recomendados

Boa tarde pessoal!

 

Mais uma vez venho pedir ajuda... 
Eu, como pouquíssimo experiente em Pascal, estou tendo problemas em solucionar mais um problema no programinha sugerido pela apostila.

 

A proposta é que seja criada uma tela simples que confirme a validade de um login e senha.

No inicio testei apenas as condições que o probleminha pedia, depois experimentei usar apenas um dos itens corretamente (login ou senha) para ver o que acontecia. O resultado foi que o programinha não finaliza como esperado.

 

Segue o código, conto a ajuda de vocês!
Desde já, obrigada!

Program Login;

Var
User, pass: string;
 
Begin
	Writeln('Digite o nome de usuário: ');
	Readln(user);
	Writeln('Digite a senha: ');
	Readln(pass);
	Writeln;
	
	If (user<>'prepara') and (pass<>'123456') then
		Begin
			Write('Usuário ou senha inválido!');
		end
	Else If (user='prepara') and (pass='123456') then
	  Begin
			Write('Seja Bem-Vindo!');
		end;
	readln;
End.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
6 horas atrás, Educador Prepara disse:

O resultado foi que o programinha não finaliza como esperado.

 

E está finalizando como? seria interessante informar quais dados inseriu; o que era esperado; e o que aconteceu de diferente, ou seja, relatar o que ocorre

Ex.:

"Quando eu insiro o usuário correto e coloco a senha errada, não aparece a mensagem alguma. Não está entrando no primeiro if".

 

Para não perder tempo, vamos lá:

 

Se for o citado acima, basta analisar o código, veja:

 

6 horas atrás, Educador Prepara disse:

If (user<>'prepara') and (pass<>'123456') then

 

Veja que utilizou o operador lógico and, ou seja, uma Conjunção. Como funciona esse operador? resumidamente seria: "resultará verdadeiro apenas se todas as proposições forem verdadeiras". Logo, para entrar nesse if, tanto o usuário, tanto a senha, têm que estarem errados. Se um ou outro não for diferente, não vai entrar! Tem que ser os 2.


Vou demonstrar:


Inicialmente relembre como funciona o if... simplesmente ele verifica se "o quê está está entre o if e o then resulta em true (verdadeiro) ou se resulta em false (falso). Se resultar em true, vai 'entrar' no if (executará a próxima instrução depois do then). Se resultar em false, pula essa próxima linha, indo para próxima posterior".

 

Por exemplo, vamos supor que inseriu esses dados:

user = 'prepara' //...que agora é a hora?
pass = '12345678'

Logo, seria equivalente a:

if ('prepara' <> 'prepara') and ('12345678' <> '123456') then

Certo?

 

Calculando o programa chegaria a:

//  falso    verdadeiro
if (false) and (true) then

Ou seja, 'prepara' NÃO É diferente de 'prepara' (é igual), logo, resulta em false. Já '12345678' É diferente de '12346', logo, resultando em true. O que resulta "verdadeiro" e "falso" na tabela verdade da Conjunção? resulta em "falso" (já que "só resulta em true e tudo for true).

 

Logo equivale a:

if (false) then

Assim, não executando a próxima linha depois do if (que é um begin), indo para próxima que é um else (primeira após o end do begin que não foi executado). Como o programa sempre "entra" no else quando o seu correspondente if "não foi entrado", então vai executar a próxima instrução, que é um outro if. Aí vai "calcular":

if ('prepara' = 'prepara') and ('12345678' = '123456')

Que equivale a:

//verdadeiro   falso
if (true) and (false) then

Como já explicado mais acima, vai resultar em false também... não executando a próxima linha e indo para posterior que é um readln, ou seja, se só a senha ou só o login for diferente, não vai entrar nem num if, nem no outro.

 

"Ah!, mas era para entrar" no primeiro. Pois então, tem que ver o que está errado.... agora (dever ser) fácil perceber que não são os dados ou as comparações que estão bugadas, mas sim a "expressão" que usou no if não está de acordo com o que você quer. Então, se basta UM OU OUTRO ser falso bastaria???

 

Quase 500 palavras para simplesmente dizer: "em vez de and, use or."

 

Ficando assim:

if (user<>'prepara') or (pass<>'123456') then
  write('Usuário ou senha inválido!');

 

Se o problema é outra, explica aí que reanalisamos.

 

Qualquer dúvida é só perguntar também.

 

No aguardo.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Observe agora que o segundo if é a negação do primeiro, ou seja, se o primeiro der false, necessariamente o segundo vai dar true. Talvez não fique tão claro analisando as sentenças em si, mas pelas consequências talvez fique mais fácil... veja... se "se o usuário ou senha não são inválidos, significa que eles são válido". Não existe uma terceira opção. Tente aí achar uma combinação de usuário e senha que não entre nem no primeiro, nem no segundo if.

 

O código poderia ficar assim:

program Login;
var
  user,
  pass :string;

begin
writeln('Digite o nome de usuário: ');
readln(user);
writeln('Digite a senha: ');
readln(pass);
writeln;
if (user <> 'prepara') or (pass <> '123456') then
  begin
  write('Usuário ou senha inválido!');
  end
else
  begin
  write('Seja Bem-Vindo!');
  
  
  end;
readln;
end.

 

ou assim:

 

program Login;
var
  user,
  pass :string;

begin
writeln('Digite o nome de usuário: ');
readln(user);
writeln('Digite a senha: ');
readln(pass);
writeln;
if (user = 'prepara') and (pass = '123456') then
  begin
  write('Seja Bem-Vindo!');
  
  
  end
else
  begin
  write('Usuário ou senha inválido!');
  end;
readln;
end.

 

Outra forma seria utilizando do conceito de flag.

program Login;
var
  user,
  pass   :string;
  logado :boolean; //flag que indica se está logado ou não

begin
writeln('Digite o nome de usuário: ');
readln(user);
writeln('Digite a senha: ');
readln(pass);
writeln;
logado := false;
if (user = 'prepara') and (pass = '123456') then
  begin
  logado := true;
  end
else
  begin
  logado := false;
  write('Usuário ou senha inválido!');
  end;

if (logado) then
  begin
  writeln('Seja bem-vindo');
  
  end;

readln;

end.

 

Por ai vai.

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!