Download - Karel: guía de programación
Karel
Guía de programación
Eugenio Jacobo Hernández Valdelamar
2006
1.Las instrucciones básicas de Karel
• Karel realiza 5 operaciones mecánicas básicas:– Avanza (da un paso al frente).
– Vuelta a la izquierda y a la derecha (de 90º).
– Recoge un objeto del suelo (un trompo) y lo almacena.
– Toma un objeto de su almacén y lo deja en el suelo.
Ejemplo:
INICIO-DE-PROGRAMA AAAAA
INICIA-ACTIVIDAD
AVANZA AVANZA AVANZA AVANZA AVANZA
RECOGE-OBJETO
GIRA-IZQUIERDA GIRA-IZQUIERDA
AVANZA AVANZA AVANZA AVANZA
DEJA-OBJETO AVANZA
FIN-ACTIVIDAD
FIN-PROGRAMA
1.Las instrucciones básicas de Karel• Adicionalmente Karel cuenta con varios sensores, que le
permiten determinar la existencia de barreras y objetos:– Algo enfrente.– Algo a la izquierda. Algo a la derecha. – Algo atrás.– Algún objeto.
• Adicionalmente cuenta con otro sensor que le permite saber si tiene objetos (trompos) en su almacén interno.– Algo en bolsa.
• Finalmente cuenta con otro sensor que funciona como brújula y le permite saber en que dirección se mueve.
Gracias a estos sensores, es posible indicarle a Karel que realice determinadas acciones cuando sus sensores detecten una cierta condición como por ejemplo la existencia de una barrera o de un objeto.
1.Las instrucciones básicas de Karel• Ejemplo: Muévete una cierta distancia, si encuentras allí un objeto
recógelo, si no gira a la derecha y avanza dos posiciones y recógelo en ese punto.
INICIO-DE-PROGRAMA AAAADGAAR
INICIA-ACTIVIDAD
AVANZA AVANZA AVANZA AVANZA AVANZA
SI ALGUN-OBJETO ENTONCES
RECOJE-OBJETO SINO
INICIO
GIRA-DERECHA AVANZA AVANZA
RECOGE-OBJETO
FIN
FIN-ACTIVIDAD
FIN-PROGRAMA
Decisión Lógica
1.Las instrucciones básicas de Karel
• Existen dos formas de indicar a Karel, el uso de sus sensores, para de allí tomar diferentes cursos de acción:
– Si se cumple una condición entonces curso de acción 1 sino curso de acción 2.
– Mientras se cumple una condición haz curso de acción.
• En el ejemplo anterior se utilizó la primera forma, utilizaremos ahora la segunda en el ejemplo siguiente, en el que indicaremos al robot que se mueva a lo largo de una barrera para luego dar vuelta a la derecha y seguir hasta encontrar un objeto.
1.Las instrucciones básicas de Karel
INICIO-DEL-PROGRAMA GIRA-RECOJE
INICIA-ACTIVIDAD
MIENTRAS ALGO-DERECHA AVANZA
GIRA-DERECHA
MIENTRAS NINGUN-OBJETO AVANZA
RECOGE OBJETO
FIN-ACTIVIDAD
FIN-PROGRAMA
Karel. Estructura de los programas
• Al preparar los programas anteriores, seguramente te has dado cuenta que contienen algunas palabras cuya función no ha sido explicada.
• Ello se debe a que el lenguaje con el que nos comunicamos con Karel, como cualquier otro lenguaje tiene su propia gramática.
• La estructura básica de un programa son los bloques.• Un bloque puede ser una sola instrucción ,o bien
tener alguna de las formas siguientes:– INICO instrucción instrucción …. instrucción FIN – INICIO bloque bloque … bloque FIN
Karel. Estructura de los programas
• Un programa completo le indica a Karel la sucesión de instrucciones que debe realizar y tiene la estructura siguiente:
INICIO-DEL-PROGRAMA nombre-programaINICIA-ACTIVIDADbloque bloque bloque … bloqueFIN-ACTIVIDADFIN-PROGRAMA
• El numero mínimo de bloques en un programa es 1.• La razón de los términos INICIO-DE-PROGRAMA, de INICIA-
ACTIVIDAD, FIN-ACTIVIDAD Y FIN-PROGRAMA serán explicadas después.
• Por ahora debemos verlas como una especie de mensajes de saludo y despedida, como las que usamos al comunicarnos entre los seres humanos.
Karel. Estructura de los programas
• Existen varios tipos de instrucciones:– Las básicas: AVANZA GIRA-IZQUIERDA GIRA-DERECHA RECOJE-
OBJETO DEJA-OBJETO PIDE-OBJETO
– Las condicionales: • SI condición ENTONCES bloque SINO bloque
– Los ciclos:• MIENTRAS condición HAZ bloque
• Las condiciones posibles son– ALGO-ENFRENTE NADA-ENFRENTE ALGO-ATRÁS NADA-ATRÁS ALGO-
IZQUIERDA NADA-IZQUIERDA ALGO-DERECHA NADA-DERECHA ALGUN-OBJETO NINGUN-OBJETO ALGO-EN-BOLSA NADA-EN-BOLSA HACIA-NORTE HACIA-SUR HACIA-ESTE HACIA-OESTE
• Veamos ahora un ejemplo, en el que utilizaremos estas estructuras.
Karel. Estructura de los programas• En este programa, Karel debe rodear un rectángulo de tamaño
desconocido y detenerse al llegar al punto de salida, una forma sencilla de hacerlo es la siguiente:
INICIO-DEL-PROGRAMA RODEA-1
INICIA-ACTIVIDAD
AVANZA
MIENTRAS ALGO-DERECHA HAZ AVANZA
GIRA-DERECHA AVANZAMIENTRAS ALGO-DERECHA HAZ AVANZAGIRA-DERECHA AVANZAMIENTRAS ALGO-DERECHA HAZ AVANZAGIRA-DERECHA AVANZAMIENTRAS ALGO-DERECHA HAZ AVANZAGIRA-DERECHA AVANZAFIN-ACTIVIDAD
FIN-PROGRAMA
Karel. Estructura de los programas
El mismo programa se puede escribir de otras maneras, más sencillas y con menos instrucciones, una de ellas es la siguiente:
INICIO-DEL-PROGRAMA RODEA-2
INICIA-ACTIVIDAD
PIDE-OBJETO DEJA-OBJETO AVANZA
MIENTRAS NINGUN-OBJETO
SI ALGO-DERECHA ENTONCES AVANZA
SINO
INICIO GIRA-DERECHA AVANZA FIN
RECOJE-OBJETO
FIN-ACTIVIDAD
FIN-PROGRAMA
Karel. Estructura de los programasUna tercera forma de hacerlo, nos permitirá introducir una facilidad adicional del lenguaje de Karel:
INICIO-DEL-PROGRAMA RODEA-3
APRENDE-QUE RECORRE-LADO ES
INICIO
MIENTRAS ALGO-DERECHA HAZ AVANZA
GIRA-DERECHA AVANZA
FIN
INICIA-ACTIVIDAD
AVANZA RECORRE-LADO RECORRE-LADO
RECORRE-LADO RECORRE-LADO
FIN-ACTIVIDAD
FIN-PROGRAMA
Karel. La primera tarea complicada
• Imaginemos ahora que Karel debe rodear el mismo rectángulo del ejemplo anterior, con la diferencia de que ahora además, debe recoger todos los objetos que encuentre en su camino.
• El problema es mas complejo y solo puede ser resuelto utilizando una barrera de tope que pare al robot, ya que ahora Karel no puede marcar su punto de regreso, pues este se confundiría con cualquiera de los objetos a recoger.
• La estrategia a seguir es la siguiente:
Trabajar hasta encontrar el tope, en cada paso detectar si no hemos llegado al final de la barrera y en tal caso, si existe un objeto levantarlo y luego avanzar, si no, simplemente avanzar.
Cuando el robot llega al final de la barrera, debe dar vuelta y preguntar si hay un objeto para levantarlo y moverse, en caso contrario solo girar y avanzar.
Karel. La primera tarea complicada
INICIO-DEL-PROGRAMA RODEA-RECTANGLINICIA-EJECUCIÓNAVANZAMIENTRAS NADA-ENFRENTE HAZSI ALGUN-OBJETO ENTONCESSI ALGO-DERECHA ENTONCESINICIO RECOGE-OBJETO AVANZA FINSINOINICIORECOGE-OBJETO GIRA-DERECHA AVANZAFINSINOSI ALGO-DERECHA ENTONCESAVANZA SINOINICIO GIRA-DEREDCHA AVANZA FINGIRA-DERECHAFIN-EJECUCIONFIN-PROGRAMA
El programa incluye un Loop y tres decisiones lógicas anidadas adentro de él.
Karel. La primera tarea complicada
SINOINICIO GIRA-DEREDCHA AVANZA FIN
SI ALGUN-OBJETO ENTONCES
SI ALGO-DERECHA ENTONCES
INICIO RECOGE-OBJETO AVANZA FIN
SINOINICIORECOGE-OBJETOGIRA-DERECHA AVANZAFIN
SINOSI ALGO-DERECHA ENTONCES
AVANZA
Ello se debe a que a cada paso que da el robot, pregunta si hay un objeto para recogerlo, y si se ha terminado la barrera para dar vuelta, antes de dar el siguiente.
Si No
Si No
SiNo
Karel rodeando una figura no rectangular
INICIO-DE-PROGRAMA RODEA-FIGURAINICIA-ACTIVIDADPIDE-OBJETO DEJA-OBJETO AVANZAMIENTRAS NINGUN-OBJETO HAZSI ALGO-ENFRENTE ENTONCES GIRA-IZQUIERDASINOSI NADA-DERECHA ENTONCESINICIO GIRA-DERECHA AVANZA FINSINOAVANZARECOJE-OBJETOGIRA-DERECHAFIN-EJECUCIÓNFIN-PROGRAMA
Si utilizamos el programa para rodear el rectángulo, el robot no lo podrá lograr, estrellándose al encontrar la barrera inesperada, por lo que es necesario modificarlo para que siga el perfil de la figura.
Karel rodeando una isla
Si bien el programa usado en el ejemplo anterior permite rodear los bordes de una figura mas compleja que un rectángulo, no funciona con figuras mas complejas, como la de esta figura.
Un primer problema consiste en que la isla esta muy cerca de las barreras limite del escenario, pero falla también cuando los espacios por los que debe pasar son estrechos. (de un solo cuadro).
¿Podrías tu modificar el programa anterior para lograr que el robot logre dar la vuelta completa a esta isla y a cualquier otra que pudiera existir?
Karel rodeando una isla
A continuación se despliega un programa que realiza esta función
INICIO-DE-PROGRAMA RODEA-ISLAINICIA-EJECUCIONINICIOPIDE-OBJETO DEJA-OBJETO AVANZAMIENTRAS NINGUN-OBJETO HAZ SI ALGO-ENFRENTE ENTONCESSI NADA-DERECHA ENTONCESINICIO GIRA-DERECHA AVANZA FIN SINO GIRA-IZQUIERDASINO SI NADA-DERECHA ENTONCESINICIO GIRA-DERECHA AVANZA FINSINO AVANZA MIENTRAS NO-HACIA-NORTE HAZGIRA DERECHARECOGE-OBJETOFINFIN-EJECUCIONFIN-PROGRAMA
El programa indica al robot dejar una marca que luego servirá como punto de llegada.
En cada paso el robot pregunta si tiene algo enfrente, cuando este es el caso, intenta dar vuelta a la derecha y si no puede da vuelta a la izquierda, después da un paso al frente.
Esta lógica es aplicada en cada paso que da el robot y como puede comprobarse funciona con cualquier isla que se le ponga enfrente, por lo que la solución es de carácter general
Dos nuevas actividades para Karel
Construye dos nuevos programas para Karel, el primero debe permitirle rodear la figura, entrando y saliendo del laberinto para finalmente regresar al punto de partida.
El segundo debe permitirle entrar hasta el fondo del laberinto y sacar el ‘tesoro’ que se encuentra al fondo del mismo, colocándolo en la entrada del laberinto.
Karel a la búsqueda de un tesoro
Imagínate que Karel debe llegar a la puerta del laberinto que aparece en la figura y ponerse a buscar un tesoro que esta oculto en su interior.
Una vez que lo encuentre, Karel debe regresar a la salida del laberinto y trasladarse a su posición inicial, ahora tu debes hacer el programa y probar que funcione, no importando el lugar en el que esta el tesoro.
Solución: Utiliza el programa de Karel para rodear una isla y observa que con él puede hallar el tesoro, pero ya no puede regresar, ¿Qué falta por hacer?
Cuando termines el programa y pruebes que funciona, observa que pasa cuando no hay tesoro, ¿Cómo enfrentar esta situación?
Karel saliendo del corral
En este nuevo problema Karel debe encontrar la puerta del corral, donde sea que se encuentre, y salir por ella.
En una siguiente versión, Karel debe antes recoger todos los objetos que existen dentro del corral, luego encontrar la puerta y finalmente colocarlos afuera del corral.
Para simplificar este segundo problema supondremos que la puerta esta situada siempre en el extremo derecho del lado norte del corral
Karel sacando objetos del corral
En la figura superior se observa a Karel en el corral, en el que aparecen nueve trompos. Al final los trompos quedan alineados fuera del corral en su lado norte.
El programa que proponemos tiene tres partes. En la primera Karel se mueve a la esquina inferior izquierda. En la segunda Karel recorre cada una de las hileras recogiendo los trompos que encuentra, hasta terminar la ultima hilera, en la que el robot busca la puerta para salir.
En la tercera parte Karel, sale con todos los trompos en su mochila y los de posita en una hilera pegada al lado norte del corral
Un posible programa aparece en la pagina siguiente con algunos comentarios que facilitan la interpretación del programa.
Karel sacando objetos del corral
INICIO-DE-PROGRAMA SACA-OBJETOS DE CORRALINICIA-EJECUCIONENCIENDETE MIENTRAS NADA-ENFRENTE HAZ AVANZAGIRA-DERCHAMIENTRAS NADA-ENFRENTE HAZ AVANZAGIRA-DERECHA GIRA-DERECHA MIENTRAS NADA-IZQUIERDA HAZINICIOMIENTRAS NADA-ENFRENTE HAZ SI ALGUN-OBJETO ENTONCESINICIO RECOGE-OBJETO AVANZA FINSINO AVANZASI ALGUN-OBJETO ENTONCES INICIO RECOGE-OBJETO GIRA-DERECHAGIRA-DERECHAFINSINO INICIO GIRA-DERECHA GIRA-DERECHA FINMIENTRAS NADA ENFRENTE HAZ AVANZA GIRA-DERECHA AVANZA GIRA-DERECHAFIN
SACA-OBJETOS-DEL-CORRAL:
Trasládate a la esquina inferior izquierda del corral e inicia tu recorrido.
Mientras halla mas hileras de objetos recórrelas. En cada una de ellas avanza hasta el final, recogiendo los objetos que encuentres, luego regrésate y pasa a la siguiente hilera
Cuando llegues a la ultima hilera, antes de la pared norte del corral, haz lo mismo que en las hileras anteriores, pero ahora buscando la salida del corral a tu izquierda
Karel sacando objetos del corral
MIENTRAS ALGO-IZQUIERDA HAZSI ALGUN-OBJETO ENTONCESINICIO RECOGE-OBJETO AVANZA FINSINO AVANZASI ALGUN-OBJETO ENTONCES INICIORECOGE-OBJETO GIRA-IZQUIERDA AVANZAFINSINOINICIO GIRA-IZQUIERDA AVANZA FINAVANZA GIRA IZQUIERDA AVANZAMIENTRAS ALGO-IZQUIERDA HAZAVANZAGIRA-IZQUIERDA GIRA-IZQUIERDA AVANZA MIENTRAS ALGO-EN-BOLSA HAZINICIO DEJA-OBJETO AVANZA FINFIN-EJECUCÍONFIN-PROGRAMA
Cuando llegues a la ultima hilera, antes de la pared norte del corral, haz lo mismo que en las hileras anteriores, pero ahora buscando la salida del corral a tu izquierda
Al encontrar la salida muévete a través de ella y una vez afuera gira a la izquierda.
Ahora muévete por afuera, pegado a la pared norte del corral, hasta llegar al final , luego da media vuelta y regresa, dejando un objeto por cada paso que des. (un objeto por cuadro)
Karel sacando objetos del corralEl programa que aparece a continuación tiene el mismo objetivo del ya descrito, excepto que en esta nueva versión se hace uso de los llamados procedimientos, los cuales facilitan la comprensión de programas con mayores niveles de complejidad, como es el caso de este
INICIA-ACTIVIDAD