[ Foro de Pascal ]

Duda de novato

19-Jul-2010 21:36
rm659 Novato
2 Respuestas

 Hola. Este programa trata de pedir el nombre de usuario y contraseña con solo 3 intentos. Con cada intento fallido te advierte cuántos intentos te quedan y el máximo, hasta llegar al aviso de que se han agotado. Pero si aciertas, el objetivo del programa, es que te diga: "¡Bienvenido!" y se termine el programa.
 
Bien, pues el problema que tengo es que está todo perfecto menos una cosa: si aciertas, el bucle continúa hasta que falles 3 veces a propósito o fuerces el cierre del programa, o sea, te sigue pidiendo el usuario/contraseña (aún dándote la bienvenida). Estoy aún terminando de comprender esto de los bucles, ¿alguien podría ayudarme a saber que he hecho mal para poder corregir el ejercicio?

Aqui os dejo el programa:

program T6_6_BUCLES_Repeat_Ej_3_prueba;
       uses crt;

var
usuario, clave, intentoUsuario, intentoClave: string;
Intento, limiteIntentos: byte;
begin
 clrscr;
 usuario := 'yo';
 clave := 'acceso';
 limiteIntentos := 3;

writeln ('Ingresa tu nombre de usuario y contrase¤a.');

intento := 0;

repeat

 while intento < limiteIntentos do
  begin

  write ('Usuario: ');
  readln (intentoUsuario);
  write ('Contrase¤a: ');
  readln (intentoClave);

  if (intentoUsuario <> usuario)
    or (intentoClave <> clave) then
      begin
      writeln ('Datos incorrectos. Int‚ntalo de nuevo.');
      intento := intento + 1;
      writeln (' ' ,intento, '/' ,limiteIntentos);
      end;

  if (intentoUsuario = usuario) and (intentoClave = clave) then
    writeln ('­Bienvenido!')

   end;

until (intento >= limiteIntentos)
 or (intentoUsuario = usuario) and (intentoClave = clave);

  if (intento >= limiteIntentos) and (intentoUsuario <> usuario)
    or (intentoClave <> clave) then
      writeln ('Has superado el l¡mite de intentos');

readln();

end.


20-Jul-2010 12:25
Antonio P.G.

¡Hola!

Algunas cosillas:

- Sólo hace falta un bucle, en el que se pidan los datos y se opere "intento". Se saldrá con las condiciones.

- Si quieres expresar la frase "Hasta que el número de intentos sea mayor que el límite o hasta que el nombre sea igual al usuario y la clave sea igual al intento de clave" tienes que ponerlo así:

"until (intento > limiteintentos) or ((intentoUser = user) and (intentoclave = clave));"

- Un detalle: si los intentos máximos son 3, se saldrá del bucle cuando la variable "intento" tenga un valor de 4, no 3 ó más.

- Una mejora: la instrucción (que está bien construida)
"intento:= intento + 1;" es igual que la instrucción
"Inc(intento);". Ésta significa "incrementar (intento) en uno". También existe "Dec (intento)", que será para decrementar. Son más rápidas que las del programa de arriba.

Espero haber sido de ayuda.
¡Ciao!


20-Jul-2010 17:21
rm659 Novato

¡Oy! Es verdad. Ya he localizado el "doble bucle". Menudo fallo más tonto. ¡Gracias otra vez!

Un saludo!






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)