Extendiendo el Lenguaje

22
Company LOGO Extendiendo el Lenguaje de Karel Ing. José Rubén Campos Alfaro Programación II

Transcript of Extendiendo el Lenguaje

Page 1: Extendiendo el Lenguaje

Company

LOGO

Extendiendo el Lenguaje de Karel

Ing. José Rubén Campos Alfaro

Programación II

Page 2: Extendiendo el Lenguaje

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

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

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

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

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

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

Definamos la instrucción turnright.

define turnright()

{

turnleft()

turnleft()

turnleft()

}

Definición de una Nueva Instrucción.

Page 9: Extendiendo el Lenguaje

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

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

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

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

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

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

Ambientes de Karel

Posible estado inicial del mundo Posible estado final del mundo

Page 16: Extendiendo el Lenguaje

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

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

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

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

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

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

Tarea