Les advierto, en este pequeño taller no van a aprender a programar en ningun lenguaje que les servira en el futuro.
Aprenderan la sintaxis de Java y/o de Pascal pero NO aprenderan las instrucciones nativas de ninguno de estos.
En este taller aprenderan a programar a un robot virtual llamado Karel.
Antes que nada yo no hize Karel, ni ayude a su desarrollo, solo lo encontre, lo use y me gusto para hacer este taller.
Karel es un robot, con forma de flecha azul xD
es tonto.
no sabe nada mas que:
avanza;
gira-izquierda;
ah y:
coge-zumbador;
deja-zumbador;
Bueno, pero tiene buena memoria, y es muy obediente.
Este programa se usa en la OMI y desconozco si se use en la IOI tambien.
En fin, "Karel el robot" (de ahora en adelante Karel) puede recibir las instrucciones antes mencionadas.. y vive en un mundo de cuadritos grises, de 100x100.
Este es un ejemplo de Karel en acción:
Lo pueden descargar aqui:
http://www.olimpiadadeinformatica.org.mx/Karel.htm
Hay otras versiones (las originales) pero en ingles y para java aqui:
http://csis.pace.edu/~bergin/KarelJava2ed/KJRDistribution060110.zip
http://csis.pace.edu/~bergin/KarelJava2ed/kareluniverse/kareluniversedist060309.zip
http://www.wiley.com/college/pattis/0471597252/instructor/karel.exe
http://sourceforge.net/project/showfiles.php?group_id=8696
etc..
En fin, abrimos el programa, nos vamos a la pestaña de Mundo.
En la esquina inferior izquierda, y viendo hacia arriba, se encuentra Karel.
si dan click derecho en una zona blanca, podran ver un menu contextual, donde les preguntan si quieren colocar a Karel en ese lugar, y si quieres poner algun zumbador en ese lugar. si dan click al lado de un cuadro gris, se pondra una pared .
en fin.. hagamos un "Hola Mundo" (o su equivalente) en Karel.
ponemos a karel (orientado al norte) en las coordenadas: 2,2 es decir aqui:
Nos vamos a la pestaña de Programa.
damos click en Nuevo.
vamos a ver esto:
Código:
iniciar-programa
inicia-ejecucion
apagate;
termina-ejecucion
finalizar-programa
esto hace:
Código:
inicia el programa
inicia lo que va a ejecutar
apaga a karel
termina lo que va a ejecutar
finaliza el programa
facil, no?
Todo lo que queramos que haga karel, lo debemos poner despues de:
inicia-ejecucion
y antes de:
termina-ejecucion
ojo!! NUNCA pero NUNCA pongan acentos.
ahora, si queremos que Karel haga algo, pues empezamos a ordenarle:
Código:
iniciar-programa
inicia-ejecucion
avanza;
apagate;
termina-ejecucion
finalizar-programa
Citar
iniciar-programa
inicia-ejecucion
avanza;
apagate;
termina-ejecucion
finalizar-programa
es muy importante sino no funciona.. acostumbrence a oprimir ese botón, en la gran mayoria de los lenguajes sino es que todos se necesita hacer algo similar antes de ver que hace tu programa.
Una vez que dimos click en COMPILAR. nos vamos a la pestaña de Ejecutar.
Y ahi, al botón Ejecutar.
Genial, Karel avanza un espacio, y se apaga.
Damos Aceptar, y regresamos a la pestaña de Programa.
despues del avanza le agregamos un gira-izquierda;
OJO!! es MUY importante que al finalizar cada instrucción agreguen un "punto y coma" = ";"
El código queda asi:
Citar
iniciar-programa
inicia-ejecucion
avanza;
gira-izquierda;
apagate;
termina-ejecucion
finalizar-programa
Damos click a COMPILAR!!
Vamos a la pestaña de Ejecución.
Damos Correr.
y listo, Karel:
avanza y despues gira a la izquierda
regresamos a Programa.
despues del gira-izquierda agregamos 2 avanza;
queda asi:
Citar
iniciar-programa
inicia-ejecucion
avanza;
gira-izquierda;
avanza;
avanza;
apagate;
termina-ejecucion
finalizar-programa
Damos a COMPILAR!!
vamos a la pestaña de Ejecutar
Damos click en Correr.
y Tssss error.
Obviamente Karel es un robot no un fantasma y no puede pasar por una pared.. resultado el programa te salta error.
En fin, lo superamos entonces ahora tenemos que pensar.. diablos y como va a saber karel si tiene enfrente una pared..
pues bueno, existe algo llamado "si", y se usa asi:
si [condicion] entonces [accion]
ahora, las condiciones que puede detectar Karel son:
Citar
frente-libre
junto-a-zumbador
orientado-al-este
frente-bloqueado
no-junto-a-zumbador
orientado-al-oeste
izquierda-libre
algun-zumbador-en-la-mochila
no-orientado-al-norte
izquierda-bloqueada
ningun-zumbador-en-la-mochila
no-orientado-al-sur
derecha-libre
orientado-al-norte
no-orientado-al-este
derecha-bloqueada
orientado-al-sur
no-orientado-al-oeste
junto-a-zumbador
orientado-al-este
frente-bloqueado
no-junto-a-zumbador
orientado-al-oeste
izquierda-libre
algun-zumbador-en-la-mochila
no-orientado-al-norte
izquierda-bloqueada
ningun-zumbador-en-la-mochila
no-orientado-al-sur
derecha-libre
orientado-al-norte
no-orientado-al-este
derecha-bloqueada
orientado-al-sur
no-orientado-al-oeste
de hecho hay alguna que otra mas, pero esas son mas avanzadas.
Es obvio lo que detecta cada condición ¿no?
Citar
frente-libre - Detecta si el frente esta libre
junto-a-zumbador - Detecta si esta junto a zumabador
orientado-al-este - Detecta si Karel esta viendo al este
frente-bloqueado - Detecta si esta bloquado el frente
no-junto-a-zumbador- Detecta si no esta junto a zumbador
etc..
Genial, ahora usemos "si".
Citar
iniciar-programa
inicia-ejecucion
avanza;
gira-izquierda;
avanza;
si frente-libre entonces avanza;
apagate;
termina-ejecucion
finalizar-programa
damos click a COMPILAR!!
Pestaña de Ejecutar, Correr.
Y ya no sale error
¿que bien no?
Bueno, ahora coloquen a karel en las coordenadas 7,1
para cambiar de posicion a Karel debes irte a la pestaña Mundo.
Nos regresamos a la pestaña programa.
Ahora nosotros queremos que llegue a las coordenadas 1,1
que hacemos?
facil..
Citar
iniciar-programa
inicia-ejecucion
gira-izquierda;
avanza;
avanza;
avanza;
avanza;
avanza;
avanza;
apagate;
termina-ejecucion
finalizar-programa
Bien, pero les presento a "repetir":
funciona asi:
repetir [cantidad] veces [accion]
entonces si ponemos:
Citar
iniciar-programa
inicia-ejecucion
gira-izquierda;
repetir 6 veces avanza;
apagate;
termina-ejecucion
finalizar-programa
hace lo mismo que el anterior.
Bueno, ahora que tal que te digo, que Karel va a estar en una posicion desconocida, y debes llegar a 1,1.
Bueno les presento a "mientras" funciona parecido a "si":
mientras [condicion] hacer [accion]
y hace que mientras se cumpla la condición, haga la acción
asi que lo primero, es ver a la izquierda
Código:
gira-izquierda;
despues mientras tengamos el frente-libre hacer avanza;
Código:
gira-izquierda;
mientras frente-libre hacer avanza;
despues debemos ver hacia abajo, porque no sabemos a que altura este Karel.
Código:
gira-izquierda;
y hacemos lo mismo, buscar la pared.
Código:
mientras frente-libre hacer avanza;
el codigo queda asi:
Código:
iniciar-programa
inicia-ejecucion
gira-izquierda;
mientras frente-libre hacer avanza;
gira-izquierda;
mientras frente-libre hacer avanza;
apagate;
termina-ejecucion
finalizar-programa
Genial, ahora coloca a Karel en el mundo en cualquier lugar orientado al norte, y veras que llegara a 1,1
Ahora, si nos dicen:
Haz que Karel llegue a 1,1 sin saber hacia donde esta viendo karel al principio.
es decir, no sabemos si esta viendo al norte,sur,este,oeste..
entonces usamos mientras.
Código:
mientras no-orientado-al-oeste hacer gira-izquierda;
lo que hace es que va a girar a la izquierda mientras no este orientado al oeste.
colocamos esta linea al prinicpio en lugar de el gira-izquierda, y..
Citar
iniciar-programa
inicia-ejecucion
mientras no-orientado-al-oeste hacer gira-izquierda;
mientras frente-libre hacer avanza;
gira-izquierda;
mientras frente-libre hacer avanza;
apagate;
termina-ejecucion
finalizar-programa
Ok, ahora en el mundo, pon karel orientado en cualquier posición y en cualquier lugar y llegara a 1,1
Bueno, es facil, facil..
Ahora ¿que pasa si en un "si", "mientras" o un "repite" quieres hacer mas de una acción?
Facil, usamos:
inicio
fin;
OJO!! "inicio" NO lleva comilla, "fin;" SI.
todo lo que este entre inicio y fin se tomara como una acción.
ADEMAS.. "si" nos permite jugar aun mas con el.. ya que existe "sino"
funciona asi:
si [condicion] entonces inicio
acciones;
fin sino inicio
acciones2;
fin;
es decir.
si se cumple la condicion haz "acciones" sino se cumple haz "acciones2"
por ejemplo:
Código:
si orientado-al-norte entonces inicio
avanza;
gira-izquierda;
fin sino inicio
repetir 2 veces inicio (*esto es igual a media vuelta*)
gira-izquierda;
fin;
fin;
Nota!!
En Karel todo lo que pongas entre "(*" y "*)" no se tomara en cuenta como instruccion.
Es preferible que siempre uses "inicio" y "fin;" sino puedes llegar a tener errores dificiles de encontrar.
Genial ya casi eres un experto en Karel!! (xD)
ahora sigue declarar funciones.
por ejemplo.. Karel NO tiene un gira-derecha;
que mal ¿no?
pues entonces le enseñas a Karel a girar a la derecha
las funciones se crean asi:
define-nueva-instruccion [nombre] como inicio
[acciones]
fin;
Nota!!
recuerda NUNCA poner acentos.
recuerda PONER los punto y coma;
recuerda ACENTOS estan prohibidos
xD.
es decir para enseñarle a Karel a girar a la derecha, este es el código:
Código:
define-nueva-instruccion gira-derecha como inicio
repetir 3 veces gira-izquierda;
fin;
¿Estamos de acuerdo que girar a la derecha es igual que girar 3 veces a la izquierda no?
ahora, es muy importante, las funciones NO se ponen despues de inicia ejecucion, se ponen ANTES!!
vean gira-derecha iria aqui:
Citar
iniciar-programa
define-nueva-instruccion gira-derecha como inicio
repetir 3 veces gira-izquierda;
fin;
inicia-ejecucion
gira-derecha;
apagate;
termina-ejecucion
finalizar-programa
Para finalizar, Karel sabe hacer 2 cosas mas.
coge-zumbador;
y
deja-zumbador;
el primero, SI esta arriba de un zumbador, lo agarra, si no SALE ERROR, (esto lo compones usando "si" y la condición "junto-a-zumbador")
el segundo, SI tiene algun zumbador en la mochila (lo especificas en el mundo) lo deja si no SALE ERROR.
y.. eso es lo básico de Karel.. veran que no es muy dificil.. pero ahora se supone que con lo que saben, deben hacer ejercicios muy complejos.. no se preocupen no se los dejare hasta que les enseñe recursividad y paso de variables, pero enserio que pueden complicarte MUCHO la vida con este robotito.
En el programa en la Pestaña ayuda esta un pequeño tutorial de Karel donde les explican un poco mas avanzado esto..
Sin embargo deben poder ya con muchos problemas con Karel.
Les dejo algunos ejercicios.
Citar
Karel inicia en las coordenadas 1,1 orientado al norte.
Sobre el inicia un camino de zumbadores hacia arriba, tu debes hacer un programa que se detenga cuando ya no haya zumbadores o al chocar con pared.
Sobre el inicia un camino de zumbadores hacia arriba, tu debes hacer un programa que se detenga cuando ya no haya zumbadores o al chocar con pared.
Citar
Karel inicia en las coordenadas 2,1 y su orientación es desconocida, en (1-2) hay una pared de una altura desconocida, tu trabajo es hacer un programa que haga que Karel llegue a 1,1
Ejemplo:
Ejemplo:
Hay mas ejercicios en http://mundodekarel.cjb.net/ y en http://www.olimpiadadeinformatica.org.mx/Karel.htm
sin embargo por el momento solo podrian hacer ejercicios de dificultad baja, en la proxima sesión les pondre programación de Karel avanzada (recursividad, paso de variables, uso de precede y sucede, si-es-cero, etc..)
mientras tanto, si quieren (y si hay alguien que realmente llego hasta aqui.. xD) pongan sus soluciones, y pues suerte!!
Saludos!!