Bienvenido al capítulo de Instrucciones básicas de Karel. En este capítulo, vamos a escribir nuestro primer programa de karel. Incluí las descripciones para Java y Pascal.

Instrucciones básicas

Karel conoce 5 instrucciones (existe una sexta pero esa la veremos más adelante) y básicamente con esas instrucciones es posible hacer cualquier manipulación en el mundo de karel. Estas son las 5 instrucciones básicas de karel.

  • avanza / move: Karel se moverá una casilla en dirección del punto cardinal que esté orientado. Si karel tiene un muro chocará y tu programa fallará.
  • gira-izquierda / turnleft: Karel girará 90° a su izquierda, esto no implica que karel se cambie de casilla, si no que solo estará orientado hacia otro punto cardinal.
  • coge-zumbador / pickbeeper:Karel tomará un zumbador de la casilla donde se encuentra parado y lo pondrá en su mochila. Si la casilla donde está situado karel no tiene zumbadores, causará un problema y karel detendrá su ejecución de forma erronea.
  • deja-zumbador / putbeeper: Karel pondrá un zumbador de su mochila y lo pondrá en la casilla que está situado. Si no tiene zumbadores de su mochila antes de ponerlo, causará un problema y se detendrá con un error.
  • apagate / turnoff: Karel se detendrá sin importar si existen instrucciones pendientes por ejecutar. Es una instrucción muy poderosa, debe ser utilizada con cuidado. Si karel no se apaga, terminará en un estado de error.

Cabeceras principales

Los lenguajes de programación suelen requerir algunas instrucciones para indicarle a la computadora que ahí inicia el programa. Estas cabeceras delimitan el inicio y el final del programa. Entre estas 2 líneas de código se añade el cuerpo de nuestro programa. Si no están presentes, la computadora no será capaz de entender nuestro programa.

Pascal:

    iniciar-programa
    finalizar-programa

Java:

    class program {
    }

Espacio para definición de funciones

Es posible crear funciones nuevas, no entraré mucho en detalles, solo agregaré un ejemplo de una función que gira a la derecha.

Pascal

iniciar-programa
  define-nueva-instruccion gira-derecha como inicio
    repetir 3 veces inicio
      gira-izquierda;
    fin
  fin
finalizar-programa

Java:

class program {
  void turnright(){
    iterate(3){
      turnleft();
    }
  }
}

En este espacio puedes escribir la definición de todas tus funciones nuevas, lo veremos más detalladamente adelante.

Función principal

Es donde se escriben las instrucciones que queremos que karel ejecute al iniciar. En tus primeros programas, la mayor parte del código que escribas lo pondrás en este lugar, pero conforme ganes experiencia lo comenzaras a escribir en otros lados para hacerlo más legible.

Pascal

iniciar-programa
  define-nueva-instruccion gira-derecha como inicio
    repetir 3 veces inicio
      gira-izquierda;
    fin
  fin
  
  inicia-ejecucion
    avanza;
    gira-izquierda;
    gira-derecha;
    apagate;
  termina-ejecucion
finalizar-programa

Java:

class program{
  void turnright(){
    iterate(3){
      turnleft();
    }
  }

  program(){
    move();
    turnleft();
    turnright();
    turnoff();
  }
}

Ahora que ya sabes como se ve un programa, quisiera mencionar algunos detalles importantes:

  • Punto y coma: Lo primero que quizá hayas notado es que todas las instrucciones que son invocadas llevan un punto y coma (;). El uso del punto y coma en el contexto de la programación es para separar instrucciones. Es posible poner más de una instrucción en una línea del código, pero no es recomendado, pues puede hacer el programa más difícil de leer y entender. Para el caso de Java, se añaden unos paréntesis vacíos también, pues la sintaxis es similar a la que se usa en una función matemática.
  • Sangrado / tabulación / indentación: El término más utilizado es el anglicismo "indentación", que viene del inglés "indentation". Básicamente son los espacios que se dejan al inicio de cada línea de código para mantener los bloques de código (inicio/fin) más ordenados. Acostúmbrate a mantener tu código siempre bien ordenado, pues cuando escribas un programa de más de 200 líneas te será mucho más difícil comprenderlo si no lo estructuras de la forma adecuada. Lo regular es de dejar 2 o 4 espacios cada que se abre un nuevo bloque de inicio/fin.
  • inicio / fin: Sirven para agrupar instrucciones. Cuando veamos condicionales y ciclos repetitivos los vas a necesitar más, pues permiten agrupar muchas instrucciones en un bloque. Recuerda siempre añadir espacios adicionales cuando crees un nuevo bloque para mantener tu código más legible.

Ejercicios de la sección

Para poner en práctica lo aprendido, resuelve el problema de la cartera:

La Cartera

Karel acaba de llegar a su casa, pero se dio cuenta de que olvidó la cartera en la tienda. Ayuda a karel a ir por su cartera:

Consideraciones

  • Karel inicia en la casilla (1,1) orientado al norte.
  • La tienda está en la casilla (1,3), que es donde habrá un zumbador que representa la cartera de karel.
  • Karel debe tomar la cartera y dejarla en la casilla (1,1).
  • Karel no tiene zumbadores en la mochila
  • No existen muros salvo los que delimitan el mapa.
  • No importa la orientación final de karel.
  • Solo se va a evaluar que kael deje un zumbador en la casilla (1,1).

Entrada

Salida

Rompiendo Karel

Muchas veces mientras empezamos a programar, cometemos errores sin querer, y cuando ocurre, no sabemos que pasa. Para que cuando te equivoques sepas qué fue lo que pasó, realiza las siguientes actividades:

  • Crea un mundo situando a karel frente a una pared, hazlo que avancé y analiza el error que el programa te da.
  • Crea un mundo donde karel no tenga zumbadores en la mochila. Haz que deje un zumbador y documenta el error.
  • Crea un mundo donde karel esté sobre una casilla sin zumbadores, haz que tome uno y documenta el error.
  • Remueve la instrucción apagate y ejecuta tu programa, analiza el error.

Con esto deberías dominar las instrucciones básicas de karel, así como los fallos más comunes. Una vez que resuelvas los ejercicios, estarás listo para la siguiente sección: Pascal vs Java