Foro de elhacker.net

Programación => Ejercicios => Mensaje iniciado por: sirdarckcat en 19 Abril 2006, 07:24 am



Título: Tutorial de Karel el robot - Aprendiendo a pensar como programador.
Publicado por: sirdarckcat en 19 Abril 2006, 07:24 am
Tutorial de Karel el robot
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 (http://www.olimpiadadeinformatica.org.mx/) 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:

(http://foro.elhacker.net/index.php?action=dlattach;topic=119279.0;id=1431;image)

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.. (http://www.google.com/search?q=Karel+download)

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:
(http://foro.elhacker.net/index.php?action=dlattach;topic=119279.0;id=1432;image)

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

:o 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
le agregué una linea al programa.. esta:
Citar

iniciar-programa
    inicia-ejecucion
        avanza;
        apagate;
    termina-ejecucion
finalizar-programa

Damos click en el botón COMPILAR.
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.

(http://foro.elhacker.net/index.php?action=dlattach;topic=119279.0;id=1433;image)

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

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 :o

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.

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:
(http://foro.elhacker.net/index.php?action=dlattach;topic=119279.0;id=1434;image)

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!!


Título: Re: Aprendiendo NO a programar, sino a pensar como programador.
Publicado por: Ertai en 19 Abril 2006, 09:06 am
Yo hizé algo similar pero en Java.

Te suena JavaKara?

Muy bueno.


Título: Re: Aprendiendo NO a programar, sino a pensar como programador.
Publicado por: sirdarckcat en 20 Abril 2006, 04:05 am
Pues este programa Karel, soporta Java, le llama "Jarel", JavaKara solo hay info en Aleman, :-/

Bueno, la sesión anterior fue una introducción al programa y al lenguaje, sinembargo creanme que eso es todo lo que sabe la mayoria de los que usan Karel, y es solo la superficie de sus capacidades.

Karel no puede hacer algo como y=((f^p)+7)/q es decir, no soporta signos ni operaciones.. lo que vieron la ves pasada es el 90% de su capacidad.

Sin embargo, hay maneras de elevar un numero al cuadrado, de sumar, de restar, de dividir etcetera..

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 despues dejarlos.

es decir, suponiendo que Karel ya esta 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-ziquierda;  (*giro a la derecha*)
avanza; (*avanzo*)
mientras junto-a-zumbador hacer coge-zumbador; (*cogo todos los zumbadores en 1,2*)
repetir 2 veces gira-izquierda; (*media-vuleta*)
avanza; (*avanzo*)
mientras algun-zumbador-en-la-mochila hacer deja-zumbador; (*dejo todos los zumbadores*)

esa es la forma mas sencilla, sinmebargo 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 mas 1,3 dejando los sumandos donde estan al finalizar la ejecución.

Hay otras miles de maneras de hacerlo, se podria hacer una funcion que copie los valores arriba, y despues los baje etc..

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

les pondre el código completo, pero lo voy a explicar mas abajo.

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 como funciona la recursividad de funciones.

miren:

Citar
define-nueva-instruccion  [nombre]  como  inicio
   si [condicion de salida inversa] entonces
       acciones a ejecutar
       [llamada a la misma funcion]
       acciones a ejecutar despues al final, la cantidad de veces que la funcion fue llamada
   fin;
fin;

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 numero 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 funcion 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;
aqui esta la llamada a si misma.

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
 denuevo lo mismo X veces
 dejo X zumbadores.
fin


para que lo vean mas claro, les pongo los colores..

Citar
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;

y para los que aun no entienden, por ejemplo si hay 2 zumbadores el codigo que ejecuta el programa realmente es este (sustituyo la llamada a karel por el codigo 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 teoria de recursividad.

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"

Espero me hayan entendido.. sino mandenme un MP y de tratare de expresar mejor.

Una vez que hayan entendido recursividad.. ya podran entender mejor el codigo.. solo me faltan 2 cosas por explicar.

La primera es.. que diablos es "sucede"

jeje la priemra vez que yo vi esa instrucción no le encontraba sentido..

bueno, aqui esta un ejemplo:

4=sucede(3);
3=sucede(2);

si me entienden? sucede es igual al valor que tiene dentro de los parentesis MAS 1.

bueno, sucede tiene una función heramana, llamada precede.

4=precede(5);
3=precede(4);

precede es igual al valor que tiene dentro de los parentesis MENOS 1.

una cosa mas.

las funciones de Karel pueden recibir parametros, y almacenarlos en variables.

:o
Parametro = dato extra pasado a una funcion
Variable = letra o palabra que almacena un numero. (en karel solo se pueden almacenar numeros)

en fin.

por ejemplo, si creamos una función asi:
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 si, 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 esla función, lo importante es que cuando mandamos llamar la función la mandamos llamar asi:
Código:
suma(0);

es decir inicialmente vale 0.

Bueno, una cosa mas respecto a esta función.

si usas un sino, el codigo que este en la acción del "sino" se ejecutara una sola vez cuando por primera vez no se cumpla la condición.

si no me entendieron, leanlo de nuevo:

si usas un sino, el codigo 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 mas:

si usas un sino, el codigo 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 analizemos 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 coga un zumbador.

Citar
suma(sucede(s));
y aqui es donde se llama la funcion a si misma, solo que esta ves avisa que S va a valer uno mas, de esta forma se va guardando en S la cantidad de zumbadores que había..

Citar
deja-zumbador;
aqui repone los zumbadores que cogió.

Citar
fin sino inicio
recuerdan la linea que deben leer muchas veces hasta entenderla?, si no entiendes que hace esto aqui, leela de nuevo.

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 deberian saber como funciona el 98% de Karel.. nos faltan 2 cosas, extremadamente faciles, y ya es todo lo que te puedo enseñar de Karel, una proxima sesión sera de como resolver problemas que parecen muy complicados.. de la manera mas sencilla posible.

Las 2 cosas que nos faltan son:

una ves 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, etonces en esta instruccion:

Código:
si si-es-cero(kora) entonces inicio
   apagate;
fin sino inicio
   avanza;
fin;

karel avanzara, porque kora no es cero.

¿dificil?

ahora tambien tenemos una cosa mas.

  • NO
  • Y
  • O

Y y O se usan para unir 2 o mas sentencias.

Y regresa Verdadero y 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" asi:

Código:
si junto-a-zumbador y frente-libre entonces ...

o un "mientras" asi:

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

:o
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) ?

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 revez.. 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 practica y creatividad.

Aqui 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 tendran problemas con arboles estructuras etc.. ya que karel es una version mas basica de eso.

http://www.cimat.mx:88/~amor/Omi/Entrenamiento/index.html

Y ademas cuando lleguen a un lenguaje de alto nivel van a ver todo lo que les sirvio aprender a programar con este robotsito ;)

Esten atentos!!

Saludos!!


Título: Re: Aprendiendo NO a programar, sino a pensar como programador.
Publicado por: BADBYTE-K en 21 Abril 2006, 04:26 am
sin duda es una gran herramienta, me ha gustado y se que le gustara más a unos amigos que desean algo similar a karel. Creo que es como todo lo que un novato soño para entrarle al tema.

me quito el sombrero ante el autor del soft y gracias por compartir la información SirDarckCat es muy util y sin duda lo recomendare.


saludos


Título: Re: Aprendiendo NO a programar, sino a pensar como programador.
Publicado por: euyyn en 27 Julio 2006, 19:55 pm
Por lo que dices, el lindo y obediente robot Karel no es más que una máquina de Turing con "cinta" bidimensional (no se llamaría cinta, ¿no?).
Así que con él puedes programar cualquier algoritmo que se haya inventado. Incluso puedes programar un Karel virtual dentro de Karel.
Qué grande era Turing.


Título: Re: Aprendiendo NO a programar, sino a pensar como programador.
Publicado por: Astherix en 3 Julio 2007, 02:30 am
Buenas noches... por favor podrias subir el karel a una pagina o pasarme un link (vigente) del instalador??? me interesa muchisimo :)


Título: Re: Aprendiendo NO a programar, sino a pensar como programador.
Publicado por: sirdarckcat en 3 Julio 2007, 03:24 am
ftp://www.olimpiadadeinformatica.org.mx/Karel_Inst.zip


Título: Re: Aprendiendo NO a programar, sino a pensar como programador.
Publicado por: zoeste en 22 Agosto 2007, 18:01 pm
sin duda es una gran herramienta, me ha gustado y se que le gustara más a unos amigos que desean algo similar a karel. Creo que es como todo lo que un novato soño para entrarle al tema.

me quito el sombrero ante el autor del soft y gracias por compartir la información SirDarckCat es muy util y sin duda lo recomendare.


saludos

es verdad, yo para mi que recien empiezo con el tema me intereso mucho, muchas gracias.......

voy a practicar esto...


saludos y suerte..


Título: Re: Aprendiendo NO a programar, sino a pensar como programador.
Publicado por: vitaepe en 22 Agosto 2007, 21:27 pm
Trate de bajarme el programa pero el link no funca si puedes colgarlo seria bacan, esta interesante  ;D


Título: Re: Aprendiendo NO a programar, sino a pensar como programador.
Publicado por: ASPED en 10 Octubre 2007, 21:14 pm
woww :D :D la verdad muy interesante , jejeje creo k estado x el camino equivocado aunque tengo nociones de programación, me era muy dificil ver sus aplicaciones en este tipo de cosas :rolleyes: jeje ya estoy aburrido de las aplicaciones de consola, esque es todo lo que he podido aprender hasta ahora pero estoy empezando a abri los  ojos aqui en el foro. :o :o

saludos  muy buen  post. ::)


Título: Re: Aprendiendo NO a programar, sino a pensar como programador.
Publicado por: Kaera999 en 10 Noviembre 2007, 22:01 pm
Pue muchas gracias me avente a hacer de karel algo tangible y real (osea un robot) y funciono como esperaba poir el momento lo estoy mejorando en la parte mecanica pero como dice al principio es muy obediente y me hizo sacar un 10 en la escuela y me agrado ver la cara de los demas que claro me hubiera quedado igual si no hubiera leido eso....

despues publico las ordenes de algebra lineal para quien le interese la parte matematica de todo esto.....



Título: Re: Aprendiendo NO a programar, sino a pensar como programador.
Publicado por: Enemy en 17 Noviembre 2007, 17:35 pm
Impresionante!!! me paracio muy interesante, me gusto la idea de controlar a Karel gracias Sirdarckcat y muy buen tema!!  ;)



SALUD.O.S


Título: Re: Aprendiendo NO a programar, sino a pensar como programador.
Publicado por: Tyrz en 17 Noviembre 2007, 18:41 pm
ostia al principio no me atrajo mucho pero la verdad es que está muy guapo :o
GRACIAS


Título: Re: Aprendiendo NO a programar, sino a pensar como programador.
Publicado por: berz3k en 18 Noviembre 2007, 01:23 am

Me ha gustado el programa sirdarckcat, me gusta la logica y pensamiento como programador eso rul3z.

-berz3k.


Título: Re: Aprendiendo NO a programar, sino a pensar como programador.
Publicado por: BenRu en 18 Noviembre 2007, 01:42 am
Esta bastante bien, pero creo que LOGO sería mejor para este tipo de cosas, ya que es mucho mas amplio y nos permite algunas cosas mas que nos pueden ser utiles (como girar en X grados) entre otras.

Un saludo


Título: Re: Aprendiendo NO a programar, sino a pensar como programador.
Publicado por: sirdarckcat en 18 Noviembre 2007, 01:50 am
Pues en LOGO tienes la facilidad de hacer muchas cosas que no te permiten desarrollar las habilidades de programador que Karel te permite.. debido a que en LOGO si programas, y en Karel aprendes a pensar como programar.

Saludos!!


Título: Re: Aprendiendo NO a programar, sino a pensar como programador.
Publicado por: Gusan0r en 18 Noviembre 2007, 18:51 pm
hola a todos alguien que me pase a karel que no me andan los links =S saludos!


Título: Re: Aprendiendo NO a programar, sino a pensar como programador.
Publicado por: sirdarckcat en 18 Noviembre 2007, 22:40 pm
lo puedes bajar de ftp://www.olimpiadadeinformatica.org.mx/


Título: Re: Aprendiendo NO a programar, sino a pensar como programador.
Publicado por: Enemy en 19 Noviembre 2007, 00:19 am
Hola man, he terminado con todos los ejercicios que has de postear, no tendrias mas?? o alguna pagina donde hayan ejercicios mas complicados?? o ejercicios para pascal??

 :huh:

SALUD.O.S


Título: Re: Aprendiendo NO a programar, sino a pensar como programador.
Publicado por: sirdarckcat en 20 Noviembre 2007, 02:51 am
Sip aqui tienes varios:

http://cbtis122.net/omi/karel/problemas.php


Título: Re: Aprendiendo NO a programar, sino a pensar como programador.
Publicado por: Enemy en 22 Noviembre 2007, 17:52 pm
Gracias  ;)!!! tan wuenitas las practicas jeje!


SALUD.O.S


Título: Re: Aprendiendo NO a programar, sino a pensar como programador.
Publicado por: alt_hack_f4 en 19 Diciembre 2007, 17:42 pm
Muy bueno, para aprender, sobre todo recursividad q siempre he tenido problemas con eso  :xD, ya encontre mi profesor personal


Título: Re: Aprendiendo NO a programar, sino a pensar como programador.
Publicado por: Straust en 3 Enero 2008, 20:12 pm
si don SirDarckCat es buenismo el tema, con esto si podré aprender a pensar como programador ps entender estosprimeros pasos si que me sacaron la leche pero aun asi sigo intentandolo.
grax
salu2!


Título: Re: Aprendiendo NO a programar, sino a pensar como programador.
Publicado por: Kritar en 8 Marzo 2008, 22:20 pm
Me sacó la cabeza!!!!!


Título: Re: ( Tutorial de Karel el robot ) - Aprendiendo a pensar como programador.
Publicado por: walter_rel en 28 Abril 2008, 09:29 am
Muy buenisimo el tema, creo que asi me servira para practicar un poco y demás. Muchas gracias y muchas gracias  ;D

Saludos!!


Título: Re: Tutorial de Karel el robot - Aprendiendo a pensar como programador.
Publicado por: :ohk<any> en 12 Junio 2008, 17:09 pm
:o :o
POWA

Muy bueno  :D


Título: Re: Tutorial de Karel el robot - Aprendiendo a pensar como programador.
Publicado por: el_Eddy en 14 Agosto 2008, 00:37 am
buena herramienta muy util para los que empiesan en esto de la proramacion y para pasar el rato XD:..


Título: Re: Tutorial de Karel el robot - Aprendiendo a pensar como programador.
Publicado por: figoti en 17 Octubre 2008, 04:34 am
buen aporte sabes esto deberia ir pinned para aquellos que nos estamos iniciando en las lides de la programacion, ayuda mucho a "pensar" como programador que en el fondo es lo unico importante el resto es memoria y manuales.


Título: Re: Tutorial de Karel el robot - Aprendiendo a pensar como programador.
Publicado por: el_chavo en 6 Enero 2009, 16:16 pm
muy bueno a mi me encantaria aprender a programar ya tengo algunos conocimientos de cracking pero me gustaria programar se agradece man


Título: Re: Tutorial de Karel el robot - Aprendiendo a pensar como programador.
Publicado por: Zaxuhe en 17 Enero 2009, 01:46 am
emmm se publico una nueva pagina www.gira-izquierda.com, es buena para aprender ahi vienen ejercicios de karel, tutoriales y soluciones tambien puedes resolver problemas y se te evalua en linea ;D


Título: Re: Tutorial de Karel el robot - Aprendiendo a pensar como programador.
Publicado por: sirdarckcat en 18 Enero 2009, 07:38 am
para ese caso esta mas padre http://www.cmirg.com/karelotitlan/


Título: Re: Tutorial de Karel el robot - Aprendiendo a pensar como programador.
Publicado por: DarkItachi en 8 Abril 2009, 13:39 pm
Me suena haber visto esto en otra parte.


Título: Re: Tutorial de Karel el robot - Aprendiendo a pensar como programador.
Publicado por: MasterPunk en 26 Junio 2009, 23:22 pm
Hola, quiero pediros ayuda con un ejercicio que viene en la -ayuda- del programa.
Ejercicio 8: crear un programa que ayude a karel a escapar de un laverinto que no contiene islas...
Le llevo todo el dia dandi vueltas... pero no lo consigo. Os agradeceria la solucion, o una ayuda para consegirlo.
Gracias..................... MasterPunk


Título: Re: Tutorial de Karel el robot - Aprendiendo a pensar como programador.
Publicado por: sirdarckcat en 27 Junio 2009, 06:40 am
sigue la pared de la derecha.. si la salida te la dan con un zumbador seria algo como.. (hace años que no programo en karel por lo que puede que no funcione..)

Código:
mientras no-junto-a-zumbador hacer inicio
 mientras derecha-bloqueada hacer inicio
 si frente-libre entonces
 avanza;
 sino
 gira-izquierda;
 fin;
 repetir 3 veces
 gira-izquierda;
fin;



Título: Re: Tutorial de Karel el robot - Aprendiendo a pensar como programador.
Publicado por: MasterPunk en 27 Junio 2009, 12:31 pm
Algo asi tenia yo...

me dice que el procedimiento SINO no ha sido previamentedefinido... :(


Título: Re: Tutorial de Karel el robot - Aprendiendo a pensar como programador.
Publicado por: MasterPunk en 27 Junio 2009, 12:33 pm
Oh!! ya vi el fallo. Ya esta.. programa compilado. Gracias :)


Título: Re: Tutorial de Karel el robot - Aprendiendo a pensar como programador.
Publicado por: le_roi en 23 Julio 2009, 03:39 am
Estaba planeando hacer un pequeño manual/curso de introducción a la programación para unos compañeros de la facultad y esta es sin duda una herramienta invaluable.

Aprender las bases de la programación sin enredarse con la sintaxis característica de cada lenguaje ayuda mucho, sin mencionar que los resultados son visibles desde el principio.

Para los interesados en experimentar con otras opciones similares a Karel acá tienen para entretenerse http://en.wikipedia.org/wiki/Educational_programming_language (http://en.wikipedia.org/wiki/Educational_programming_language).

Gracias por abrirme los ojos a este tipo de "herramientas" de aprendizaje.
Espero les sirva, un saludo.


Título: Re: Tutorial de Karel el robot - Aprendiendo a pensar como programador.
Publicado por: Shadowofvilla en 4 Agosto 2009, 05:17 am
que bueno, muchas gracias por el aporte
esta de 10 y me va ha servir mucho


Título: Re: Tutorial de Karel el robot - Aprendiendo a pensar como programador.
Publicado por: Og. en 23 Octubre 2009, 03:20 am
me va aservir para OMIjal  :xD


Título: Re: Tutorial de Karel el robot - Aprendiendo a pensar como programador.
Publicado por: camaleon123 en 30 Diciembre 2009, 01:53 am
quizas vaya contra las reglas, pero he llegado desde google y me ha gustado el programa Karel, pero mencionan uno llamado LOGO he buscado en g00gle y no arroja un programa llamado LOGO, podria alguien que lo conozca decirme como se llama o que empresa hace ese programa o que pagina lo bajo?

Asi sirve de referencia para los demas que lleguen a este web


Título: Re: Tutorial de Karel el robot - Aprendiendo a pensar como programador.
Publicado por: Da Silva en 3 Noviembre 2011, 03:49 am
Necesito ayuda para resolver el problemario básico 2 de karel y es para mañana :((


Título: Re: Tutorial de Karel el robot - Aprendiendo a pensar como programador.
Publicado por: ivanzinho en 10 Mayo 2012, 03:16 am
Hola a todos.

Les vengo a pedir su colaboracion ya que veo que hay muchos programadores de karel aqui hahaha :)

Bueno, lo que pasa es que tengo una version antigua de karel, he aqui la referencia:
http://mormegil.wz.cz/prog/karel/prog_doc.htm
Como verán cuando uno define funciones, no puede usar parametros y no puedo declarar variables tampoco.

El problema que tengo, es que necesito recoger todos los beepers y luego en otra ubicacion ponerlos en otro lado, pero no se como hacerlo, estoy ya realmente desesperado.

Mil gracias de antemano.