karel: guía de programación

25
Karel Guía de programación Eugenio Jacobo Hernández Valdelamar 2006

Upload: jacobo-hernandez-v

Post on 05-Aug-2015

299 views

Category:

Documents


0 download

DESCRIPTION

Karel: Guía de programaciónEugenio Jacobo Hernández Valdelamar2006

TRANSCRIPT

Page 1: Karel: guía de programación

Karel

Guía de programación

Eugenio Jacobo Hernández Valdelamar

2006

Page 2: Karel: guía de programación

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

Page 3: Karel: guía de programación

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.

Page 4: Karel: guía de programación

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

Page 5: Karel: guía de programación

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.

Page 6: Karel: guía de programación

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

Page 7: Karel: guía de programación

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

Page 8: Karel: guía de programación

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.

Page 9: Karel: guía de programación

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.

Page 10: Karel: guía de programación

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

Page 11: Karel: guía de programación

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

Page 12: Karel: guía de programación

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

Page 13: Karel: guía de programación

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.

Page 14: Karel: guía de programación

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.

Page 15: Karel: guía de programación

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

Page 16: Karel: guía de programación

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.

Page 17: Karel: guía de programación

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?

Page 18: Karel: guía de programación

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

Page 19: Karel: guía de programación

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.

Page 20: Karel: guía de programación

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?

Page 21: Karel: guía de programació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

Page 22: Karel: guía de programación

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.

Page 23: Karel: guía de programación

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

Page 24: Karel: guía de programación

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)

Page 25: Karel: guía de programación

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