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
class program {
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 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.
7. 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.
8. Definición de una Nueva Instrucción.
Definamos la instrucción turnright.
define turnright()
{
turnleft()
turnleft()
turnleft()
}
9. 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();
}
10. 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();
}
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
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 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.
20. 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.
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.