Condiciones que puede detectar Karel 

Date cuenta de que la condición facingSouth, en el fragmento de programa de la página del if  

...

if (facingSouth) {

   turnleft();

   turnleft();

   turnleft();

}

...

La condición es una función de la situación actual de Karel, a medida que se ejecuta el programa. Si Karel está actualmente orientado hacia el Sur, el valor de la función facingSouth será verdadero, y el conjunto de sentencias entre las llaves "{ }", se ejecutará. De otra manera,  el valor facingSouth será falso y el bloque de sentencias se saltará. Karel comprende cualquier función booleana que comprueba su situación actual. Aquí hay un listado:

 

frontIsClear nextToABeeper facingEast
frontIsBlocked notNextToABeeper facingWest
leftIsClear anyBeepersInBeeperBag notFacingNorth
leftIsBlocked noBeepersInBeeperBag notFacingSouth
rightIsClear facingNorth notFacingEast
rightIsBlocked facingSouth notFacingWest
 

"clear" significa que no hay ningún muro, mientras que "blocked" significa que hay un muro en esa dirección. Karel puede detectar si hay o no algún zumbador en la esquina en la que se encuentra actualmente, así como detectar si tiene algún zumbador en la mochila o no. También tiene una brújula para detectar hacia qué dirección está orientado.

Por si fuera poco podemos unir dos o más funciones booleanas con los operadores lógicos Y, O, y NO.

Podemos ver la síntaxis de los operadores y sus valores con las siguientes tablas:

Operador y ("&&" )

Síntaxis: funciónBooleana1 && funciónBooleana2

Valor de la función 1 Valor de la función 2 Resultado final
falso falso falso
falso verdadero falso
verdadero falso falso
verdadero verdadero verdadero

Operador o ("||")

Síntaxis: función-booleana1 || función-booleana2

Valor de la función 1 Valor de la función 2 Resultado final
falso falso falso
falso verdadero verdadero
verdadero falso verdadero
verdadero verdadero verdadero

Operador no ("!")

Síntaxis: ! función-booleana

Valor de la función Resultado final
falso verdadero
verdadero falso

Los operadores "&&" y "||" se aplican sobre dos funciones y el operador "!" solo sobre una. Lo mejor de los operadores lógicos es que si ponemos dentro de un par de paréntesis las funciones con el operador lógico, entonces toda la operación se vuelve una función booleana, por lo que podemos aplicar más operadores lógicos sobre ella. ¿No quedó claro? Revisa estos ejemplos:

(facingNorth || facingSouth) && frontIsClear

(! (frontIsBlocked && nextToABeeper)) || facingEast

! (nextToABeeper && frontIsClear)

Ten mucho cuidado de colocar bien los paréntesis, ya que si no lo haces, no te marcará error, pero seguramente hará algo extraño que tu no quieres que haga.

Por ejemplo, si queremos que Karel avance si está viendo al norte y el frente esté libre, podemos hacer lo siguiente:
...

if (facingNorth && frontIsClear) {

   move();

}

...

Ejercicio 3 :   Escribe un programa de Karel que haga que Karel esté orientado al Norte, desde cualquier dirección inicial, y a continuación se apague. Debería terminar en la misma intersección en la que empezó.

¿Alguna sugerencia?

En un mundo nuevo inserta el ejemplo visto arriba para el caso en que Karel está orientado hacia el Sur. Pero, ¿qué ocurre cuando no está orientado hacia el Sur?. ¡Podría estar también orientado hacia el Norte o el Este !. Entonces necesitas dos sentencias if adicionales, en las cuales se especifique que es lo que debe hacer Karel en esas situaciones.

Modifica el mundo inicial de Karel para probar cualquiera de las 4 direcciones de inicio, y para cada una de ellas vuelve a ejecutar el programa.

En esta sección hemos visto como usar las sentencias de control para adaptar Karel a cada situación.

Condiciones que puede detectar Karel 

Regresar