Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
HelderT

Duvida pascal

Recommended Posts

Ora boas, tenho aqui 1 pequeno problema, estou a tentar inserir 1 password num pograma:

flag:=true;

cont_t:=3;

while flag do

Begin

writeln('Digite a Password');

readln(pass);

IF pass='helder10e'

THEN

begin

writeln('Password Correcta');

writeln('Bem Vindo');

flag:=false

end

ELSE

begin

Textcolor(lightred);

cont_t:=cont_t-1;

writeln('ERROR! Password Incorrecta');

writeln('Atenção! Tem mais ',cont_t,' tentativas');

end;

End;

IF cont_t=0

THEN

begin

Halt;

end;

O objectivo era que se inserisse a password correcta continuaria o programa mas o problema é que quando se vai inserir a password ele diz sempre que ta errado alguém me pode ajudar? e um dos outros objectivos era que se erra.se mais de 3 vezes a pass o programa fecharia. Ajudem-me pff é urgente...

Comprimentos,

HelderT

Editado por HelderT

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa não é a melhor solução mas vai lhe ajudar a não perder a lógica do seu programa.


program password;

var pass:string;
cont:byte;

BEGIN
cont:=3;
while (cont > 0) do
begin
writeln('Digite a Password');
readln(pass);
IF ((pass = 'helder10e') or (pass = 'HELDER10E'))
then
begin
writeln('Password Correcta');
writeln('Bem Vindo');
break; //quebra o laço
end else
begin
dec(cont); //cont:=cont-1;
if (cont > 0) then
begin
writeln('ERROR! Password Incorrecta');
writeln('Atenção! Tem mais ',cont,' tentativas');
end;
end;
end;
readln;
END.

DICAS: Evite nomes de variáveis complexos, principalmente em programas pequenos como esse. Sempre mantenha seu código limpo, identado e comentado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ora boas, tenho aqui 1 pequeno problema, estou a tentar inserir 1 password num pograma:

flag:=true;

cont_t:=3;

while flag do

Begin

writeln('Digite a Password');

readln(pass);

IF pass='helder10e'

THEN

begin

writeln('Password Correcta');

writeln('Bem Vindo');

flag:=false

end

ELSE

begin

Textcolor(lightred);

cont_t:=cont_t-1;

writeln('ERROR! Password Incorrecta');

writeln('Atenção! Tem mais ',cont_t,' tentativas');

end;

End;

IF cont_t=0

THEN

begin

Halt;

end;

O objectivo era que se inserisse a password correcta continuaria o programa mas o problema é que quando se vai inserir a password ele diz sempre que ta errado alguém me pode ajudar? e um dos outros objectivos era que se erra.se mais de 3 vezes a pass o programa fecharia. Ajudem-me pff é urgente...

Comprimentos,

HelderT

Olá,

Abaixo fiz também uma versão com algumas mudanças...

