[ Foro de BASIC ]
Hola nuevamente a todos, esta vez quería compartir con la comunidad el código del ejercicio, así si alguien lo hizo podemos comparar ambos códigos y mejorarlo. Más que nada quería saber si hay alguna forma de mejorar el mío o si tiene algún error. Desde ya, muchas gracias!
Además, quería saber como darle un formato especial al código que pego en los foros, con una etiqueta o cómo.
Este es el código:
n = 1+INT(RAND*10)
INPUT "Estoy pensando en un número del 1 al 10. ¿Cuál es? ? ", x
FOR intento = 1 TO 2
IF (n=x) THEN
GOTO correcto
ELSE
IF intento = 1 THEN
INPUT "¡Prueba otra vez! ? ", x
ELSE
INPUT "¡Último intento! ? ", x
END IF
END IF
NEXT intento
IF (n=x) THEN
GOTO correcto
ELSE
PRINT "¡Perdiste! Estaba pensando en el número ";
PRINT n;
PRINT "."
END IF
END
correcto:
PRINT "¡Correcto! Estaba pensando en el número ";
PRINT n;
PRINT "."
Eso sólo se comportará bien si tienes dos intentos. Si le quieres dar 3 intentos, y no digamos si es un número del 1 al 1000 en 9 o 10 intentos, esa estructura se queda muy corta.
Prueba a replantearlo con un contador de intentos realizados. El resultado será mucho más versátil.
Hola Nacho, gracias nuevamente por contestar!!! ¿Me podes dar una pista de cómo hacer el contador de intentos (es decir, usar FOR o qué usar)? Más o menos tengo una idea de la instrucción WHILE, pero todavía estoy por el capítulo 10 (Funciones predefinidas). ¿Acaso hay que usar esa instrucción, en vez de FOR?
Un WHILE es la solución elegante, pero ya llegarás a ella.
La alternativa "fea pero eficaz" es un GOTO que te saque de la parte repetitiva si se ha acertado.
¡Listo! Gracias Nacho por la orientación. Se me ocurrió que así podría ser mejor el código:
# Se define un número aleatorio.
x = 1+INT(RAND*10)
PRINT "Estoy pensando en un número del 1 al 10. ¿Cuál es? (Tienes 3 intentos)"
FOR intentos = 3 TO 1 STEP -1
INPUT "", valoruser
# Si el valor ingresado es igual a x, el programa salta a <correcto>.
IF valoruser = x THEN
GOTO correcto
# Si es la última oportunidad el programa le avisa al usuario. Sino, sigue el bucle.
ELSE
IF intentos = 1 THEN GOTO incorrecto
PRINT "Incorrecto! Te quedan ";
PRINT intentos;
PRINT " intentos."
END IF
NEXT intentos
incorrecto:
PRINT "Lo lamento, se te acabaron las oportunidades. Estaba pensando en el número ";
PRINT x;
PRINT "."
END
correcto:
PRINT "Muy bien! Estaba pensando en el número ";
PRINT x;
PRINT "."
¡Muchas gracias por tu ayuda!
Sí, así está bien.
Se podría simplificar ligeramente eliminando el "IF intentos = 1 THEN GOTO incorrecto", y tanto GOTO pide a gritos que llegues al apartado del curso que habla de la orden WHILE. ;-)
(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.)