Una de las ventajas de utilizar programas de computadoras es que podemos realizar tareas repetitivas fácilmente. Los ciclos como for
, while
, y do-while
son estructuras de control que nos permiten repetir un conjunto de instrucciones. A estas estructuras también se les llama estructuras de repetición. En la experiencia de laboratorio de hoy, practicarás el uso de ciclos para implementar el juego de palitos en C++. Esta experiencia de laboratorio es una adaptación del ejercicio en: http://nifty.stanford.edu/2014/laaksonen-vihavainen-game-of-sticks/handout.html.
Antes de llegar al laboratorio debes haber:
Repasado los conceptos básicos relacionados a estructuras de repetición.
Estudiado los conceptos e instrucciones para la sesión de laboratorio.
Tomado el quiz Pre-Lab, disponible en Moodle.
El juego de los palitos se juega entre dos contrincantes. Al principio del juego hay un montículo de palitos en la mesa. En cada turno, cada jugador retira de 1 a 3 palitos de la mesa. El jugador que recoge el último palito pierde el juego.
Por ejemplo, un juego de palitos podría transcurrir así:
En la experiencia de laboratorio de hoy practicarás el uso de ciclos para implementar el juego de palitos.
Diseña un algoritmo para que dos personas puedan jugar el juego de los palitos en la computadora. El algoritmo debe respetar las siguientes restricciones:
Al principio debe pedir el número de palitos que habrá en la mesa. El rango de números aceptados será de [10,100]. Si el usuario entra un número fuera de ese rango, el programa continuará preguntando.
En cada jugada, se permitirá que el jugador retire de 1 a 3 palitos (sin exceder el número de palitos disponibles en la mesa). Si el usuario entra un número fuera de tal rango, el programa continuará preguntando.
Al finalizar el juego, el programa debe informar quién fue el ganador.
Ejemplo:
¡Bienvenidos al juego de palitos!
Entre el numero inicial de palitos [10,100]: 150
Entre el numero inicial de palitos [10,100]: 10
Hay 10 palitos en la mesa.
Jugador 1 - Entre el numero de palitos a retirar (1-3): 4
Jugador 1 - Entre el numero de palitos a retirar (1-3): 3
Hay 7 palitos en la mesa.
Jugador 2 - Entre el numero de palitos a retirar (1-3): 3
Hay 4 palitos en la mesa.
Jugador 1 - Entre el numero de palitos a retirar (1-3): 2
Hay 2 palitos en la mesa.
Jugador 2 - Entre el numero de palitos a retirar (1-2): 3
Jugador 2 - Entre el numero de palitos a retirar (1-2): 1
Hay 1 palito en la mesa.
Jugador 1 - Entre el numero de palitos a retirar (1-1): 1
Perdiste Jugador 1 :-(
Cierra la computadora.
Expresa el algoritmo en pseudocódigo.
Ejecuta a mano el pseudocódigo para capturar errores lógicos. Trátalo con varios casos extremos y escribe sus resultados a mano. Aquí puedes ver un ejemplo de como hacer “hand-checking” a un algoritmo.
Abre la computadora.
Implementa el algoritmo en un programa en C++.
Ayudas:
Utiliza una variable de tipo int
para llevar cuenta del jugador. Al final de cada turno, intercambia el jugador así:
jugador = jugador == 1 ? 2 : 1;
o enumera los jugadores como 0 y 1 y usa tu maestría en operador módulo:
jugador = (jugador + 1) % 2;
Piensa en los 3 mandamientos de las estructuras de repetición:
a. ¿Cuál es la variable de control del ciclo y qué condición será la que mantiene el ciclo iterando?
b. ¿A qué se inicializa la variable de control del ciclo?
c. ¿Cómo se modifica la variable de control del ciclo en cada iteración?
Utiliza “Entrega 1” en Moodle para entregar el pseudocódigo del juego de palitos.
Utiliza “Entrega 2” en Moodle para entregar el papel donde tú y tu pareja hicieron la ejecución a mano del pseudocódigo del juego de palitos.
Utiliza “Entrega 3” en Moodle para entregar un archivo .cpp
con el programa en C++ para jugar palitos. El programa no debe tener errores de compilación, debe estar debidamente documentado y funcionar como se supone. Recuerda utilizar buenas prácticas de programación, incluye el nombre de los programadores y documenta tu programa.
[1] http://nifty.stanford.edu/2014/laaksonen-vihavainen-game-of-sticks/handout.html
[2] http://www.gardengames.com/acatalog/509_Garden_Games_Giant_Pick-Up_Sticks.html
[3] http://www.toves.org/books/java/ch05-while/
[4] http://forum.codecall.net/topic/35425-pseudocode-tutorial-the-basics/page-2