Programación II

Extendiendo el Lenguaje de Karel
 Ing. José Rubén Campos Alfaro

     Company
     LOGO
Extendiendo el Lenguaje

 Podemos enseñar nuevas instrucciones
  que ejecutan intrucciones mas simples.
 Imagine que queremos que Karel gire a la
  derecha    entonces     tendríamos     que
  indicarle que diera tres giros a la
  izquierda.
 Entonces sería de gran utilidad contar con
  una instrucción turnright (gira a la
  derecha).
Extendiendo el Lenguaje

 Subiendo la escalera
 Karel se encuentra
  frente a una escalera
  como se muestra en la
  figura 3.1 compuesta
  por tres escalones de
  subida. Lleva a karel
  hasta     el    último   Figura 3.1
  escalón.
Extendiendo el Lenguaje

 Para que karel caminara sobre la
  escalera, nuestro código para subir un
  escalón sería el siguiente:

 move();       Este código lo tendremos que repetir
 turnleft();   3 veces ya que es el número de
               escalones que Karel va a subir.
 turnleft();
 turnleft();
 move();
Extendiendo el Lenguaje
class program {
                    Programa completo
program()
{
      move();
      turnleft();
      turnleft();
      turnleft();
      move() ;
      turnleft();
      move();
      turnleft();
      turnleft();
      turnleft();
      move();
      turnleft();
      move();
      turnleft();
      turnleft();
      turnleft();
      move();
  turnoff();
}

}
Definición de una Nueva Instrucción.


Sintaxis para definir una nueva instrucción
                para Karel
                                             La palabra reservada define la
Define <nombre_nueva_instrucción>()          empleamos para decirle a Karel
                                             que le enseñamos una nueva
{
                                             instrucción.
<instrucciones>
<instrucciones>                       Posteriormente viene el nombre de
.                                     la nueva instrucción, la cual no debe
.                                     ser igual al nombre de alguna otra
.                                     Instrucción nativa o ya definida.
<instrucciones>
}                  Por último, viene el código que deseamos que Karel
                       Ejecute a través de la nueva instrucción. Nota: No hay
                       ; después de la primera línea.
Definición de una Nueva Instrucción.


 Las instrucción puede ser una sola
  instrucción o un bloque de instrucciones
  creado con “{“ y “}”. Esto crea lo que se
  conoce como una entrada al diccionario
  de karel, que es donde está todo lo que
  karel puede y sabe ejecutar.
Definición de una Nueva Instrucción.


 Definamos la instrucción turnright.

 define turnright()
 {
 turnleft()
 turnleft()
 turnleft()
 }
Definición de una Nueva Instrucción.


•Empleemos la instrucción turnright en la
definición de la instrucción subeEscalon()

         define
         subeEscalon()
         {
         turnleft();
         move();
         turnright();
         move();
         }
Definición de una Nueva Instrucción.

class program
{
                           program()
define turnright()
                                    {
     {
                                    subeEs;calon()
     turnleft();
                                     subeEs;calon()
     turnleft();
                                     subeEs;calon()
     turnleft();
                           turnof()
     }
                           }
define subeEscalon()
                           }
     {
     turnleft();
     move();
     turnright();
     move();
     }
Razones para crear
                 nuevas instrucciones
 Es un buen hábito de programación de
  programación, el tener las nuevas
  instrucciones definidas en forma más
  clara y concisa posible.
 Posibilidad de reutilización en futuros
  programas escritos.
 Contar con una biblioteca de múltiples
  funciones de uso variado.
Razones para crear
                  nuevas instrucciones
 La claridad en el código es de suma
  importancia cuando estamos
  programando.
 Una aplicación sencilla es renombrar las
  instrucciones nativas (move, putbeeper,
  etc), para tenerlas de manera más clara y
  evitar errores a la hora de escribirlas.
Razones para crear
                               nuevas instrucciones
  Ej.
   Redefiniendo                  define ponBiper()
   una                                {
   Instrucción de
   Karel.
                                      putbeeper();
                                      }


La claridad en un código nos ayuda a comprender que estamos haciendo y
cómo estamos dividiendo nuestra tarea en tareas más pequeñas.
Razones para crear
                nuevas instrucciones
                                                       Ok, I got
                                                          it!

program ()              What!!   program ()
      {                                {
      tr();                            iniciaPosicion();
      move();                          move();
      pon();                           colocaPila();
      c();                             cambiaDeAvenida();
      pon();                           colocaPila();
      c();                             cambiaDeAvenida();
      rb();                            recogeBeepers();
      }                                }

  Programa poco claro                 Programa entendible
Ambientes de Karel




