Extendiendo el Lenguaje

Post on 06-Jul-2015

374 views 1 download

Transcript of Extendiendo el Lenguaje

Company

LOGO

Extendiendo el Lenguaje de Karel

Ing. José Rubén Campos Alfaro

Programación II

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).

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

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.

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

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.

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.

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();

}

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.

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.

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.

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.

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!

Ambientes de Karel

Posible estado inicial del mundo Posible estado final del mundo

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

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();

}

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

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.

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.

Ejercicios

Tarea