La sentencia  mientras /hacer  

Desde el principio, siempre se nos ha dicho la esquina exacta de inicio. Nosotros queremos programar Karel para que se adapte mejor a su mundo. La sentencia mientras/hacer nos permite repetir pasos mientras se cumple una condición, y esto nos va a permitir programar a Karel para que ¡no sea un chico tan rígido!. La sentencia mientras/hacer tiene la forma siguiente  :

mientras xxx hacer inicio

   yyy

fin ;

  donde xxx debe ser una condición (una de las funciones booleanas listadas anteriormente), y yyy representa cualquier número de sentencias de Karel. El ejercicio 1 podría haberse escrito de la siguiente manera:

  mientras frente-libre hacer inicio

   avanza ;

fin ;

  Esto soluciona el problema de caminar de nuevo a  la 1ª Calle, sin importar como de lejos se encuentre de esta Calle.

  Ejercicio 7: La tarea de Karel es dejar zumbadores a lo largo de una pista de carreras. Un ejemplo de dicha pista es la de la siguiente imagen. Karel debe dar una vuelta completa y depositar un zumbador en cada esquina a lo largo del camino. Guarda el programa con el nombre “karel7.kp”. Tu solución debe usar sentencias mientras/hacer. Construye el mundo inicial de la siguiente imagen con el nombre “pistaCarreras.km”. Asegurate de poner dentro de la mochila suficientes zumbadores para todas las esquinas. El ejemplo requiere 22 zumbadores. Karel debe empezar en cualquier intersección de la pista.

Asegúrate de que tu programa funciona en el mundo anterior, y después prueba tu programa modificando el mundo inicial. También, intenta iniciar a Karel desde diferentes intersecciones a lo largo del camino. ¿Realiza Karel su tarea correctamente en todos los casos?

Ejercicio 8: Escribe un programa que ayude a Karel a escapar de un laberinto que no contiene islas (cuadrados aislados). La salida del laberinto está marcada ubicando un zumbador en la primera esquina que está fuera del laberinto, al lado del muro de la derecha. Una forma de resolver este problema es hacer que Karel avance a lo largo del laberinto siguiendo el muro de su derecha ( imagina que está tocando el muro y que nunca puede despegar su mano de él). En la siguiente imagen hay un ejemplo de un laberinto del cual debería ser capaz de salir (no olvides que tu programa debería funcionar en todos los laberintos, no solo en el de la imagen). Guarda tu programa con el nombre “karel_8.kp”. Esto parece muy, muy complicado. ¿Puedes darnos un mundo de ejemplo?

Aquí tenéis un mundo inicial de ejemplo. La línea roja muestra el camino que debería seguir Karel para este mundo. Recordar que no sabréis de antemano donde estarán los muros. 

 

Podría hacerse más fácil si definierais unas pocas nuevas instrucciones que hicieran parte del trabajo. Aquí tenéis un ejemplo:

define-nueva-instruccion sigue-muro-rerecha como inicio

   {pon tu código aquí}

fin ;

...

Esta instrucción hace que Karel avance correctamente hacia el siguiente segmento de muro. Los diagramas de abajo muestran las 4 situaciones, Karel podría estar en cualquier punto del laberinto. Si sigue-muro-derecha resuelve correctamente los 4 casos, entonces has solucionado la parte principal del problema. También deberías definir gira-derecha.

Para probar tu programa crea un mundo como el del ejemplo y guárdalo con el nombre “laberinto.km”. Una vez te funcione el programa para este mundo, prueba a modificarlo anñadiéndo o quitando muros. ¿Realiza Karel la tarea bien en todos los casos?

Situaciones iniciales
Movimientos respectivos
 

La sentencia  mientras /hacer