Manual de Karel Avanzado

Manual de Karel avanzado Karel no puede hacer algo como y= ((f^p)+7)/q es decir, no soporta signos ni operaciones. Sin e

Views 243 Downloads 12 File size 295KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

  • Author / Uploaded
  • fracs
Citation preview

Manual de Karel avanzado Karel no puede hacer algo como y= ((f^p)+7)/q es decir, no soporta signos ni operaciones. Sin embargo, hay maneras de elevar un número al cuadrado, de sumar, de restar, de dividir etcétera. Por ejemplo, sumar. Debes sumar lo que hay en las coordenadas (1,1) y en (1,2). Una manera de hacerlo es recogiendo todos los zumbadores en (1,1) y todos en (1,2) y después dejarlos. Es decir, suponiendo que Karel ya está en (1,1) y viendo al norte.

Código: mientras junto-a-zumbador hacer coge-zumbador; (* Coge todos los zumbadores en 1,1*) repetir 3 veces gira-izquierda; (*giro a la derecha*) avanza; (*avanzo*) mientras junto-a-zumbador hacer coge-zumbador; (*Coge todos los zumbadores en 1,2*) repetir 2 veces gira-izquierda; (*media-vuelta*) avanza; (*avanzo*) mientras algun-zumbador-en-la-mochila hacer deja-zumbador; (*dejo todos los zumbadores*)

Esa es la forma más sencilla, sin embargo si les digo que deben dejar los zumbadores donde estaban, es decir: Karel esta originalmente orientado al sur en (1,1) y tiene infinitos zumbadores en la mochila, debes colocar en (1,4) la suma de la cantidad de zumbadores en (1,2) más (1,3) dejando los sumandos donde están al finalizar la ejecución. Hay otras miles de maneras de hacerlo, se podría hacer una función que copie los valores arriba, y después los baje etc.

Pero hoy les voy a enseñar recursividad y paso de variables.

Les pondré el código completo, pero lo voy a explicar más abajo.

1 By Fantasía

Código: iniciar-programa define-nueva-instruccion suma(s) como inicio si junto-a-zumbador entonces inicio coge-zumbador; suma(sucede(s)); deja-zumbador; fin sino inicio repetir 2 veces gira-izquierda; mientras frente-libre hacer avanza; repetir 2 veces gira-izquierda; repetir 3 veces avanza; repetir s veces deja-zumbador; repetir 2 veces gira-izquierda; mientras junto-a-zumbador hacer avanza; repetir 2 veces gira-izquierda; fin; fin; inicia-ejecucion mientras no-orientado-al-este hacer gira-izquierda; avanza; suma(0); avanza; suma(0); apagate; termina-ejecucion finalizar-programa

Antes de explicar el código necesito explicar cómo funciona la recursividad de funciones. Miren: Citar define-nueva-instruccion [nombre] como inicio si [condición de salida inversa] entonces acciones a ejecutar [llamada a la misma función] acciones a ejecutar después al final, la cantidad de veces que la función fue llamada fin; fin;

2 By Fantasía

Es decir, en este ejemplo: Código: define-nueva-instruccion karel como inicio si junto-a-zumbador entonces inicio coge-zumbador; avanza; deja-zumbador; gira-izquierda;gira-izquierda; avanza; gira-izquierda;gira-izquierda; karel; deja-zumbador; fin; fin; Se copia el número de zumbadores en el espacio de adelante. Veamos porque… Código: define-nueva-instruccion karel como inicio creamos la función.

Código: si junto-a-zumbador entonces inicio Esta es nuestra condición de salida, es decir la recursividad (llamada a una función dentro de su misma) solo se ejecuta mientras esta condición sea verdadera.

Código: coge-zumbador; avanza; deja-zumbador; gira-izquierda; gira-izquierda; avanza; gira-izquierda; gira-izquierda; Esto es la sección donde coge el zumbador, lo deja adelante, y regresa a la posición original. Código: karel; Aquí esta la llamada a sí misma.

3 By Fantasía

