[ Foro de Pascal ]
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.
¡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!
¡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.)