elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Ejercicios
| | | |-+  Tutorial de Karel el robot - Aprendiendo a pensar como programador.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 4 5 Ir Abajo Respuesta Imprimir
Autor Tema: Tutorial de Karel el robot - Aprendiendo a pensar como programador.  (Leído 152,709 veces)
sirdarckcat
Aspirante a supervillano
Colaborador
***
Desconectado Desconectado

Mensajes: 7.029


No estoy loco, soy mentalmente divergente


Ver Perfil WWW
Tutorial de Karel el robot - Aprendiendo a pensar como programador.
« 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 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

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



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:


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


« Última modificación: 9 Mayo 2008, 02:36 am por sirdarckcat » En línea

Ertai
Colaborador
***
Desconectado Desconectado

Mensajes: 2.025


Ralph Wiggum


Ver Perfil
Re: Aprendiendo NO a programar, sino a pensar como programador.
« Respuesta #1 en: 19 Abril 2006, 09:06 am »

Yo hizé algo similar pero en Java.

Te suena JavaKara?

Muy bueno.


En línea

Si la felicidad se comprara, entonces el dinero sería noble.

Código:
void rotar_by_ref(int& a, int& b) {
   /* Quien dijo que no se podia sin una variable temporal? */
   *a = *a ^ *b;
   *b = *a ^ *b;
   *a = *a ^ *b;
}
sirdarckcat
Aspirante a supervillano
Colaborador
***
Desconectado Desconectado

Mensajes: 7.029


No estoy loco, soy mentalmente divergente


Ver Perfil WWW
Re: Aprendiendo NO a programar, sino a pensar como programador.
« Respuesta #2 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!!
« Última modificación: 23 Octubre 2007, 14:53 pm por sirdarckcat » En línea

BADBYTE-K
Knowledge is power, Diesel-K


Desconectado Desconectado

Mensajes: 2.329


Aprende todo lo que este a tu alkance


Ver Perfil WWW
Re: Aprendiendo NO a programar, sino a pensar como programador.
« Respuesta #3 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
En línea

euyyn

Desconectado Desconectado

Mensajes: 103


Apaga y sal a la calle con tus amigos. Yo también.


Ver Perfil
Re: Aprendiendo NO a programar, sino a pensar como programador.
« Respuesta #4 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.
En línea

Euyyn el astronauta
(las ganas mías, claro)
Astherix

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: Aprendiendo NO a programar, sino a pensar como programador.
« Respuesta #5 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 :)
En línea

sirdarckcat
Aspirante a supervillano
Colaborador
***
Desconectado Desconectado

Mensajes: 7.029


No estoy loco, soy mentalmente divergente


Ver Perfil WWW
Re: Aprendiendo NO a programar, sino a pensar como programador.
« Respuesta #6 en: 3 Julio 2007, 03:24 am »

http://ftp://www.olimpiadadeinformatica.org.mx/Karel_Inst.zip
En línea

zoeste

Desconectado Desconectado

Mensajes: 43



Ver Perfil
Re: Aprendiendo NO a programar, sino a pensar como programador.
« Respuesta #7 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..
En línea

No Subestimar!
vitaepe

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: Aprendiendo NO a programar, sino a pensar como programador.
« Respuesta #8 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
En línea

ASPED

Desconectado Desconectado

Mensajes: 7



Ver Perfil
Re: Aprendiendo NO a programar, sino a pensar como programador.
« Respuesta #9 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. ::)
En línea

Páginas: [1] 2 3 4 5 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Cómo dejar de pensar en algo? « 1 2 »
Foro Libre
Embusterillo de bolsillo 17 14,971 Último mensaje 26 Abril 2012, 02:17 am
por Constance
Como es la vida de un programador?
Programación General
Synth3tik0 7 13,329 Último mensaje 30 Julio 2011, 21:43 pm
por WHK
como crear un bot o (robot)
Programación General
craxy18 2 2,941 Último mensaje 2 Marzo 2014, 03:59 am
por Aristillus
Programa Karel el robot
Programación General
ing.pako-garcia 1 2,864 Último mensaje 1 Abril 2014, 04:21 am
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines