|
@@ -1 +1,174 @@
|
1
|
|
-![](./titlepage.png)
|
|
1
|
+#Estructuras de repetición - Juego de palitos
|
|
2
|
+
|
|
3
|
+![main1.png](images/main1.png)
|
|
4
|
+![main2.png](images/main2.png)
|
|
5
|
+![main3.png](images/main3.png)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+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++.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+##Objetivos:
|
|
13
|
+
|
|
14
|
+1. Diseñar algoritmos para realizar una tarea.
|
|
15
|
+2. Traducir un algoritmo a pseudocódigo.
|
|
16
|
+3. Implementar un programa completo.
|
|
17
|
+4. Practicar el uso de estructuras de repetición.
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+Esta experiencia de laboratorio es una adaptación del ejercicio en: http://nifty.stanford.edu/2014/laaksonen-vihavainen-game-of-sticks/handout.html.
|
|
21
|
+
|
|
22
|
+##Pre-Lab:
|
|
23
|
+
|
|
24
|
+Antes de llegar al laboratorio debes haber:
|
|
25
|
+
|
|
26
|
+1. Repasado los conceptos básicos relacionados a estructuras de repetición.
|
|
27
|
+
|
|
28
|
+2. Estudiado los conceptos e instrucciones para la sesión de laboratorio.
|
|
29
|
+
|
|
30
|
+3. Tomado el quiz Pre-Lab que se encuentra en Moodle.
|
|
31
|
+
|
|
32
|
+---
|
|
33
|
+
|
|
34
|
+---
|
|
35
|
+
|
|
36
|
+## Palitos (Game of Sticks)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+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.
|
|
40
|
+
|
|
41
|
+Por ejemplo, un juego de palitos podría transcurrir así:
|
|
42
|
+
|
|
43
|
+* El juego comienza con 20 palitos en la mesa.
|
|
44
|
+* Aurora retira 3 palitos, faltan 17.
|
|
45
|
+* Bruno retira 2 palitos, faltan 15.
|
|
46
|
+* Aurora retira 1 palito, faltan 14.
|
|
47
|
+* Bruno retira 3 palitos, faltan 11.
|
|
48
|
+* Aurora retira 2 palitos, faltan 9.
|
|
49
|
+* Bruno retira 2 palitos, faltan 7.
|
|
50
|
+* Aurora retira 3 palitos, faltan 4.
|
|
51
|
+* Bruno retira 1 palito, faltan 3.
|
|
52
|
+* Aurora retira 2 palitos, falta 1.
|
|
53
|
+* Bruno tiene que retirar el único palito restante y pierde el juego.
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+---
|
|
57
|
+
|
|
58
|
+---
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+##Sesión de laboratorio:
|
|
62
|
+
|
|
63
|
+En la experiencia de laboratorio de hoy practicarás el uso de ciclos para implementar el juego de palitos.
|
|
64
|
+
|
|
65
|
+###Ejercicio 1: Diseñar el algoritmo
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+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:
|
|
69
|
+
|
|
70
|
+1. 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.
|
|
71
|
+
|
|
72
|
+2. 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.
|
|
73
|
+
|
|
74
|
+3. Al finalizar el juego, el programa debe informar quién fue el ganador.
|
|
75
|
+
|
|
76
|
+**Ejemplo:**
|
|
77
|
+
|
|
78
|
+```
|
|
79
|
+¡Bienvenidos al juego de palitos!
|
|
80
|
+
|
|
81
|
+Entre el numero inicial de palitos [10,100]: 150
|
|
82
|
+Entre el numero inicial de palitos [10,100]: 10
|
|
83
|
+
|
|
84
|
+Hay 10 palitos en la mesa.
|
|
85
|
+Jugador 1 - Entre el numero de palitos a retirar (1-3): 4
|
|
86
|
+Jugador 1 - Entre el numero de palitos a retirar (1-3): 3
|
|
87
|
+
|
|
88
|
+Hay 7 palitos en la mesa.
|
|
89
|
+Jugador 2 - Entre el numero de palitos a retirar (1-3): 3
|
|
90
|
+
|
|
91
|
+Hay 4 palitos en la mesa.
|
|
92
|
+Jugador 1 - Entre el numero de palitos a retirar (1-3): 2
|
|
93
|
+
|
|
94
|
+Hay 2 palitos en la mesa.
|
|
95
|
+Jugador 2 - Entre el numero de palitos a retirar (1-2): 3
|
|
96
|
+Jugador 2 - Entre el numero de palitos a retirar (1-2): 1
|
|
97
|
+
|
|
98
|
+Hay 1 palito en la mesa.
|
|
99
|
+Jugador 1 - Entre el numero de palitos a retirar (1-1): 1
|
|
100
|
+Perdiste Jugador 1 :-(
|
|
101
|
+```
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+###Ejercicio 2: Escribir el pseudocódigo
|
|
105
|
+
|
|
106
|
+#### Instrucciones:
|
|
107
|
+
|
|
108
|
+0. Cierra la computadora.
|
|
109
|
+
|
|
110
|
+1. Expresa el algoritmo en pseudocódigo.
|
|
111
|
+
|
|
112
|
+2. Ejecuta "a mano" el pseudocódigo para capturar errores lógicos. Trátalo con varios casos *extremos* y escribe sus resultados a mano. [Aquí](https://docs.google.com/a/upr.edu/presentation/d/1m-lXCUTKhCZC8vTnmtAXwfxQjIKkSVhTUrcywiZsdbQ/edit?usp=sharing) puedes ver un ejemplo de como hacer "hand-checking" a un algoritmo.
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+###Ejercicio 3: Implementar el código
|
|
116
|
+
|
|
117
|
+#### Instrucciones:
|
|
118
|
+
|
|
119
|
+0. Abre la computadora.
|
|
120
|
+
|
|
121
|
+1. Implementa el algoritmo en un programa en C++.
|
|
122
|
+
|
|
123
|
+**Ayudas:**
|
|
124
|
+
|
|
125
|
+1. Utiliza una variable de tipo `int` para llevar cuenta del jugador. Al final de cada turno, intercambia el jugador asi:
|
|
126
|
+
|
|
127
|
+ ```cpp
|
|
128
|
+ jugador = jugador == 1 ? 2 : 1;
|
|
129
|
+ ```
|
|
130
|
+
|
|
131
|
+ o enumera los jugadores como 0 y 1 y usa tu maestría en operador módulo:
|
|
132
|
+
|
|
133
|
+ ```cpp
|
|
134
|
+ jugador = (jugador + 1) % 2;
|
|
135
|
+ ```
|
|
136
|
+
|
|
137
|
+2. Piensa en los 3 mandamientos de las estructuras de repetición:
|
|
138
|
+
|
|
139
|
+ a. ¿Cuál es la variable de control del ciclo y que condición será la que mantiene el ciclo iterando?
|
|
140
|
+
|
|
141
|
+ b. ¿A que se inicializa la variable de control del ciclo?
|
|
142
|
+
|
|
143
|
+ c. ¿Cómo se modifica la variable de control del ciclo en cada iteración?
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+###Entregas:
|
|
147
|
+
|
|
148
|
+1. Utiliza "Entrega 1" en Moodle para entregar el pseudocódigo del juego de palitos.
|
|
149
|
+
|
|
150
|
+2. Utiliza "Entrega 2" en Moodle para entregar el papel donde tu y tu pareja hicieron la ejecución "a mano" del pseudocódigo del juego de palitos.
|
|
151
|
+
|
|
152
|
+3. 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, incluir el nombre de los programadores y documentar tu programa.
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+---
|
|
157
|
+
|
|
158
|
+---
|
|
159
|
+
|
|
160
|
+##Referencias
|
|
161
|
+
|
|
162
|
+[1] http://nifty.stanford.edu/2014/laaksonen-vihavainen-game-of-sticks/handout.html
|
|
163
|
+
|
|
164
|
+[2] http://www.gardengames.com/acatalog/509_Garden_Games_Giant_Pick-Up_Sticks.html
|
|
165
|
+
|
|
166
|
+[3] http://www.toves.org/books/java/ch05-while/
|
|
167
|
+
|
|
168
|
+[4] http://forum.codecall.net/topic/35425-pseudocode-tutorial-the-basics/page-2
|
|
169
|
+
|
|
170
|
+---
|
|
171
|
+
|
|
172
|
+---
|
|
173
|
+
|
|
174
|
+---
|