Академический Документы
Профессиональный Документы
Культура Документы
Gua General
ndice.
INDICE ........................................................................................................................... 2 INTRODUCCION ............................................................................................................. 3 APRENDIENDO A PROGRAMAR EN KAREL (PASCAL) ......................................................... 4
CONDICIONES PARA FUNCIONES SI Y MIENTRAS ............................................................................... 5 USO DE LAS CONDICIONES INICIO Y FIN (EN CASO DE TENER MAS INSTRUCCIONES EN UNA CONDICION MIENTRAS O SI) ... 7 USO DEL Y Y DEL O EN CONDICIONES SI Y MIENTRAS ................................................................... 7 CREANDO NUEVAS FUNCIONES .................................................................................................... 8 RECURSIVIDAD EN KAREL ............................................................................................................ 9 EJEMPLO BASICO DE KAREL PARA SU COMPRENSIN ....................................................................... 13
....................................................................................................................................... 19 USO DEL && (AND) Y DEL || (OR) EN CONDICIONES IF Y WHILE ................................................. 19 CREANDO NUEVAS FUNCIONES .................................................................................................. 20 RECURSIVIDAD EN KAREL .......................................................................................................... 21 EJEMPLO BASICO DE KAREL PARA SU COMPRENSIN ....................................................................... 26
Introduccin.
Esta gua es para uso general, aunque es preferible que sea manejada por un profesor o un conocedor que al menos sepa lo bsico de la programacin para poder comprender la lgica empleada, no presenta paso a paso todo en torno a la forma de programar con karel, presenta las instrucciones, funciones, condiciones y ejemplos de cdigos utilizados de forma general. Karel como usted lector ya lo sabe es un programa que necesita instrucciones de programacin para resolver situaciones, karel se presenta como la flecha que se posiciona en cualquier lugar de su mundo de 100 * 100. Sabemos que karel el robot puede leer 2 leguajes en particular; PASCAL o JAVA, esta gua presenta los 2 para su rpido empleo, contiene todas las instrucciones necesarias para desarrollar complejos programas y resolver las diferentes situaciones que se le presenten en torno a este software. Esta gua se desarrollo a partir de las publicaciones en internet relacionadas a la forma de programar en karel, se hizo para una comprensin general y sintetizada de lo que es trabajar la lgica y el razonamiento bajo el software de karel.
Esta es la sintaxis inicial de karel, la estructura bsica de cmo inicia el cdigo y como se finaliza:
iniciar-programa inicia-ejecucion apagate; termina-ejecucion finalizar-programa
iniciar-programa inicia-ejecucion apgate; termina-ejecucion finalizar-programa avanza; gira-izquierda; coge-zumbador; deja-zumbador repetir [cantidad] veces [accin] mientras [condicin] hacer [accin] si [condicin] entonces y o
[accin]
Da comienzo al cdigo pascal Determina que da inicio a las instrucciones Declara que no se harn mas acciones Declara que ya no hay mas instrucciones Finaliza el cdigo pascal Karel se mueve un espacio al frente Karel voltea hacia la izquierda Karel recoge un zumbador Karel suelta un zumbador Indica que un movimiento se repetir X veces Mientras se cumpla una condicin karel realizara algo Si una condicin se cumple entonces Karel realizara algo Une 2 condiciones, para que se realice la accin se deben cumplir las 2 condiciones Une 2 condiciones, para que se realice la accin cualquiera de ellas se debe de cumplir
iniciar-programa inicia-ejecucion avanza; gira-izquierda; avanza; si frente-libre entonces avanza; apagate; termina-ejecucion finalizar-programa
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
Ejemplo de repetir:
Uso de las condiciones inicio y fin (en caso de tener mas instrucciones en una condicin mientras o Si).
Ejemplo:
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;
Para el uso del or o como es en pascal el o, este tambin une dos condiciones, pero en este caso para que Karel realice un movimiento o una accin, no es necesario que las dos forzosamente se cumplan, cualquiera de las dos se debe de cumplir, no importa si es la primera o la segunda.
Por ejemplo podemos poner un "mientras" as: Cdigo: mientras junto-a-zumbador o frente-bloqueado hacer...
Ejemplo:
define-nueva-instruccion gira-derecha como inicio repetir 3 veces gira-izquierda; fin;
Recursividad en Karel.
La recursividad en Karel en esta gua se presenta de forma clara para la mejor comprensin y explicacin.
Aqu esta el cdigo completo, pero para su comprensin lo vamos a explicar mas abajo. Cdigo: 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 cdigo hay que explicar como funciona la recursividad de funciones.
Miren: Citar
define-nueva-instruccion [nombre] como inicio si [condicin de salida inversa] entonces acciones a ejecutar [llamada a la misma funcion] acciones a ejecutar despus al final, la cantidad de veces que la funcin fue llamada fin; fin;
Se copia el nmero de zumbadores en el espacio de adelante. Veamos porque.. Cdigo: define-nueva-instruccion karel como inicio Creamos la funcin. Cdigo: si junto-a-zumbador entonces inicio Esta es nuestra condicin de salida, es decir la recursividad (llamada a una funcion dentro de su misma) solo se ejecuta mientras esta condicin sea verdadera. Cdigo: coge-zumbador; avanza; deja-zumbador; gira-izquierda;gira-izquierda; avanza; gira-izquierda;gira-izquierda; Esto es la seccin donde coge el zumbador, lo deja adelante, y regresa a la posicin original. Cdigo: karel; aqu esta la llamada a si misma. Cdigo: 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: Cdigo: si hay zumbadores agarro uno lo pongo adelante de nuevo lo mismo X veces dejo X zumbadores. fin
10
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 cdigo que ejecuta el programa realmente es este (sustituyo la llamada a karel por el cdigo del mismo). Cdigo: 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;
11
define-nueva-instruccion ve-arriba como inicio si no-orientado-al-norte entonces inicio gira-izquierda; ve-arriba; fin; fin;
Este cdigo girara a la izquierda hasta que este no se cumpla: "no-orientado-al-norte" es decir, girar: "mientras no-orientado-al-norte"
12
iniciar-programa inicia-ejecucion gira-izquierda; avanza; avanza; avanza; avanza; avanza; avanza; apagate; termina-ejecucion finalizar-programa
Lo hacemos con repetir: Citar
13
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
14
15
Esta es la sintaxis inicial de karel, la estructura bsica de cmo inicia el cdigo y como se finaliza:
class program { program() { turnoff(); }
class program(); program(); turnoff(); move(); turnleft(); pickbeeper(); putbeeper(); iterate(cantidad) {acciones} while(condiciona evaluar) { acciones if(condicin) &&(and) ||(or)
{accin}
Da comienzo al cdigo pascal Determina que da inicio a las instrucciones Declara que no se harn mas acciones Karel se mueve un espacio al frente Karel voltea hacia la izquierda Karel recoge un zumbador Karel suelta un zumbador Indica que un movimiento se repetir X veces
}
Mientras se cumpla una condicin karel realizara algo Si una condicin se cumple entonces Karel realizara algo Une 2 condiciones, para que se realice la accin se deben cumplir las 2 condiciones Une 2 condiciones, para que se realice la accin cualquiera de ellas se debe de cumplir
16
17
class program { program() { while(notFacingWest) { turnleft(); } while(frontIsClear) { move(); } turnleft(); while(frontIsClear) { move(); } turnoff(); } }
Ejemplo de iterate:
18
Uso de las condiciones inicio y fin de java (en caso de tener mas instrucciones en una condicin while o if).
Las condiciones de inicio y fin no son ms que las llaves que indican las instrucciones, en este caso se definen como if anidados.
if(condicin) { acciones(); } else { acciones2(); }
Ejemplo:
class program { program() { if(facingNorth) { move(); turnleft(); } else { iterate(2) { turnleft(); } } turnoff(); } }
Para el uso del or, este tambin une dos condiciones, pero en este caso para que Karel realice un movimiento o una accin, no es necesario que las dos forzosamente se cumplan, cualquiera de las dos se debe de cumplir, no importa si es la primera o la segunda.
19
Ejemplo:
define turnright() { iterate(3) { turnleft(); } }
20
Recursividad en Karel.
La recursividad en Karel en esta gua se presenta completa para la mejor comprensin y explicacin del docente.
Aqu esta el cdigo completo, pero para su comprensin lo vamos a explicar mas abajo. Cdigo: class program { define suma(s){ if(nextToABeeper){ pickbeeper(); suma(succ(s)); putbeeper(); } else { iterate(2) { turnleft(); } while(frontIsClear){ move(); } iterate(2) { turnleft(); } iterate(3) { move(); } iterate(s) { putbeeper(); } iterate(2) { turnleft(); } while(nextToABeeper){ move(); } iterate(2) { turnleft(); } } } program() { while(notFacingEast){ turnleft(); } move(); suma(0); move(); suma(0); turnoff(); } }
21
Miren: Citar
define nueva_instruccion() { if(condicin de salida inversa){ acciones a ejecutar [llamada a la misma funcion] acciones a ejecutar despus al final, la cantidad de veces que la funcin fue llamada } }
22
23
define karel() { if(nextToABeeper){ pickbeeper(); move(); putbeeper(); turnleft(); turnleft(); move(); turnleft(); turnleft(); karel(); putbeeper(); } }
Y para los que aun no entienden, por ejemplo si hay 2 zumbadores el cdigo que ejecuta el programa realmente es este (sustituyo la llamada a karel por el cdigo del mismo). Cdigo: define karel(){ if(nextToABeeper){ pickbeeper(); move(); putbeeper(); turnleft(); turnleft(); move(); turnleft(); turnleft(); if(nextToABeeper) { (*ESTA ES LA MISMA FUNCION OTRA VEZ*) pickbeeper(); move(); putbeeper(); turnleft(); turnleft(); move(); turnleft(); turnleft(); if(nextToABeeper) { (*AQUI LA CONDICION YA NO SE CUMPLE*) } putbeeper(); } (*AQUI TERMINA*) putbeeper(); } }
24
Este cdigo girara a la izquierda hasta que este no se cumpla: "notFacingNorth" es decir, girar: "mientras no este orientado al norte"
25
class program { program() { turnleft(); move(); move(); move(); move(); move(); move(); turnoff(); } }
Lo hacemos con repetir: Citar
26
El cdigo queda as: Cdigo: class program { program() { turnleft(); while(frontIsClear) { move(); } turnleft(); while(frontIsClear) { move(); } turnoff(); } } Karel estar orientado al norte y llegara a la posicin 1,1. Pongmoslo ms difcil: 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. Cdigo: while(notFacingWest) { turnleft(); } Lo que hace es que va a girar a la izquierda mientras no este orientado al oeste. Colocamos esta lnea al principio en lugar de el turnleft(); , y... Citar
class program { program() { while(notFacingWest) { turnleft(); } while(frontIsClear) { move(); } turnleft(); while(frontIsClear) { move(); } turnoff(); } }
27