lunes, 9 de enero de 2012

KAREL :)

¿QUÉ ES KAREL?

Karel es una aplicación de software muy simple que usualmente se utiliza a nivel educativo como una introducción a la programación, pues el lenguaje utilizado para programar es bastante sencillo y proporciona al alumno una noción de lo que es diseñar un programa con instrucciones que se pueden aplicar en distintas situaciones.


Karel es un simulador de robot representado como una flecha azul, y se desplaza por su "Mundo" compuesto de "calles" y "avenidas" (siendo estas últimas el punto de cruce entre las calles). De hecho, visto desde un punto de vista más sencillo, se podría asemejar el mundo de Karel con una cuadrícula de un juego infantil llamado "Timbiriche", y al igual que en este juego, en el mundo de Karel se pueden trazar líneas para delimitar una zona en la que Karel pueda moverse, y a esas líneas se les llama "paredes".

COMANDOS DE KAREL

En la interfaz "Java", Karel tiene únicamente seis comandos básicos: move (para avanzar), turnleft (girar a la izquierda), pickbeeper (recoger zumbador), putbeeper (dejar zumbador) y turnoff (apagar). Ya que Karel no puede girar a la derecha, se tiene que girar tres veces a la izquierda para cambiar en esa dirección. Mediante el uso de estos, el robot se mueve e interactúa con su entorno.
Además tiene otras instrucciones que introducen el elemento de variabilidad: If (si, posibilidad), else (de otro modo, sino) y while (mientras). También existe el comando iterate, que señala la repetición de una acción, y define, que se usa para crear una nueva instrucción. Si una instrucción es errónea, Karel marca el error con una pequeña ventana de aviso.
Para poder comprender cómo se usan las instrucciones condicionales primero tenemos que conocer cuáles son las condiciones, mismas que se presentan a continuación escritas exactamente como se usan en el programador.

Lista de Condicionales

  1. frontIsClear es verdadero si el frente de Karel esta libre de pared 
  2. frontIsBlocked es verdadero si existe una pared frente a Karel 
  3. leftIsClear es verdadero si en el lado izquierdo de Karel no existe una pared 
  4. leftIsBlocked es verdadero si en el lado izquierdo de Karel existe una pared 
  5. rightIsClear es verdadero si en el lado derecho de Karel no existe una pared 
  6. rightIsBlocked es verdadera si en el lado derecho de Karel existe una pared 
  7. nextToABeeper es verdadero si existe un beeper donde Karel esta parado 
  8. notNextToABeeper es verdadero si no existe un beeper donde Karel esta parado 
  9. facingNorth es verdadero si Karel esta volteando hacia al Norte 
  10. notFacingNorth es verdadero si Karel no esta volteando hacia al Norte 
  11. facingSouth es verdadero si Karel esta volteando hacia el Sur 
  12. notFacingSouth es verdadero si Karel no esta volteando hacia el Sur 
  13. facingEast es verdadero si Karel esta volteando hacia el Este 
  14. notFacingEast es verdadero si Karel no esta volteando hacia el Este 
  15. facingWest es verdadero si Karel esta volteando hacia al Oeste 
  16. notFacingWest es verdadero si Karel no esta volteando hacia al Oeste 
  17. anyBeepersInBeeperBag es verdadero si existe algún beeper en a beeper_bag 
  18. noBeepersInBeeperBag es verdadero si no existes algún beepers en a beeper_bag
SINTAXIS

La sintaxis de Karel es muy simple, pero debe observarse que las instrucciones sean escritas correctamente, de lo contrario el robot no podrá ejecutarlas.


Las 6 instrucciones básicas se escriben siempre con dos paréntesis y un punto y coma al final: move( );.
La función iterate, en cambio, dentro del paréntesis debe llevar el número de veces que deseamos que se repita una acción, misma que se escribirá entre llaves inmediatamente después del paréntesis:  iterate(5)[move( );]. 


Para usar define se escribe junto a la función el nombre del nuevo comando y entre paréntesis se indica si existe una variable de repetición. Luego se describe en qué consistirá el nuevo comando escribiendo entre llaves un conjunto de instrucciones: define tomar(n)[pickbeeper( ); move( ); iterate (3)[turnleft( );]]
En este ejemplo, se ha definido que el comando "tomar" es igual a recoger un zumbador, avanzar y girar tres veces a la izquierda, así que cada vez que se escriba "tomar", Karel ejecutará este conjunto de acciones. 


En el caso de los condicionales, todos tienen básicamente la misma sintaxis. Se escribe la instrucción condicional (if, else, while) seguida por uno de los condicionales de la lista escrito entre paréntesis y después entre llaves se escribe la acción a ejecutar: If (frontIsClear) [move( ); turnleft( );]
Si el condicional no es válido, entonces Karel se saltará a la instrucción siguiente.


Hay que señalar que las instrucciones pueden escribirse en dos espacios: 

  • Class Program: Únicamente aquí puede usarse el comando "define", porque aquí se crean los nuevos comandos que se ejecutarán en Program. Class Program es un espacio para establecer una instrucción única mediante la cual se pueda realizar cada movimiento que deseamos sin necesidad de escribir paso por paso cada instrucción.
  • Program: Aquí se pueden poner las instrucciones directamente, una por una, usando condicionales y demás, o se puede sustituir todo eso por un comando previamente escrito en Class Program en el que se resuman todas las acciones de Karel.
Usando este sencillo programa se pueden aprender las bases de la programación, y Karel suele ser una base sólida para aprender programación a un nivel más complejo.  :)