Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Manual de Karel Avanzado PDF
Manual de Karel Avanzado PDF
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.
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.
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.
1
By Fantasía
Código:
iniciar-programa
inicia-ejecucion
mientras no-orientado-al-este hacer gira-izquierda;
avanza;
suma(0);
avanza;
suma(0);
apagate;
termina-ejecucion
finalizar-programa
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;
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.
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;
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.
4= sucede(3);
3= sucede(2);
Si me entienden? sucede es igual al valor que tiene dentro de los paréntesis MAS 1.
4= precede(5);
3= precede(4);
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;
Código:
suma(0);
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.
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.
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.
Una vez que ya recibimos una variable en nuestra función, digamos que se llama "kora"
podemos hacer algunas cosas con ella.
Código:
si si-es-cero(kora) entonces inicio
apagate;
fin sino inicio
avanza;
fin;
¿Difícil?
NO
Y
O
8
By Fantasía
Y y O se usan para unir 2 o más sentencias.
Estas son para modificar las condiciones que vimos al principio del taller.
si-junto-a-zumbador
frente-libre
etc..
Código:
si junto-a-zumbador y frente-libre entonces ...
o un "mientras" así:
Código:
mientras junto-a-zumbador o frente-bloqueado hacer ...
no si-es-cero(precede(kora))
es decir..
es cero (4-1) ?
9
By Fantasía
nos regresa FALSO.
¿Me entendieron?
no FALSO = Verdadero
no Verdadero = FALSO
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