Condiciones que puede detectar Karel

Date cuenta de que la condición orientado-al-sur, en el fragmento de programa de la página del si /entonces

...

si orientado-al-sur entonces inicio

   gira-izquierda;

   gira-izquierda;

   gira-izquierda;

fin ;

...

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 orientado-al-sur será verdadero, y el conjunto de sentencias entre el par inicio/fin, se ejecutará. De otra manera, el valor orientado-al-sur 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:

frente-libre junto-a-zumbador orientado-al-este
frente-bloqueado no-junto-a-zumbador orientado-al-oeste
izquierda-libre algun-zumbador-en-la-mochila no-orientado-al-norte
izquierda-bloqueada ningun-zumbador-en-la-mochila no-orientado-al-sur
derecha-libre orientado-al-norte no-orientado-al-este
derecha-bloqueada orientado-al-sur no-orientado-al-oeste

"libre" significa que no hay ningún muro, mientras que "bloqueado" 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ón-booleana1 y función-booleana2

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 o 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: no función-booleana

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

Los operadores "y" y "o" se aplican sobre dos funciones y el operador "no" 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:

(orientado-al-norte o orientado-al-sur) y frente-libre

(no (frente-bloqueado y junto-a-zumbador)) o orientado-al-este

no (junto-a-zumbador y frente-libre)

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:
...

si orientado-al-norte y frente-libre entonces inicio

   avanza;

fin;

...

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 si 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