Código: deja-zumbador; Y esto es lo que va a hacer por cada zumbador que tomo, es decir dejar otro en su lugar. En otras palabras, lo que hace es: Código: si hay zumbadores agarro uno lo pongo adelante de nuevo lo mismo X veces dejo X zumbadores. Fin fin; Para los que aun no entienden, por ejemplo si hay 2 zumbadores el código que ejecuta el programa realmente es este (sustituyo la llamada a karel por el código del mismo). Código: define-nueva-instruccion karel como inicio si junto-a-zumbador entonces inicio coge-zumbador; avanza; deja-zumbador; gira-izquierda;gira-izquierda; avanza; gira-izquierda;gira-izquierda; si junto-a-zumbador entonces inicio (*ESTA ES LA MISMA FUNCION OTRA VEZ*) coge-zumbador; avanza; deja-zumbador; gira-izquierda;gira-izquierda; avanza; gira-izquierda;gira-izquierda; si junto-a-zumbador entonces inicio (*AQUI LA CONDICION YA NO SE CUMPLE*) fin; deja-zumbador; fin; (*AQUI TERMINA*) deja-zumbador; fin; fin; En fin, les he explicado de 3 maneras distintas la teoría de recursividad.

4 By Fantasía

Si aun no entienden, haber si me entienden este otro ejemplo: Citar define-nueva-instruccion ve-arriba como inicio si no-orientado-al-norte entonces inicio gira-izquierda; ve-arriba; fin; fin; Este código girara a la izquierda hasta que este no se cumpla: "no-orientado-al-norte" es decir, girará: "mientras no-orientado-al-norte".

Una vez que hayan entendido recursividad. Ya podrán entender mejor el código, solo me faltan 2 cosas por explicar. La primera es que diablos es "sucede" jeje la primera vez que yo vi esa instrucción no le encontraba sentido.. Bueno, aquí esta un ejemplo: 4= sucede(3); 3= sucede(2); Si me entienden? sucede es igual al valor que tiene dentro de los paréntesis MAS 1. Bueno, sucede tiene una función hermana, llamada precede. 4= precede(5); 3= precede(4); Precede es igual al valor que tiene dentro de los paréntesis MENOS 1. Una cosa más. Las funciones de Karel pueden recibir parámetros, y almacenarlos en variables. Parámetro = dato extra pasado a una función Variable = letra o palabra que almacena un numero. (En karel solo se pueden almacenar números) En fin. 5 By Fantasía

Por ejemplo, si creamos una función así: Código: define-nueva-instruccion rec(x) como inicio repetir x veces avanza; fin; al llamar: Código: rec(5); Karel avanzara 5 posiciones, porque la X vale 5. Ahora sí, ya sabes todo lo necesario para entender el primer código que les puse. Código: define-nueva-instruccion suma(s) como inicio si junto-a-zumbador entonces inicio coge-zumbador; suma(sucede(s)); deja-zumbador; fin sino inicio repetir 2 veces gira-izquierda; mientras frente-libre hacer avanza; repetir 2 veces gira-izquierda; repetir 3 veces avanza; repetir s veces deja-zumbador; repetir 2 veces gira-izquierda; mientras junto-a-zumbador hacer avanza; repetir 2 veces gira-izquierda; fin; fin; Esa es la función, lo importante es que cuando mandamos llamar la función la mandamos llamar así: Código: suma(0); Es decir inicialmente vale 0. Bueno, una cosa más respecto a esta función. Si usas un sino, el código que este en la acción del "sino" se ejecutara una sola vez cuando por primera vez no se cumpla la condición. 6 By Fantasía

Si no me entendieron, léanlo de nuevo: Si usas un sino, el código que este en la acción del "sino" se ejecutara una sola vez cuando por primera vez no se cumpla la condición.

