Download - Extendiendo el Lenguaje
![Page 1: Extendiendo el Lenguaje](https://reader033.vdocuments.pub/reader033/viewer/2022052400/559a1c101a28ab727b8b45ef/html5/thumbnails/1.jpg)
Company
LOGO
Extendiendo el Lenguaje de Karel
Ing. José Rubén Campos Alfaro
Programación II
![Page 2: Extendiendo el Lenguaje](https://reader033.vdocuments.pub/reader033/viewer/2022052400/559a1c101a28ab727b8b45ef/html5/thumbnails/2.jpg)
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).
![Page 3: Extendiendo el Lenguaje](https://reader033.vdocuments.pub/reader033/viewer/2022052400/559a1c101a28ab727b8b45ef/html5/thumbnails/3.jpg)
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
escalón.
Extendiendo el Lenguaje
Figura 3.1
![Page 4: Extendiendo el Lenguaje](https://reader033.vdocuments.pub/reader033/viewer/2022052400/559a1c101a28ab727b8b45ef/html5/thumbnails/4.jpg)
Extendiendo el Lenguaje
Para que karel caminara sobre la
escalera, nuestro código para subir un
escalón sería el siguiente:
move();
turnleft();
turnleft();
turnleft();
move();
Este código lo tendremos que repetir
3 veces ya que es el número de
escalones que Karel va a subir.
![Page 5: Extendiendo el Lenguaje](https://reader033.vdocuments.pub/reader033/viewer/2022052400/559a1c101a28ab727b8b45ef/html5/thumbnails/5.jpg)
Extendiendo el Lenguaje
class program {
program()
{
move();
turnleft();
turnleft();
turnleft();
move() ;
turnleft();
move();
turnleft();
turnleft();
turnleft();
move();
turnleft();
move();
turnleft();
turnleft();
turnleft();
move();
turnoff();
}
}
Programa completo
![Page 6: Extendiendo el Lenguaje](https://reader033.vdocuments.pub/reader033/viewer/2022052400/559a1c101a28ab727b8b45ef/html5/thumbnails/6.jpg)
Definición de una Nueva Instrucción.
Sintaxis para definir una nueva instrucción
para Karel
Define <nombre_nueva_instrucción>()
{
<instrucciones>
<instrucciones>
.
.
.
<instrucciones>
}
La palabra reservada define la
empleamos para decirle a Karel
que le enseñamos una nueva
instrucción.
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.
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.
![Page 7: Extendiendo el Lenguaje](https://reader033.vdocuments.pub/reader033/viewer/2022052400/559a1c101a28ab727b8b45ef/html5/thumbnails/7.jpg)
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.
![Page 8: Extendiendo el Lenguaje](https://reader033.vdocuments.pub/reader033/viewer/2022052400/559a1c101a28ab727b8b45ef/html5/thumbnails/8.jpg)
Definamos la instrucción turnright.
define turnright()
{
turnleft()
turnleft()
turnleft()
}
Definición de una Nueva Instrucción.
![Page 9: Extendiendo el Lenguaje](https://reader033.vdocuments.pub/reader033/viewer/2022052400/559a1c101a28ab727b8b45ef/html5/thumbnails/9.jpg)
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();
}
![Page 10: Extendiendo el Lenguaje](https://reader033.vdocuments.pub/reader033/viewer/2022052400/559a1c101a28ab727b8b45ef/html5/thumbnails/10.jpg)
class program
{
define turnright()
{
turnleft();
turnleft();
turnleft();
}
define subeEscalon()
{
turnleft();
move();
turnright();
move();
}
program()
{
subeEs;calon()
subeEs;calon()
subeEs;calon()
turnof()
}
}
Definición de una Nueva Instrucción.
![Page 11: Extendiendo el Lenguaje](https://reader033.vdocuments.pub/reader033/viewer/2022052400/559a1c101a28ab727b8b45ef/html5/thumbnails/11.jpg)
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.
![Page 12: Extendiendo el Lenguaje](https://reader033.vdocuments.pub/reader033/viewer/2022052400/559a1c101a28ab727b8b45ef/html5/thumbnails/12.jpg)
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
![Page 13: Extendiendo el Lenguaje](https://reader033.vdocuments.pub/reader033/viewer/2022052400/559a1c101a28ab727b8b45ef/html5/thumbnails/13.jpg)
Ej.
Razones para crear
nuevas instrucciones
define ponBiper()
{
putbeeper();
}
Redefiniendo
una
Instrucción de
Karel.
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.
![Page 14: Extendiendo el Lenguaje](https://reader033.vdocuments.pub/reader033/viewer/2022052400/559a1c101a28ab727b8b45ef/html5/thumbnails/14.jpg)
Razones para crear
nuevas instrucciones
program ()
{
tr();
move();
pon();
c();
pon();
c();
rb();
}
program ()
{
iniciaPosicion();
move();
colocaPila();
cambiaDeAvenida();
colocaPila();
cambiaDeAvenida();
recogeBeepers();
}
Programa poco claro Programa entendible
What!!
Ok, I got
it!
![Page 15: Extendiendo el Lenguaje](https://reader033.vdocuments.pub/reader033/viewer/2022052400/559a1c101a28ab727b8b45ef/html5/thumbnails/15.jpg)
Ambientes de Karel
Posible estado inicial del mundo Posible estado final del mundo
![Page 16: Extendiendo el Lenguaje](https://reader033.vdocuments.pub/reader033/viewer/2022052400/559a1c101a28ab727b8b45ef/html5/thumbnails/16.jpg)
Al crear nuevas instrucciones con una
labor específica, podemos reutilizar esa
misma instrucción en nuevos programas.
Ej
Pensemos que deseamos construir
escalones de beepers sobre el mismo
mundo de la fig.2.1.1 Entonces nuestro
programa solo estaría levemente
modificado en la función principal de la
siguiente manera:
Razones para crear
nuevas instrucciones
move();
turnleft();
turnleft();
turnleft();
move();
Fig. 2.1.1
![Page 17: Extendiendo el Lenguaje](https://reader033.vdocuments.pub/reader033/viewer/2022052400/559a1c101a28ab727b8b45ef/html5/thumbnails/17.jpg)
Razones para crear
nuevas instrucciones
program()
{
putbeeper();
subeEscalon();
putbeeper();
subeEscalon();
putbeeper();
turnoff();
}
Modificación de un
programa para una nueva
tarea.
Podemos modificar la función
subeEscalon agregándole al final
La instrucción pubbeeper.
program()
{
turnleft();
move();
turnright();
move();
putbeeper();
}
![Page 18: Extendiendo el Lenguaje](https://reader033.vdocuments.pub/reader033/viewer/2022052400/559a1c101a28ab727b8b45ef/html5/thumbnails/18.jpg)
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.
Razones para crear
nuevas instrucciones
![Page 19: Extendiendo el Lenguaje](https://reader033.vdocuments.pub/reader033/viewer/2022052400/559a1c101a28ab727b8b45ef/html5/thumbnails/19.jpg)
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.
![Page 20: Extendiendo el Lenguaje](https://reader033.vdocuments.pub/reader033/viewer/2022052400/559a1c101a28ab727b8b45ef/html5/thumbnails/20.jpg)
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
![Page 21: Extendiendo el Lenguaje](https://reader033.vdocuments.pub/reader033/viewer/2022052400/559a1c101a28ab727b8b45ef/html5/thumbnails/21.jpg)
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.
Ejercicios
![Page 22: Extendiendo el Lenguaje](https://reader033.vdocuments.pub/reader033/viewer/2022052400/559a1c101a28ab727b8b45ef/html5/thumbnails/22.jpg)
Tarea