[color=#0000ff]PROGRAM[/color] testePassword[color=#000000];[/color]
[color=#0000ff]uses[/color]
CRT[color=#000000];[/color]
[color=#0000ff]const[/color]
senha[color=#000000]=[/color][color=#a31515]'helder10e'[/color][color=#000000];[/color]
[color=#0000ff]var[/color]
[color=#008000]//flag :boolean;[/color]
BLOQUEADO [color=#000000]:[/color][color=#0000ff]boolean[/color][color=#000000];[/color]
cont_t [color=#000000]:[/color][color=#0000ff]byte[/color][color=#000000];[/color]
[color=#008000]//pass :string/[/color]
password [color=#000000]:[/color][color=#0000ff]string[/color][color=#000000];[/color]

[color=#0000ff]BEGIN[/color]
[color=#000000]Textcolor[/color][color=#000000]([/color]White[color=#000000]);[/color]
BLOQUEADO[color=#000000]:=[/color][color=#0000ff]true[/color][color=#000000];[/color]
cont_t[color=#000000]:=[/color][color=#000000]3[/color][color=#000000];[/color]
[color=#2b91af]while[/color] [color=#000000]([/color]BLOQUEADO[color=#000000])[/color] [color=#0000ff]and[/color] [color=#000000]([/color]cont_t[color=#000000]<>[/color][color=#000000]0[/color][color=#000000])[/color] [color=#2b91af]do[/color]
[color=#0000ff]begin[/color]
[color=#000000]writeln[/color][color=#000000]([/color][color=#a31515]'Digite a Password'[/color][color=#000000]);[/color]
[color=#000000]readln[/color][color=#000000]([/color]password[color=#000000]);[/color]
cont_t[color=#000000]:=[/color]cont_t[color=#000000]-[/color][color=#000000]1[/color][color=#000000];[/color]
[color=#2b91af]if[/color] password[color=#000000]=[/color]senha [color=#2b91af]then[/color]
BLOQUEADO[color=#000000]:=[/color][color=#0000ff]false[/color]
[color=#2b91af]else[/color]
[color=#0000ff]begin[/color]
[color=#000000]Textcolor[/color][color=#000000]([/color]lightred[color=#000000]);[/color]
[color=#000000]writeln[/color][color=#000000]([/color][color=#a31515]'ERROR! Password Incorrecta'[/color][color=#000000]);[/color]
[color=#2b91af]if[/color] cont_t[color=#000000]>[/color][color=#000000]0[/color] [color=#2b91af]then[/color]
[color=#000000]write[/color][color=#000000]([/color][color=#a31515]'Atenção! Tem mais '[/color][color=#000000],[/color]cont_t[color=#000000],[/color][color=#a31515]' tentativas'[/color][color=#000000]);[/color]
ReadKey[color=#000000];[/color]
[color=#000000]Textcolor[/color][color=#000000]([/color]White[color=#000000]);[/color]
ClrScr[color=#000000];[/color]
[color=#0000ff]end[/color][color=#000000];[/color]
[color=#0000ff]end[/color][color=#000000];[/color]
[color=#2b91af]if[/color] [color=#0000ff]NOT[/color] BLOQUEADO [color=#2b91af]then[/color]
[color=#0000ff]begin[/color]
[color=#000000]writeln[/color][color=#000000]([/color][color=#a31515]'Password Correcta'[/color][color=#000000]);[/color]
[color=#000000]writeln[/color][color=#000000]([/color][color=#a31515]'Bem Vindo'[/color][color=#000000]);[/color]
[color=#0000ff]end[/color]
[color=#2b91af]else[/color]
[color=#000000]writeln[/color][color=#000000]([/color][color=#a31515]'TENTATIVAS ESGOTADAS'[/color][color=#000000]);[/color]
ReadKey[color=#000000];[/color]
[color=#0000ff]end[/color][color=#000000].[/color]

Tem várias formas de estruturar.. com certeza dá para melhorar muitas coisas.

Um detalhe interessante seria implementar para não aparecer a senha, mas sim os "*" como é convencionado. Se quiser tentar fique a vontade para tirar dúvidas também.

PS: geloh, eu acredito que não seja muito comum aceitar senhas tanto minúsculas e tanto MAIÚSCULAS... (duas formas diferentes para a mesma senha)

O mais comum é só aceitar exatamente como ela é ("sensível ao caso" - que é o padrão), ou ignorando se são maiúsculas ou minúsculas. Para o segundo caso, seria como comparar os valores com ambos serem todo convertido em maiúscula, assim tanto faz ser helder10e, heLDer10E, HELDER10E etc...

Em fim, ou só aceita exatamente como está ou compara os valores ignorando se são maiúsculas ou não.

[color=#2b91af]IF[/color] [color=#000000](([/color]pass [color=#000000]=[/color] [color=#a31515]'helder10e'[/color][color=#000000])[/color] [color=#0000ff]or[/color] [color=#000000]([/color]pass [color=#000000]=[/color] [color=#a31515]'HELDER10E'[/color][color=#000000]))[/color]

No caso, é como se o programa tivesse duas senhas!!!

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Obrigado por me terem ajudado, mas enquanto esperei tentei fazer por mim e consegui...


    Program pass;
    USES CRT; {o meu erro estava aqui, estava a usar WINCRT em vez de CRT}
    VAR
    flag: boolean;
    pass: string[10];
    cont_t: integer;

    begin
    flag:=true;
    cont_t:=3;
    while flag do
    Begin
    writeln('Digite a Password');
    readln(pass);
    IF pass='helder10e'
    THEN
    begin
    Textcolor(yellow);
    writeln('Password Correcta');
    writeln('Bem Vindo');
    flag:=false
    end
    ELSE
    begin
    Textcolor(lightred);
    cont_t:=cont_t-1;
    writeln('ERROR! Password Incorrecta');
    writeln('Atenção! Tem mais ',cont_t,' tentativas');
    end;
    IF cont_t=0
    THEN
    Exit;
    End;

    Agora estou a tentar por os '*' em vez das letras como disse o EstilingueAtomico e gostaria que me ajudassem pois ainda nao aprendi a fazer isso...

    Comprimentos, HelderT

    Editado por HelderT

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    PS: geloh, eu acredito que não seja muito comum aceitar senhas tanto minúsculas e tanto MAIÚSCULAS... (duas formas diferentes para a mesma senha)

    Concordo totalmente :) e só fiz por causa disso:

    mas o problema é que quando se vai inserir a password ele diz sempre que ta errado

    Abraço

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Obrigado por me terem ajudado, mas enquanto esperei tentei fazer por mim e consegui...


    Program pass;
    USES CRT; {o meu erro estava aqui, estava a usar WINCRT em vez de CRT}
    VAR
    flag: boolean;
    pass: string[10];
    cont_t: integer;

    begin
    flag:=true;
    cont_t:=3;
    while flag do
    Begin
    writeln('Digite a Password');
    readln(pass);
    IF pass='helder10e'
    THEN
    begin
    Textcolor(yellow);
    writeln('Password Correcta');
    writeln('Bem Vindo');
    flag:=false
    end
    ELSE
    begin
    Textcolor(lightred);
    cont_t:=cont_t-1;
    writeln('ERROR! Password Incorrecta');
    writeln('Atenção! Tem mais ',cont_t,' tentativas');
    end;
    IF cont_t=0
    THEN
    Exit;
    End;

    Agora estou a tentar por os '*' em vez das letras como disse o EstilingueAtomico e gostaria que me ajudassem pois ainda nao aprendi a fazer isso...

    Comprimentos, HelderT

    Olá,

    HelderT, existem algumas coisas que você precisa ajustar no seu código:

    1) Identificadores duplicados

    Não é permitido que exista duas "coisas" com o mesmo nome.

    [color=#0000ff]Program[/color] pass[color=#000000];[/color]
    [color=#0000ff]USES[/color] CRT[color=#000000];[/color] [color=#008000]{o meu erro estava aqui, estava a usar WINCRT em vez de CRT}[/color]
    [color=#0000ff]VAR[/color]
    flag[color=#000000]:[/color] [color=#0000ff]boolean[/color][color=#000000];[/color]
    pass[color=#000000]:[/color] [color=#0000ff]string[/color][color=#000000][[/color][color=#000000]10[/color][color=#000000]];[/color]
    cont_t[color=#000000]:[/color] [color=#0000ff]integer[/color][color=#000000];[/color]

    Neste caso você está utilizando o identificador <pass> para duas coisas: identificação do programa e o nome de variável. Mude de um dos dois. (mais prático mudar do program.)

    2) Finalização do programa

    Faltou declarar o último end do programa, no caso o "end." do BEGIN principal.

    ****

    PS: geloh, eu acredito que não seja muito comum aceitar senhas tanto minúsculas e tanto MAIÚSCULAS... (duas formas diferentes para a mesma senha)

    Concordo totalmente :) e só fiz por causa disso:

    mas o problema é que quando se vai inserir a password ele diz sempre que ta errado

    Abraço

    geloh, eu entendi o que você quis dizer. Mas tem um porém, analisando o primeiro código de HelderT, observei que o o erro que ele se refere deve está relacionado ao fato que o programa não parar de ler os códigos após as 3 tentativas (coisa que o seu faz).

    No caso a solução deste problema estava relacionado à condição do while. Veja:

    [color=#2b91af]while[/color] flag [color=#2b91af]do[/color]

    No códido de HelderT, em nenhum momento o valor da <flag> é alterada, logo o programa não vai parar de ler senha até que se digite uma correta (em detrimento de ser somente 3 tentativas).

    [color=#2b91af]while[/color] [color=#000000]([/color]cont [color=#000000]>[/color] [color=#000000]0[/color][color=#000000])[/color] [color=#2b91af]do[/color]

    Já no seu, você passou a utilizar o próprio contado como condição do while. (essa mudança que corrigiu o erro supracitado).

    Conclusão, você corrigiu um problema, mas inseriu outro contexto (não que esteja errado - vide meu post anterior) sobre as possibilidades de senhas.

    Abraços

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Boas, EstilingueAtomico dá para me ajudares a inserir os "*" no programa?

    É que estive a tentar mas ainda não consegui :/

    Comprimentos,

    HelderT

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Boas, EstilingueAtomico dá para me ajudares a inserir os "*" no programa?

    É que estive a tentar mas ainda não consegui :/

    Comprimentos,

    HelderT

    Olá,

    Abaixo um código extraído da nossa CRT_FCH:

    [color=#008000]{ *** ler um password [CRT_FHC] ***}[/color]
    [color=#0000ff]function[/color] [color=#000000]readPWD[/color][color=#000000]([/color]tamanho[color=#000000]:[/color][color=#0000ff]byte[/color][color=#000000]):[/color][color=#0000ff]string[/color][color=#000000];[/color]
    [color=#0000ff]const[/color]
    ENTER [color=#000000]=[/color] #[color=#000000]13[/color][color=#000000];[/color]
    BACKSPACE [color=#000000]=[/color] #[color=#000000]08[/color][color=#000000];[/color]
    [color=#0000ff]type[/color]
    T_Senha [color=#000000]=[/color] [color=#0000ff]Array[/color] [color=#000000][[/color][color=#000000]1[/color][color=#000000].[/color][color=#000000].255[/color][color=#000000]][/color] [color=#0000ff]of[/color] [color=#0000ff]Char[/color][color=#000000];[/color]
    [color=#0000ff]var[/color]
    caractere [color=#000000]:[/color][color=#0000ff]char[/color][color=#000000];[/color] [color=#008000]{caractere lido pelo usuario}[/color]
    cont [color=#000000]:[/color][color=#0000ff]byte[/color][color=#000000];[/color] [color=#008000]{contador de teclas já lidas}[/color]
    senha_tmp [color=#000000]:[/color][color=#0000ff]string[/color][color=#000000];[/color]
    v_senha [color=#000000]:[/color]T_Senha[color=#000000];[/color] [color=#008000]{a senha em si}[/color]
    i [color=#000000]:[/color][color=#0000ff]byte[/color][color=#000000];[/color] [color=#008000]{usado no for}[/color]
    [color=#0000ff]begin[/color]
    cont[color=#000000]:=[/color] [color=#000000]0[/color][color=#000000];[/color] [color=#008000]{zera o contador de caracteres já usados (é necessário)}[/color]
    [color=#2b91af]repeat[/color]
    caractere[color=#000000]:=[/color]readkey[color=#000000];[/color] [color=#008000]{ler a tecla digitada}[/color]
    [color=#0000ff]case[/color] [color=#000000]UpCase[/color][color=#000000]([/color]caractere[color=#000000])[/color] [color=#0000ff]of[/color] [color=#008000]{UpCase retorna o caractere em maiusculo}[/color]
    [color=#008000]{caso seja um alfanumérico}[/color]
    [color=#a31515]'A'[/color] [color=#000000]..[/color] [color=#a31515]'Z'[/color][color=#000000],[/color]
    [color=#a31515]'0'[/color] [color=#000000]..[/color] [color=#a31515]'9'[/color] [color=#000000]:[/color] [color=#0000ff]begin[/color]
    [color=#2b91af]if[/color] cont[color=#000000]<[/color]tamanho [color=#2b91af]then[/color]
    [color=#0000ff]begin[/color]
    [color=#000000]inc[/color][color=#000000]([/color]cont[color=#000000]);[/color] [color=#008000]{o mesmo que cont:= cont + 1;}[/color]
    v_senha[color=#000000][[/color]cont[color=#000000]]:=[/color] caractere[color=#000000];[/color] [color=#008000]{armazena o caracteres}[/color]
    [color=#000000]write[/color][color=#000000]([/color][color=#a31515]'*'[/color][color=#000000]);[/color] [color=#008000]{imprime um "*" (ocultando a senha)}[/color]
    [color=#0000ff]end[/color][color=#000000];[/color]
    [color=#0000ff]end[/color][color=#000000];[/color]
    [color=#008000]{caso queira apagar uma linha}[/color]
    BACKSPACE [color=#000000]:[/color] [color=#0000ff]begin[/color]
    [color=#2b91af]if[/color] cont[color=#000000]>=[/color][color=#000000]1[/color] [color=#2b91af]then[/color]
    [color=#0000ff]begin[/color]
    [color=#000000]gotoxy[/color][color=#000000]([/color]WhereX [color=#000000]-[/color][color=#000000]1[/color][color=#000000],[/color] WhereY[color=#000000]);[/color] [color=#008000]{posiciona uma coluna atrás}[/color]
    [color=#000000]write[/color][color=#000000]([/color][color=#a31515]' '[/color][color=#000000]);[/color] [color=#008000]{"apaga" um caractere}[/color]
    [color=#000000]gotoxy[/color][color=#000000]([/color]WhereX [color=#000000]-[/color][color=#000000]1[/color][color=#000000],[/color] WhereY[color=#000000]);[/color] [color=#008000]{posiciona uma coluna atrás}[/color]
    [color=#000000]dec[/color][color=#000000]([/color]cont[color=#000000]);[/color] [color=#008000]{atualiza o contador}[/color] [color=#008000]{dec(x) = x:=x-1;}[/color]
    [color=#0000ff]end[/color][color=#000000];[/color]
    [color=#0000ff]end[/color][color=#000000];[/color]
    [color=#0000ff]end[/color][color=#000000];[/color][color=#008000]{fim case}[/color]
    [color=#2b91af]until[/color][color=#000000]([/color]caractere [color=#000000]=[/color] ENTER[color=#000000])[/color][color=#008000]{ or (cont > max)}[/color][color=#000000];[/color]
    [color=#008000]{retorna a senha via function}[/color]
    senha_tmp[color=#000000]:=[/color][color=#a31515]''[/color][color=#000000];[/color]
    [color=#2b91af]for[/color] i[color=#000000]:=[/color] [color=#000000]1[/color] [color=#2b91af]to[/color] cont [color=#2b91af]do[/color]
    senha_tmp[color=#000000]:=[/color]senha_tmp[color=#000000]+[/color]v_senha[color=#000000][[/color]i[color=#000000]];[/color]
    readPWD[color=#000000]:=[/color]senha_tmp[color=#000000];[/color]
    [color=#0000ff]end[/color][color=#000000];[/color]

    [color=#008000]{ *** ler um password (e desce uma linha) [CRT_FHC] *** }[/color]
    [color=#0000ff]function[/color] [color=#000000]ReadPWDln[/color][color=#000000]([/color]tamanho[color=#000000]:[/color][color=#0000ff]byte[/color][color=#000000]):[/color][color=#0000ff]string[/color][color=#000000];[/color]
    [color=#0000ff]begin[/color]
    ReadPWDln[color=#000000]:=[/color][color=#000000]ReadPWD[/color][color=#000000]([/color]tamanho[color=#000000]);[/color]
    WriteLn[color=#000000];[/color]
    [color=#0000ff]end[/color][color=#000000];[/color]

    Basta colocar no código e usar.. ou aproveitar o código e implementar as adaptações no seu código...

    Exemplo:


    [color=#0000ff]uses[/color]
    CRT[color=#000000];[/color]

    [color=#008000]{ *** ler um password [CRT_FHC] ***}[/color]
    [color=#0000ff]function[/color] [color=#000000]readPWD[/color][color=#000000]([/color]tamanho[color=#000000]:[/color][color=#0000ff]byte[/color][color=#000000]):[/color][color=#0000ff]string[/color][color=#000000];[/color]
    [color=#0000ff]const[/color]
    ENTER [color=#000000]=[/color] #[color=#000000]13[/color][color=#000000];[/color]
    BACKSPACE [color=#000000]=[/color] #[color=#000000]08[/color][color=#000000];[/color]
    [color=#0000ff]type[/color]
    T_Senha [color=#000000]=[/color] [color=#0000ff]Array[/color] [color=#000000][[/color][color=#000000]1[/color][color=#000000].[/color][color=#000000].255[/color][color=#000000]][/color] [color=#0000ff]of[/color] [color=#0000ff]Char[/color][color=#000000];[/color]
    [color=#0000ff]var[/color]
    caractere [color=#000000]:[/color][color=#0000ff]char[/color][color=#000000];[/color] [color=#008000]{caractere lido pelo usuario}[/color]
    cont [color=#000000]:[/color][color=#0000ff]byte[/color][color=#000000];[/color] [color=#008000]{contador de teclas já lidas}[/color]
    senha_tmp [color=#000000]:[/color][color=#0000ff]string[/color][color=#000000];[/color]
    v_senha [color=#000000]:[/color]T_Senha[color=#000000];[/color] [color=#008000]{a senha em si}[/color]
    i [color=#000000]:[/color][color=#0000ff]byte[/color][color=#000000];[/color] [color=#008000]{usado no for}[/color]
    [color=#0000ff]begin[/color]
    cont[color=#000000]:=[/color] [color=#000000]0[/color][color=#000000];[/color] [color=#008000]{zera o contador de caracteres já usados (é necessário)}[/color]
    [color=#2b91af]repeat[/color]
    caractere[color=#000000]:=[/color]readkey[color=#000000];[/color] [color=#008000]{ler a tecla digitada}[/color]
    [color=#0000ff]case[/color] [color=#000000]UpCase[/color][color=#000000]([/color]caractere[color=#000000])[/color] [color=#0000ff]of[/color] [color=#008000]{UpCase retorna o caractere em maiusculo}[/color]
    [color=#008000]{caso seja um alfanumérico}[/color]
    [color=#a31515]'A'[/color] [color=#000000]..[/color] [color=#a31515]'Z'[/color][color=#000000],[/color]
    [color=#a31515]'0'[/color] [color=#000000]..[/color] [color=#a31515]'9'[/color] [color=#000000]:[/color] [color=#0000ff]begin[/color]
    [color=#2b91af]if[/color] cont[color=#000000]<[/color]tamanho [color=#2b91af]then[/color]
    [color=#0000ff]begin[/color]
    [color=#000000]inc[/color][color=#000000]([/color]cont[color=#000000]);[/color] [color=#008000]{o mesmo que cont:= cont + 1;}[/color]
    v_senha[color=#000000][[/color]cont[color=#000000]]:=[/color] caractere[color=#000000];[/color] [color=#008000]{armazena o caracteres}[/color]
    [color=#000000]write[/color][color=#000000]([/color][color=#a31515]'*'[/color][color=#000000]);[/color] [color=#008000]{imprime um "*" (ocultando a senha)}[/color]
    [color=#0000ff]end[/color][color=#000000];[/color]
    [color=#0000ff]end[/color][color=#000000];[/color]
    [color=#008000]{caso queira apagar uma linha}[/color]
    BACKSPACE [color=#000000]:[/color] [color=#0000ff]begin[/color]
    [color=#2b91af]if[/color] cont[color=#000000]>=[/color][color=#000000]1[/color] [color=#2b91af]then[/color]
    [color=#0000ff]begin[/color]
    [color=#000000]gotoxy[/color][color=#000000]([/color]WhereX [color=#000000]-[/color][color=#000000]1[/color][color=#000000],[/color] WhereY[color=#000000]);[/color] [color=#008000]{posiciona uma coluna atrás}[/color]
    [color=#000000]write[/color][color=#000000]([/color][color=#a31515]' '[/color][color=#000000]);[/color] [color=#008000]{"apaga" um caractere}[/color]
    [color=#000000]gotoxy[/color][color=#000000]([/color]WhereX [color=#000000]-[/color][color=#000000]1[/color][color=#000000],[/color] WhereY[color=#000000]);[/color] [color=#008000]{posiciona uma coluna atrás}[/color]
    [color=#000000]dec[/color][color=#000000]([/color]cont[color=#000000]);[/color] [color=#008000]{atualiza o contador}[/color] [color=#008000]{dec(x) = x:=x-1;}[/color]
    [color=#0000ff]end[/color][color=#000000];[/color]
    [color=#0000ff]end[/color][color=#000000];[/color]
    [color=#0000ff]end[/color][color=#000000];[/color][color=#008000]{fim case}[/color]
    [color=#2b91af]until[/color][color=#000000]([/color]caractere [color=#000000]=[/color] ENTER[color=#000000])[/color][color=#008000]{ or (cont > max)}[/color][color=#000000];[/color]
    [color=#008000]{retorna a senha via function}[/color]
    senha_tmp[color=#000000]:=[/color][color=#a31515]''[/color][color=#000000];[/color]
    [color=#2b91af]for[/color] i[color=#000000]:=[/color] [color=#000000]1[/color] [color=#2b91af]to[/color] cont [color=#2b91af]do[/color]
    senha_tmp[color=#000000]:=[/color]senha_tmp[color=#000000]+[/color]v_senha[color=#000000][[/color]i[color=#000000]];[/color]
    readPWD[color=#000000]:=[/color]senha_tmp[color=#000000];[/color]
    [color=#0000ff]end[/color][color=#000000];[/color]

    [color=#008000]{ *** ler um password (e desce uma linha) [CRT_FHC] *** }[/color]
    [color=#0000ff]function[/color] [color=#000000]ReadPWDln[/color][color=#000000]([/color]tamanho[color=#000000]:[/color][color=#0000ff]byte[/color][color=#000000]):[/color][color=#0000ff]string[/color][color=#000000];[/color]
    [color=#0000ff]begin[/color]
    ReadPWDln[color=#000000]:=[/color][color=#000000]ReadPWD[/color][color=#000000]([/color]tamanho[color=#000000]);[/color]
    WriteLn[color=#000000];[/color]
    [color=#0000ff]end[/color][color=#000000];[/color]

    [color=#0000ff]var[/color]
    password [color=#000000]:[/color][color=#0000ff]string[/color][color=#000000][[/color][color=#000000]10[/color][color=#000000]];[/color]
    [color=#0000ff]BEGIN[/color]
    [color=#000000]writeln[/color][color=#000000]([/color][color=#a31515]'Digite sua senha (alfanumérica)'[/color][color=#000000]);[/color]
    password[color=#000000]:=[/color][color=#000000]ReadPWDln[/color][color=#000000]([/color][color=#000000]10[/color][color=#000000]);[/color]
    [color=#000000]writeln[/color][color=#000000]([/color][color=#a31515]'Senha digitada :'[/color][color=#000000],[/color]password[color=#000000]);[/color]
    ReadKey[color=#000000];[/color]
    [color=#0000ff]END[/color][color=#000000].[/color]
    [color=#0000ff]PROGRAM[/color] testePassword[color=#000000];[/color]

    No aguardo

    Abraços

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Boas, no meu compilador (pascalzim) ele não perceber algumas coisas nesse código como por exemplo o byte.

    Que compilador é que devo usar?

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Boas, no meu compilador (pascalzim) ele não perceber algumas coisas nesse código como por exemplo o byte.

    Que compilador é que devo usar?

    Olá, eu aqui não estou muito por dentro dos compiladores. Eu uso um NotePad++ com Free Pascal no Windows 7 64 bits. (é todo um processo)

    Tente o Free Pascal ou TP7.1.

    Se tiver usando um SO 64 bits é só falar que te passo como usar o TP7.1.

    Abraços

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico

  • Program testePassword;
    USES CRT;
    function readPWD(tamanho:integer):string;
    const
    ENTER = #13;
    BACKSPACE = #08;
    type
    T_Senha = Array [1..255] of Char;
    var
    caractere :char;
    cont :integer;
    senha_tmp :string;
    v_senha :T_Senha;
    i :integer;
    begin
    cont:= 0;
    repeat
    caractere:=readkey;
    case UpCase(caractere) of
    'A' .. 'Z',
    '0' .. '9' : begin
    if cont<tamanho then
    begin
    inc(cont);
    v_senha[cont]:= caractere;
    write('*');
    end;
    end;
    end;
    until(caractere = ENTER);
    senha_tmp:='';
    for i:= 1 to cont do
    senha_tmp:=senha_tmp+v_senha[i];
    readPWD:=senha_tmp;
    end;
    function ReadPWDln(tamanho:integer):string;
    begin
    ReadPWDln:=ReadPWD(tamanho);
    WriteLn;
    end;
    VAR
    password :string[10];
    cont_t:integer;
    BEGIN
    cont_t:=3;
    writeln('Digite a Password');
    password:=ReadPWDln(10);
    [COLOR="Red"][B] IF (password=ReadPWDln(10))
    THEN
    begin
    Textcolor(yellow);
    writeln('Password Correcta');
    writeln('Bem Vindo');
    break;
    end
    ELSE
    begin
    cont_t:=cont_t-1;
    IF (cont_t>0)
    THEN
    begin
    Textcolor(lightred);
    writeln('Password Incorrecta');
    writeln('Atenção! Tem mais ',cont_t,' tentativas');
    Textcolor(lightgreen);
    end
    ELSE
    begin
    Textcolor(Lightred);
    writeln('ERROR! Password Incorrecta, esgotou as suas tentativas!');
    Exit;
    end;
    end;
    ReadKey;
    END.[/B][/COLOR]

    Boas, estive a tentar meter os "*" com a ajuda do algoritmo que o EstilingueAtomico disponibilizou e consegui mais ou menos excepto na parte do fim que esta a vermelho não faz aquilo que eu quero se alguém conseguir ajudar agradeço...

    Editado por HelderT

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites


    Program testePassword;
    USES CRT;
    function readPWD(tamanho:integer):string;
    const
    ENTER = #13;
    BACKSPACE = #08;
    type
    T_Senha = Array [1..255] of Char;
    var
    caractere :char;
    cont :integer;
    senha_tmp :string;
    v_senha :T_Senha;
    i :integer;
    begin
    cont:= 0;
    repeat
    caractere:=readkey;
    case UpCase(caractere) of
    'A' .. 'Z',
    '0' .. '9' : begin
    if cont<tamanho then
    begin
    inc(cont);
    v_senha[cont]:= caractere;
    write('*');
    end;
    end;
    end;
    until(caractere = ENTER);
    senha_tmp:='';
    for i:= 1 to cont do
    senha_tmp:=senha_tmp+v_senha[i];
    readPWD:=senha_tmp;
    end;
    function ReadPWDln(tamanho:integer):string;
    begin
    ReadPWDln:=ReadPWD(tamanho);
    WriteLn;
    end;
    VAR
    password :string[10];
    cont_t:integer;
    BEGIN
    cont_t:=3;
    writeln('Digite a Password');
    password:=ReadPWDln(10);
    [COLOR="Red"][B] IF (password=ReadPWDln(10))
    THEN
    begin
    Textcolor(yellow);
    writeln('Password Correcta');
    writeln('Bem Vindo');
    break;
    end
    ELSE
    begin
    cont_t:=cont_t-1;
    IF (cont_t>0)
    THEN
    begin
    Textcolor(lightred);
    writeln('Password Incorrecta');
    writeln('Atenção! Tem mais ',cont_t,' tentativas');
    Textcolor(lightgreen);
    end
    ELSE
    begin
    Textcolor(Lightred);
    writeln('ERROR! Password Incorrecta, esgotou as suas tentativas!');
    Exit;
    end;
    end;
    ReadKey;
    END.[/B][/COLOR]

    Boas, estive a tentar meter os "*" com a ajuda do algoritmo que o EstilingueAtomico disponibilizou e consegui mais ou menos excepto na parte do fim que esta a vermelho não faz aquilo que eu quero se alguém conseguir ajudar agradeço...

    Olá,

    HelderT, abaixo seu código com algumas modificações.

    Mas antes:

    - Perceba que o código que forneci serve somente para ler do teclado a senha informada. É como se fosse um readln() adaptado. No caso ele recebe por parâmetro a quantidade máxima de caracteres e retorna nela mesma a senha informada.

    - O resto é o mesmo, você dar 3 tentativas para tentar acertar a senha...

    Em fim o código: (já com comentários no próprio código).

    [color=#0000ff]PROGRAM[/color] testePassword[color=#000000];[/color]
    [color=#0000ff]uses[/color]
    CRT[color=#000000];[/color]

    [color=#008000]{ *** ler um password [CRT_FCH] ***}[/color]
    [color=#0000ff]function[/color] [color=#000000]readPWD[/color][color=#000000]([/color]tamanho[color=#000000]:[/color][color=#0000ff]integer[/color][color=#000000]):[/color][color=#0000ff]string[/color][color=#000000];[/color]
    [color=#0000ff]const[/color]
    ENTER [color=#000000]=[/color] #[color=#000000]13[/color][color=#000000];[/color]
    BACKSPACE [color=#000000]=[/color] #[color=#000000]08[/color][color=#000000];[/color]
    [color=#0000ff]type[/color]
    t_Senha [color=#000000]=[/color] [color=#0000ff]array[/color] [color=#000000][[/color][color=#000000]1[/color][color=#000000].[/color][color=#000000].255[/color][color=#000000]][/color] [color=#0000ff]of[/color] [color=#0000ff]Char[/color][color=#000000];[/color]
    [color=#0000ff]var[/color]
    caractere [color=#000000]:[/color][color=#0000ff]char[/color][color=#000000];[/color]
    cont [color=#000000]:[/color][color=#0000ff]integer[/color][color=#000000];[/color]
    senha_tmp [color=#000000]:[/color][color=#0000ff]string[/color][color=#000000];[/color]
    v_senha [color=#000000]:[/color]t_Senha[color=#000000];[/color]
    i [color=#000000]:[/color][color=#0000ff]integer[/color][color=#000000];[/color]
    [color=#0000ff]begin[/color]
    cont[color=#000000]:=[/color] [color=#000000]0[/color][color=#000000];[/color]
    [color=#2b91af]repeat[/color]
    caractere[color=#000000]:=[/color]readkey[color=#000000];[/color]
    [color=#0000ff]case[/color] [color=#000000]UpCase[/color][color=#000000]([/color]caractere[color=#000000])[/color] [color=#0000ff]of[/color]
    [color=#a31515]'A'[/color] [color=#000000]..[/color] [color=#a31515]'Z'[/color][color=#000000],[/color]
    [color=#a31515]'0'[/color] [color=#000000]..[/color] [color=#a31515]'9'[/color] [color=#000000]:[/color][color=#0000ff]begin[/color]
    [color=#2b91af]if[/color] cont[color=#000000]<[/color]tamanho [color=#2b91af]then[/color]
    [color=#0000ff]begin[/color]
    [color=#000000]inc[/color][color=#000000]([/color]cont[color=#000000]);[/color]
    v_senha[color=#000000][[/color]cont[color=#000000]]:=[/color] caractere[color=#000000];[/color]
    [color=#000000]write[/color][color=#000000]([/color][color=#a31515]'*'[/color][color=#000000]);[/color]
    [color=#0000ff]end[/color][color=#000000];[/color]
    [color=#0000ff]end[/color][color=#000000];[/color]
    [color=#0000ff]end[/color][color=#000000];[/color]
    [color=#2b91af]until[/color][color=#000000]([/color]caractere [color=#000000]=[/color] ENTER[color=#000000]);[/color]
    senha_tmp[color=#000000]:=[/color][color=#a31515]''[/color][color=#000000];[/color]
    [color=#2b91af]for[/color] i[color=#000000]:=[/color] [color=#000000]1[/color] [color=#2b91af]to[/color] cont [color=#2b91af]do[/color]
    senha_tmp[color=#000000]:=[/color]senha_tmp[color=#000000]+[/color]v_senha[color=#000000][[/color]i[color=#000000]];[/color]
    readPWD[color=#000000]:=[/color]senha_tmp[color=#000000];[/color]
    [color=#0000ff]end[/color][color=#000000];[/color]

    [color=#008000]{ *** ler um password (e desce uma linha) [CRT_FCH] *** }[/color]
    [color=#0000ff]function[/color] [color=#000000]ReadPWDln[/color][color=#000000]([/color]tamanho[color=#000000]:[/color][color=#0000ff]integer[/color][color=#000000]):[/color][color=#0000ff]string[/color][color=#000000];[/color]
    [color=#0000ff]begin[/color]
    ReadPWDln[color=#000000]:=[/color][color=#000000]ReadPWD[/color][color=#000000]([/color]tamanho[color=#000000]);[/color]
    WriteLn[color=#000000];[/color]
    [color=#0000ff]end[/color][color=#000000];[/color]

    [color=#0000ff]VAR[/color]
    password [color=#000000]:[/color][color=#0000ff]string[/color][color=#000000][[/color][color=#000000]10[/color][color=#000000]];[/color] [color=#008000]//senha lida do usuário[/color]
    cont_t [color=#000000]:[/color][color=#0000ff]integer[/color][color=#000000];[/color] [color=#008000]//contador de tentativas ainda possíveis[/color]
    senhaSalva [color=#000000]:[/color][color=#0000ff]string[/color][color=#000000][[/color][color=#000000]10[/color][color=#000000]];[/color] [color=#008000]//senha que está armazenada[/color]
    LOGADO [color=#000000]:[/color][color=#0000ff]boolean[/color][color=#000000];[/color] [color=#008000]//flag de senha OK[/color]

    [color=#0000ff]BEGIN[/color]
    [color=#008000](*[/color]
    [color=#008000]Estrutrua do programa[/color]
    [color=#008000]- Configuração das cores iniciais[/color]
    [color=#008000]- Prepara a senha a ser conferida[/color]
    [color=#008000]- Dar três tentativas de passar a senha correta[/color]
    [color=#008000]*)[/color]
    [color=#000000]Textcolor[/color][color=#000000]([/color]White[color=#000000]);[/color]
    [color=#000000]TextBackGround[/color][color=#000000]([/color]Black[color=#000000]);[/color]
    ClrScr[color=#000000];[/color]

    senhaSalva[color=#000000]:=[/color][color=#a31515]'helder10e'[/color][color=#000000];[/color] [color=#008000]//senha definida.[/color]

    LOGADO[color=#000000]:=[/color][color=#0000ff]false[/color][color=#000000];[/color] [color=#008000]//marca como não logado com a senha[/color]
    cont_t[color=#000000]:=[/color][color=#000000]3[/color][color=#000000];[/color] [color=#008000]//número máximo de tentativas[/color]
    [color=#2b91af]while[/color] [color=#000000]([/color][color=#0000ff]not[/color] LOGADO[color=#000000])[/color] [color=#0000ff]and[/color] [color=#000000]([/color]cont_t[color=#000000]>=[/color][color=#000000]1[/color][color=#000000])[/color] [color=#2b91af]do[/color] [color=#008000]//não logado aindou e ainda tem tentativas[/color]
    [color=#0000ff]begin[/color]
    writeln[color=#000000];[/color]
    [color=#000000]writeln[/color][color=#000000]([/color][color=#a31515]'Digite a Password'[/color][color=#000000]);[/color]
    password[color=#000000]:=[/color][color=#000000]ReadPWDln[/color][color=#000000]([/color][color=#000000]10[/color][color=#000000]);[/color] [color=#008000]//ler a senha do usuario via procedimento da CRT_FCH[/color]
    [color=#2b91af]if[/color] [color=#000000]([/color]password[color=#000000]=[/color]senhaSalva[color=#000000])[/color] [color=#2b91af]then[/color] [color=#008000]//verifica se as senhas conferem[/color]
    [color=#0000ff]begin[/color]
    [color=#000000]Textcolor[/color][color=#000000]([/color]Yellow[color=#000000]);[/color]
    [color=#000000]writeln[/color][color=#000000]([/color][color=#a31515]'Password Correta'[/color][color=#000000]);[/color]
    [color=#000000]writeln[/color][color=#000000]([/color][color=#a31515]'Bem Vindo'[/color][color=#000000]);[/color]
    LOGADO[color=#000000]:=[/color][color=#0000ff]true[/color][color=#000000];[/color]
    [color=#000000]Textcolor[/color][color=#000000]([/color]White[color=#000000]);[/color]
    break[color=#000000];[/color] [color=#008000]//interrompe o while, já que já conseguiu!!![/color]
    [color=#0000ff]end[/color]
    [color=#2b91af]else[/color] [color=#008000]//caso a senha não confira[/color]
    [color=#0000ff]begin[/color]
    [color=#000000]dec[/color][color=#000000]([/color]cont_t[color=#000000]);[/color] [color=#008000]//diminui uma tentativa (o mesmo que cont_t:=cont_t-1;)[/color]
    [color=#2b91af]if[/color] [color=#000000]([/color]cont_t[color=#000000]>[/color][color=#000000]0[/color][color=#000000])[/color] [color=#2b91af]then[/color] [color=#008000]//verifica se ainda tem chances[/color]
    [color=#0000ff]begin[/color]
    [color=#000000]TextColor[/color][color=#000000]([/color]LightRed[color=#000000]);[/color]
    [color=#000000]writeln[/color][color=#000000]([/color][color=#a31515]'Password Incorrecta'[/color][color=#000000]);[/color]
    [color=#000000]writeln[/color][color=#000000]([/color][color=#a31515]'Atencao! Tem mais '[/color][color=#000000],[/color]cont_t[color=#000000],[/color][color=#a31515]' tentativas'[/color][color=#000000]);[/color]
    [color=#000000]Textcolor[/color][color=#000000]([/color]White[color=#000000]);[/color]
    [color=#0000ff]end[/color]
    [color=#2b91af]else[/color] [color=#008000]//caso não tenha mais chances[/color]
    [color=#0000ff]begin[/color]
    [color=#000000]TextColor[/color][color=#000000]([/color]Lightred[color=#000000]);[/color]
    [color=#000000]writeln[/color][color=#000000]([/color][color=#a31515]'ERROR! Password Incorreta, esgotou as suas tentativas!'[/color][color=#000000]);[/color]
    [color=#000000]Textcolor[/color][color=#000000]([/color]White[color=#000000]);[/color]
    [color=#008000]{Exit;}[/color] [color=#008000]//não precisa, já que é a última tentativa (o while já verifica)[/color]
    [color=#0000ff]end[/color][color=#000000];[/color]
    [color=#0000ff]end[/color][color=#000000];[/color]
    [color=#0000ff]end[/color][color=#000000];[/color]
    ReadKey[color=#000000];[/color]
    [color=#2b91af]if[/color] LOGADO [color=#2b91af]then[/color] [color=#008000]//verifica se esta logado[/color]
    [color=#0000ff]begin[/color]
    writeln[color=#000000];[/color]
    [color=#000000]writeln[/color][color=#000000]([/color][color=#a31515]'voce agora esta logado no sistema'[/color][color=#000000]);[/color]
    [color=#000000]writeln[/color][color=#000000]([/color][color=#a31515]'Seja bem vindo'[/color][color=#000000]);[/color]
    writeln[color=#000000];[/color]
    [color=#000000]writeln[/color][color=#000000]([/color][color=#a31515]'bla bla bla bla'[/color][color=#000000]);[/color]
    [color=#0000ff]end[/color]
    [color=#2b91af]else[/color]
    [color=#0000ff]begin[/color]
    writeln[color=#000000];[/color]
    writeln[color=#000000];[/color]
    writeln[color=#000000];[/color]
    [color=#000000]Textcolor[/color][color=#000000]([/color]Yellow[color=#000000]);[/color]
    [color=#000000]writeln[/color][color=#000000]([/color][color=#a31515]'voce ainda nao esta logado, tente novamente'[/color][color=#000000]);[/color]
    [color=#000000]writeln[/color][color=#000000]([/color][color=#a31515]'(oh! a senha é '[/color][color=#000000],[/color]senhaSalva[color=#000000],[/color][color=#a31515]')'[/color][color=#000000]);[/color]
    [color=#000000]Textcolor[/color][color=#000000]([/color]White[color=#000000]);[/color]
    [color=#0000ff]end[/color][color=#000000];[/color]
    ReadKey[color=#000000];[/color]
    [color=#0000ff]END[/color][color=#000000].[/color]

    PS: Peço que deixe o crédito dos procedimentos da CRT_FCH. Se caso o professor (se tiver um) perguntar sobre eles, você informa que foi fornecida pelo fórum ("no qual você não mediu esforços para tirar dúvidas e ajudar a desenvolver suas ideias"). Seja honesto com o professor (e consigo mesmo também), e de qualquer forma ele pode (vai) perceber algo estranho... O mais importante é você entender o funcionamento (ele vai cobrar isso). Se quiser até faça algumas adaptações e tudo, mas mesmo assim dê um crédito para os criadores... assim todo mundo sai bem na fita... :lol:

    No aguardo

    Abraços

    Editado por Simon Viegas
    Corrigindo fonte dos procedimentos (FHC por FCH - erro de digitação)...

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • PS: Peço que deixe o crédito dos procedimentos da CRT_FCH. Se caso o professor (se tiver um) perguntar sobre eles, você informa que foi fornecida pelo fórum ("no qual você não mediu esforços para tirar dúvidas e ajudar a desenvolver suas ideias"). Seja honesto com o professor (e consigo mesmo também), e de qualquer forma ele pode (vai) perceber algo estranho... O mais importante é você entender o funcionamento (ele vai cobrar isso). Se quiser até faça algumas adaptações e tudo, mas mesmo assim dê um crédito para os criadores... assim todo mundo sai bem na fita...

    Peço imensa desculpa não sabia =/

    Desde já quero agradecer a todos vós pela ajuda que me deram...

    Comprimentos,

    HelderT

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×