Una vez más: Si usas un sino, el código que este en la acción del "sino" se ejecutara una sola vez cuando por primera vez no se cumpla la condición. Relean ese enunciado cuantas veces crean necesario. Ahora analicemos parte por parte el código de la suma. Citar define-nueva-instruccion suma(s) como inicio Bueno, esa es la función. Citar si junto-a-zumbador entonces inicio Esta es la condición de salida, cuando no se cumpla, se terminara de llamar a si misma. Citar coge-zumbador; Eso es lo que va a hacer cada vez que coja un zumbador. Citar suma(sucede(s)); y aquí es donde se llama la función a sí misma, solo que esta vez avisa que S va a valer uno más, de esta forma se va guardando en S la cantidad de zumbadores que había.. Citar deja-zumbador; Aquí repone los zumbadores que cogió. Citar fin sino inicio Recuerdan la línea que deben leer muchas veces hasta entenderla?, si no entiendes que hace esto aquí, léela de nuevo.

7 By Fantasía

Citar repetir 2 veces gira-izquierda; mientras frente-libre hacer avanza; repetir 2 veces gira-izquierda; repetir 3 veces avanza; repetir s veces deja-zumbador; repetir 2 veces gira-izquierda; mientras junto-a-zumbador hacer avanza; repetir 2 veces gira-izquierda; Esto lo que hace es ir a la posición 3 dejar lo que valga "S" de zumbadores y regresar. Y al final son 2 "fin;", uno para terminar el "si/sino" y otro para terminar la función.

Pues esto fue un ejemplo de recursividad con Karel, y pues ahora ya deberían saber cómo funciona el 98% de Karel nos faltan 2 cosas, extremadamente fáciles, y ya es todo lo que te puedo enseñar de Karel, una próxima sesión será de cómo resolver problemas que parecen muy complicados de la manera más sencilla posible. Las 2 cosas que nos faltan son: Una vez que ya recibimos una variable en nuestra función, digamos que se llama "kora" podemos hacer algunas cosas con ella. Por ejemplo karel puede detectar si kora es igual a 0. Por ejemplo si kora vale 4, entonces en esta instrucción: Código: si si-es-cero(kora) entonces inicio apagate; fin sino inicio avanza; fin; karel avanzara, porque kora no es cero. ¿Difícil? Ahora también tenemos una cosa más. NO Y O 8 By Fantasía

Y y O se usan para unir 2 o más sentencias. Y regresa Verdadero si se cumplen las 2 condiciones. O regresa verdadero cuando se cumple alguna de las 2 condiciones. Estas son para modificar las condiciones que vimos al principio del taller. si-junto-a-zumbador frente-libre etc.. Por ejemplo podemos poner un "si" así: Código: si junto-a-zumbador y frente-libre entonces ... o un "mientras" así: Código: mientras junto-a-zumbador o frente-bloqueado hacer ...

o un "si" que te servira para las funciones recursivas: Código: si no si-es-cero(precede(kora)) entonces ...

Recuerdan que la sintaxis de si es esta: si [condicion] entonces [accion] pues entonces la condicion es esta: no si-es-cero(precede(kora))

es decir.. si kora-1 (precede(kora) = kora-1 es cero (si-es-cero(kora-1)) cuando kora valga 4 entonces es cero (4-1) ? 9 By Fantasía

nos regresa FALSO. Pero si recuerdan nuestra condición lleva un "no": si no si-es-cero(precede(kora)) entonces ... Este no lo que hace es cambiar las cosas.. es decir. FALSO va a regresar verdadero y al revés, es decir.. En nuestro caso de prueba el "no" convierte el FALSO en VERDADERO. ¿Me entendieron? no FALSO = Verdadero no Verdadero = FALSO En fin las posibilidades de Karel son ilimitadas. Ahora, ya son aptos para hacer los ejercicios de Karel que tienen un nivel de dificultad mas grande, solo necesitan práctica y creatividad. Aquí pueden encontrar ejercicios, les prometo que con practica en Karel, van a poder entender a la perfección puntadores en C, funciones recursivas, y no tendrán problemas con arboles estructuras etc. ya que karel es una versión mas básica de eso. Y además cuando lleguen a un lenguaje de alto nivel van a ver todo lo que les sirvió aprender a programar con este robotito Estén atentos!! Saludos!!

10 By Fantasía