Posible estado inicial del mundo     Posible estado final del mundo
Razones para crear
                         nuevas instrucciones
 Al crear nuevas instrucciones con una
  labor específica, podemos reutilizar esa      move();
  misma instrucción en nuevos programas.        turnleft();
 Ej                                            turnleft();
    Pensemos que deseamos construir
                                                turnleft();
     escalones de beepers sobre el mismo        move();
     mundo de la fig.2.1.1 Entonces nuestro
     programa solo estaría levemente             Fig. 2.1.1
     modificado en la función principal de la
     siguiente manera:
Razones para crear
                          nuevas instrucciones
                              Podemos modificar la función
program()                    subeEscalon agregándole al final
      {                         La instrucción pubbeeper.
      putbeeper();
      subeEscalon();
                               program()
      putbeeper();
                                     {
      subeEscalon();
                                     turnleft();
      putbeeper();
                                     move();
      turnoff();
                                     turnright();
      }
                                     move();
                                     putbeeper();
   Modificación de un                }
programa para una nueva
         tarea.
Razones para crear
                   nuevas instrucciones
 Siempre es aconsejable seccionar nuestro
  problema en pequeñas tareas. La
  creatividad de un programador se basa en
  poder dividir una tarea en varias tareas de
  menor complejidad.
 Esto se llama top-down .- tratamos de
  llevar a cabo una tarea por medio de
  realizarla desde lo general, seccionándola
  y simplificándola hasta llevarla a las
  instrucciones más simples (nativas) de
  Karel.
Ejercicios
 Re escribir los siguientes problemas. Deberá utilizar las nuevas
  instrucciones creadas.
      1. Karel debe ir al norte coordenadas (14,2) durante su camino deberá
       recoger los zumbadores(beepers) que encuentre a su paso y llevarlos a su
       destino.




                                                        Recuerda que los
                                                        mundos
                                                        están en el blog de
                                                        la clase.
                                                           Descargarlos.
Ejercicios
 2. Karel tiene como actividad recoger un zumbador que se
  encuentra en las coordenadas (9,2) regresar con el
  zumbador(beeper) y depositarlo en el lugar donde inicio su
  recorrido.
Ejercicios
   3. Karel tiene la siguiente actividad. Karel debe recoger los
    zumbadores (beepers) que están en el laberinto. Karel debe iniciar a
    recoger los zumbadores iniciando su recorrido hacia el Norte y
    terminando su recorrido para recoger los zumbadores hacia el Este.
    Una vez levantado el último zumbador debe colocar los zumbares uno
    a uno desde las coordenadas (1,10 hasta la 1,3). Karel debe llegar a su
    punto de partida y quedar mirando hacia el Norte.
Tarea

