class program { (* Funcion para girar a la derecha *) define turnright() { turnleft(); turnleft(); turnleft(); } (* Funcion permite recoger los 2 beepers *) define recoge_beepers() { (* si en lugar de recoger 2 queremos recoger 3, solo *) (* cambiamos el numero en la instruccion iterate *) iterate(2) { pickbeeper(); } } (* Funcion para recoger una fila, asumiendo que Karel esta en *) (* el primer monton y mirando en direccion hacia la fila *) define recoge_fila() { (* Utilizaremos 4 veces la funcion recoge_y_mueve(), para EVITAR *) (* CHOCAR si decimos utilizar una vez mas *) iterate(4) { recoge_beepers(); move(); } recoge_beepers(); (* aqui recogemos los ultimos beepers *) } (* Esta funcion permite dar media vuelta y bajar hasta la primera fila *) define regresa() { turnleft(); turnleft(); iterate(4) { move(); } } (* Funcion para pasar a la siguiente fila. NOTA: esta funcion necesita que *) (* Karel este en mirando hacia el sur y que no haya parede a la derecha *) define siguiente_fila() { turnleft(); move(); turnleft(); } program() { (* ¿Cuantas filas necesitamos recoger? 5. *) (* Usando nuestras funciones, cual es el procedimiento para lograr el *) (* objetivo? Recoger una fila, regresar y pasar a la siguiente fila *) (* Notar que si usamos el procedimiento anterior, al recoger la ultima *) (* fila, podriamos CHOCAR con la pared izquierda del rectangulo *) (* Entonces solo realizamos 4 repeticiones y al final recogemos la *) (* ultima fila *) iterate(4) { recoge_fila(); regresa(); siguiente_fila(); } recoge_fila(); turnoff(); } }