[ Foro de BASIC ]

Adivinar un número del 1 al 10... hay otra forma de hacerlo?

29-Dec-2014 00:29
Alejandro Saucedo
5 Respuestas

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 "."




02-Jan-2015 11:19
Nacho Cabanes (+83)

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.


04-Jan-2015 16:19
Alejandro Saucedo

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?


07-Jan-2015 15:46
Nacho Cabanes (+83)

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.


11-Jan-2015 16:49
Alejandro Saucedo

¡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!


12-Jan-2015 01:06
Nacho Cabanes (+83)

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.)