Extendiendo el Lenguaje

  • 1.
    Programación II Extendiendo elLenguaje de Karel Ing. José Rubén Campos Alfaro Company LOGO
  • 2.
    Extendiendo el Lenguaje Podemos enseñar nuevas instrucciones que ejecutan intrucciones mas simples.  Imagine que queremos que Karel gire a la derecha entonces tendríamos que indicarle que diera tres giros a la izquierda.  Entonces sería de gran utilidad contar con una instrucción turnright (gira a la derecha).
  • 3.
    Extendiendo el Lenguaje Subiendo la escalera  Karel se encuentra frente a una escalera como se muestra en la figura 3.1 compuesta por tres escalones de subida. Lleva a karel hasta el último Figura 3.1 escalón.
  • 4.
    Extendiendo el Lenguaje Para que karel caminara sobre la escalera, nuestro código para subir un escalón sería el siguiente: move(); Este código lo tendremos que repetir turnleft(); 3 veces ya que es el número de escalones que Karel va a subir. turnleft(); turnleft(); move();
  • 5.
    Extendiendo el Lenguaje classprogram { Programa completo program() { move(); turnleft(); turnleft(); turnleft(); move() ; turnleft(); move(); turnleft(); turnleft(); turnleft(); move(); turnleft(); move(); turnleft(); turnleft(); turnleft(); move(); turnoff(); } }
  • 6.
    Definición de unaNueva Instrucción. Sintaxis para definir una nueva instrucción para Karel La palabra reservada define la Define <nombre_nueva_instrucción>() empleamos para decirle a Karel que le enseñamos una nueva { instrucción. <instrucciones> <instrucciones> Posteriormente viene el nombre de . la nueva instrucción, la cual no debe . ser igual al nombre de alguna otra . Instrucción nativa o ya definida. <instrucciones> } Por último, viene el código que deseamos que Karel Ejecute a través de la nueva instrucción. Nota: No hay ; después de la primera línea.
  • 7.
    Definición de unaNueva Instrucción.  Las instrucción puede ser una sola instrucción o un bloque de instrucciones creado con “{“ y “}”. Esto crea lo que se conoce como una entrada al diccionario de karel, que es donde está todo lo que karel puede y sabe ejecutar.
  • 8.
    Definición de unaNueva Instrucción.  Definamos la instrucción turnright. define turnright() { turnleft() turnleft() turnleft() }
  • 9.
    Definición de unaNueva Instrucción. •Empleemos la instrucción turnright en la definición de la instrucción subeEscalon() define subeEscalon() { turnleft(); move(); turnright(); move(); }
  • 10.
    Definición de unaNueva Instrucción. class program { program() define turnright() { { subeEs;calon() turnleft(); subeEs;calon() turnleft(); subeEs;calon() turnleft(); turnof() } } define subeEscalon() } { turnleft(); move(); turnright(); move(); }
  • 11.
    Razones para crear nuevas instrucciones  Es un buen hábito de programación de programación, el tener las nuevas instrucciones definidas en forma más clara y concisa posible.  Posibilidad de reutilización en futuros programas escritos.  Contar con una biblioteca de múltiples funciones de uso variado.
  • 12.
    Razones para crear nuevas instrucciones  La claridad en el código es de suma importancia cuando estamos programando.  Una aplicación sencilla es renombrar las instrucciones nativas (move, putbeeper, etc), para tenerlas de manera más clara y evitar errores a la hora de escribirlas.
  • 13.
    Razones para crear nuevas instrucciones  Ej. Redefiniendo define ponBiper() una { Instrucción de Karel. putbeeper(); } La claridad en un código nos ayuda a comprender que estamos haciendo y cómo estamos dividiendo nuestra tarea en tareas más pequeñas.
  • 14.
    Razones para crear nuevas instrucciones Ok, I got it! program () What!! program () { { tr(); iniciaPosicion(); move(); move(); pon(); colocaPila(); c(); cambiaDeAvenida(); pon(); colocaPila(); c(); cambiaDeAvenida(); rb(); recogeBeepers(); } } Programa poco claro Programa entendible
  • 15.
    Ambientes de Karel Posibleestado inicial del mundo Posible estado final del mundo
  • 16.
    Razones para crear nuevas instrucciones  Al crear nuevas instrucciones con una labor específica, podemos reutilizar esa move(); misma instrucción en nuevos programas. turnleft();  Ej turnleft();  Pensemos que deseamos construir turnleft(); escalones de beepers sobre el mismo move(); mundo de la fig.2.1.1 Entonces nuestro programa solo estaría levemente Fig. 2.1.1 modificado en la función principal de la siguiente manera:
  • 17.
    Razones para crear nuevas instrucciones Podemos modificar la función program() subeEscalon agregándole al final { La instrucción pubbeeper. putbeeper(); subeEscalon(); program() putbeeper(); { subeEscalon(); turnleft(); putbeeper(); move(); turnoff(); turnright(); } move(); putbeeper(); Modificación de un } programa para una nueva tarea.
  • 18.
    Razones para crear nuevas instrucciones  Siempre es aconsejable seccionar nuestro problema en pequeñas tareas. La creatividad de un programador se basa en poder dividir una tarea en varias tareas de menor complejidad.  Esto se llama top-down .- tratamos de llevar a cabo una tarea por medio de realizarla desde lo general, seccionándola y simplificándola hasta llevarla a las instrucciones más simples (nativas) de Karel.
  • 19.
    Ejercicios  Re escribirlos siguientes problemas. Deberá utilizar las nuevas instrucciones creadas.  1. Karel debe ir al norte coordenadas (14,2) durante su camino deberá recoger los zumbadores(beepers) que encuentre a su paso y llevarlos a su destino. Recuerda que los mundos están en el blog de la clase. Descargarlos.
  • 20.
    Ejercicios  2. Kareltiene como actividad recoger un zumbador que se encuentra en las coordenadas (9,2) regresar con el zumbador(beeper) y depositarlo en el lugar donde inicio su recorrido.
  • 21.
    Ejercicios  3. Karel tiene la siguiente actividad. Karel debe recoger los zumbadores (beepers) que están en el laberinto. Karel debe iniciar a recoger los zumbadores iniciando su recorrido hacia el Norte y terminando su recorrido para recoger los zumbadores hacia el Este. Una vez levantado el último zumbador debe colocar los zumbares uno a uno desde las coordenadas (1,10 hasta la 1,3). Karel debe llegar a su punto de partida y quedar mirando hacia el Norte.
  • 22.