Instrucciones condicionales en Karel
En ocasiones cuando queremos hacer algo ocurre un evento desafortunado por el cual ya no podemos realizarlo, como querer comprar un pastel tres leches y que ya no haya mas que pays :c Sin embargo, de no haber pasado eso, habríamos seguido nuestro plan sin problemas. Aunque, veamos el lado positivo, si no hay del sabor que queríamos podemos llevar otro. En otras palabras podríamos decir:
Si hay pastel de tres leches entonces compro ese, sino compro un pay.
Esto lo conocemos como una condición y en el caso de la programación es exactamente lo mismo.
- Estructura
- Condiciones disponibles
- Bloques de instrucciones
- Condiciones agrupadas
- Ejemplos
- Problemas sugeridos
Estructura
La estructura es de hecho bastante similar a la manera natural de decir una condición:
Podemos notar varias partes en el enunciado: La palabra reservada del compilador si | if
que le indica que está recibiendo una sentencia condicional. La condición que debe evaluar para saber en base a qué decidir. La palabra entonces
que le dice al compilador que está por recibir lo que tiene que hacer si esa condición se cumple. También podemos agregar lo que Karel tendría que hacer en caso de que la condición no se cumpla.
Nota que podemos prescindir de especificar un sino | else
, pero no podemos poner un sino |else
sin un si | if
antes de él. (Ni siquiera tendría sentido la oración).
En Pascal el
;
se pone al final de la expresión completa, si mi condición no lleva unsino
iría justo después de la acción a realizar, de llevarlo iría hasta el final de la acción delsino
. En el caso de Java el;
va luego de cada acción.
En #iP notarás las palabras control de las sentencias condicionales marcadas de color morado.
Condiciones disponibles
Como podrás imaginar, Karel no puede evaluar si hay o no pasteles de su sabor favorito y siendo que podrían haber una infinidad de posibles condiciones hay ciertas condiciones especiales que Karel puede evaluar.
Nota que el tipo de condición que usamos aquí puede ser evaluada tan sólo con un sí o no, con un verdadero o falso.
Las condiciones que Karel puede evaluar, son las siguientes:
Donde cada condición expresa lo que evalúa. La expresión: si junto-a-zumbador
o if (nexToABeeper)
es verdadera si Karel comparte su posición con un zumbador.
En #iP verás las condiciones marcadas de color naranja.
Bloques de instrucciones
¿Qué pasa cuando queremos hacer más de una acción si una condición se cumple o no se cumple? Con las estructuras anteriores sólo podíamos realizar una acción si se cumplía la condición, o sólo una si no, si queremos realizar más de una acción debemos usar bloques de instrucciones como sigue:
Como notarás, los bloques de instrucciones en Pascal los marcan las palabras inicio
y fin
. En Java utilizamos llaves, {
al principio y }
al final del bloque.
En #iP las palabras control que delimitan los bloques los verás marcadas en verde.
Podemos escribir las acciones a realizar al mismo nivel del
si | if
y podemos poner todas las acciones en una línea (siempre y cuando no olvides los;
al final de cada comando) pero es aconsejable que dejes espacios para mantener todo ordenado y más fácil de entender. A estos espacios se les llama identación o sangrado.
Condiciones agrupadas
Puede darse (muy seguido) que necesitemos considerar no sólo una condición, si ese es el caso podemos usar una simple clausula de conjunción o disyunción para agregar más. Una clausula de conjunción es y
por ejemplo, una de disyunción es o
.
Karel avanzará si y sólo si ambas condiciones se cumplen, es decir en la primera línea, si Karel está junto a un zumbador y tiene el frente libre entonces avanzará. No importa si sólo una se cumple, tienen que cumplirse ambas para que la acción se realice. Nota que en pascal podemos usar y
y e
para que se lea mejor, pero en Java únicamente usamos &&
.
Pero existe otro caso, el caso en el que tanto si se cumple una u otra condición se realice cierta acción. Ahí usamos las cláusulas de disyunción como sigue:
En este caso, Karel dejará un zumbador si una de las dos condiciones se cumple es decir, en la primera línea si está junto a un zumbador o si tiene la izquierda libre. No importa si una no se cumple, con que una de las dos se cumpla se realizará la acción. Nota que en Pascal podemos usar o
y u
, en Java únicamente usamos ||
.
Está además la clausula no
en Pascal y !
en Java, que se considera verdadera cuando la condición a su lado no se cumple:
Karel avanzará si el frente no está bloqueado. ¿Pero qué no pude haber utilizado la condición frente-libre
? Sí, en este caso podemos utilizar la condición análoga, sin embargo, más adelante encontraremos casos en los que no hay una y tendremos que usar forzosamente la clausula no | !
.
En #iP encontrarás los caracteres de conjunción, disyunción y negación marcados de un color gris azulado.
Ejemplos
Condición sencilla:
Condición completa:
Condición sencilla con bloque:
Condición completa con bloque:
Condición agrupada sencilla con bloque:
Condición agrupada completa con bloque:
Por si no te lo habías preguntado, puedes poner una condición dentro de otra, de hecho puedes poner cualquier cosa dentro de un bloque.
Nota lo útil que es identar nuestros códigos para poder distinguir mejor entre un bloque de acciones y otro.
Problemas sugeridos
- El celular de KarelVer en omegaUp
- Karel y la paredVer en omegaUp
- Karel SilvestreVer en omegaUp
Cita esta página
Include Poetry - Code. (2020, 4 de enero). Instrucciones condicionales en Karel. Obtenido de https://www.include-poetry.com/Code/Karel/Instrucciones/Condicionales/