Ir ao conteúdo
  • Cadastre-se

Pascal/Delphi Pascal Zim - A cadeia deve ser fechada antes do fim do programa


Posts recomendados

Program Pzim ;
var user,digitado:String;
    tentativas:Integer;
  Begin
    user:='Thiago';
    tentativas:=0;
    Writeln('Usuario:');
    readln(digitado);

    while digitado <> user and tentativas <3 do
    Writeln ('Digite o Usuario:');
    tentativas := tentativas + 1 ;
    readln(digitado);
   
    If digitado=user then
    Writeln('Usuario Cadastrado!')
    else
    Writeln('Excesso Excedidas!");
  End.

 

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

@T.M.J    você não explicou e nem disse o que quer , mas testei seu código e ele está apresentando erro sintático na última linha , isso por que você colocou aspas dupla no lugar de aspas simples ,  e no while precisa de parênteses quando tem duas comparações , então seu código modificado ficaria assim  :

Program Pzim ;
uses CRT;
var
  user,digitado      : string ;
  tentativas, j,flag : integer;
begin
  user := 'Thiago';
  tentativas := 0;
  while (digitado <> user) and (tentativas < 3) do
  begin
    clrscr;
    write('Digite o Usuario ');
    tentativas := tentativas + 1;
    readln(digitado);
    flag:= 0;
    for j:=0 to length(digitado) do
      if (upcase(digitado[j]) <> upcase(user[j])) then flag := 1;
    if flag=0 then digitado := user;
  end;
  writeln;
  if digitado = user then 
  begin
    textcolor(yellow);
    writeln('Usuario => ',digitado,' <= Cadastrado . . . !');
  end
  else
  begin
    textcolor(white);
    writeln('Excesso Excedidas!');
  end;
  readkey;
end.

 

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

  • Membro VIP

Olá.

 

De fato! Sem explicar o que ocorre e/ou quais as dúvidas fica um pouco complicado :)

 

 

Vou tentar complementar.

 

1#

Para contextualizar, segue o código original REINDENTADO e COM CORREÇÕES DE SINTAXE, ou seja, apenas "arrumei" a estrutura visual (indentação) e fiz o código ficar compilável (sintaxe).

program Pzim;
var
  user,digitado :string;
  tentativas    :integer;
begin
user:='Thiago';
tentativas:=0;
writeln('Usuario:');
readln(digitado);
{while digitado <> user and tentativas <3 do} //faltou os "()"
while (digitado <> user) and (tentativas <3) do
  writeln ('Digite o Usuario:');
tentativas := tentativas + 1 ;
readln(digitado);
if digitado=user then
  writeln('Usuario Cadastrado!')
else
  //writeln('Excesso Excedidas!"); //é ' em vez de "
  writeln('Excesso Excedidas!');
end.

 

 

 

2#

Analisando visualmente (já que está "devidamente" indentado), dá para ver que está faltando um begin/end no while, pois o mesmo ele só se "vincula" a uma "coisa" (ou a um comando, ou a um begin/end), ou seja, se por acaso a condição do na expressão que está no while resultar em true (verdadeiro), vai começar a repetir, certo?... daí, como dentro do laço não está alterando as variáveis da condição, o laço de vai ficar repetindo indeterminadamente. Independente da lógica do problema em si, já dá para ver que tem algo errado no código...

 

 

 

3#

Pronto! apenas corrigindo essa "falha" da falta do begin/end, o código ficaria assim:

program Pzim;
var
  user,digitado :string;
  tentativas    :integer;
begin
user:='Thiago';
tentativas:=0;
writeln('Usuario:');
readln(digitado);
while (digitado <> user) and (tentativas <3) do
  begin //como o while está "amarrando" mais de uma linha, precisa de begin/end
  writeln ('Digite o Usuario: ');
  tentativas := tentativas + 1 ;
  readln(digitado);
  end;
if digitado=user then
  writeln('Usuario Cadastrado!')
else
  writeln('Excesso Excedidas!');
end.

 

 

4#

Outros pontos que podem ser revistos, por exemplo:

program Pzim;
var
  user,digitado :string;
  tentativas    :integer;
begin
user:='Thiago';
tentativas:=0;
{writeln('Usuario:');  //deixar a leitura apenas dentro do laço
readln(digitado);}
while (digitado <> user) and (tentativas < 3) do
  begin
  tentativas:=tentativas+1;
  {writeln('Digite o Usuario: ');} //tirar o "ln" para não descer a linha
  write  ('Digite o Usuario: ');
  readln(digitado);
  end;
writeln;
if digitado=user then
  writeln('Usuario Cadastrado!')
else
  {writeln('Excesso Excedidas!');}
  writeln('Excesso de tentativas!');
writeln;
write  ('Pressione qualquer tecla para continuar');
ReadKey;
end.

 

Esse mesmo código resumido:

program Pzim;
var
  user,digitado :string;
  tentativas    :integer;
begin
user:='Thiago';
tentativas:=0;
while (digitado <> user) and (tentativas < 3) do
  begin
  tentativas:=tentativas+1;
  write  ('Digite o Usuario: '); readln(digitado);
  end;
writeln;
if digitado=user then
  writeln('Usuario Cadastrado!')
else
  writeln('Excesso de tentativas!');
writeln;
write  ('Pressione qualquer tecla para continuar'); ReadKey;
end.

 

Um outro recurso que pode ficar interessante seria:

while (digitado <> user) and (tentativas < 3) do
  begin
  ClrScr; //apagar a linha a cada loop
  tentativas:=tentativas+1;
  write  ('Digite o Usuario: '); readln(digitado);
  end;

 

Por ai vai...

 

 

***

 

Outros pontos referente ao problema vão depender do que você precisa ou o enunciado do problema exige... em fim...

 

Dúvidas, críticas, sugestões...?

 

 

No aguardo.

  • Curtir 2
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...