Karel PDF
Karel PDF
Karel PDF
EN QUINTANA ROO
COMPENDIO DE EJERCICIOS
PARA LOS ENTRENAMIENTOS
Tulum Quintana Roo Julio 2015
CONTENIDO
FASE 2
1. PROGRAMANDO A KAREL EL ROBOT
2. INTRODUCCIN
2.1. QU ES?
2.2. EL MUNDO DE KAREL
2.2.1. CALLES
2.2.2. AVENIDAS
2.2.3. ESQUINAS
2.2.4. ZUMBADORES
2.2.5. MUROS
2.2.6. ORIENTACIN
2.2.7. MOCHILA (BOLSA) DE ZUMBADORES
3. VENTANAS DEL SIMULADOR
3.1. MUNDO
3.2. PROGRAMA
3.3. EJECUTAR
4. PROGRAMACIN EN KAREL
4.1. ESTRUCTURA DEL PROGRAMA
4.2. COMANDOS BSICOS
4.3. VARIABLE DE KAREL
4.4. CONDICIONES DE KAREL
4.5. OPERADORES LGICOS
4.6. SENTENCIAS DE CONTROL
4.6.1. SI / ENTONCES
4.6.2. SI / ENTONCES / SINO
4.6.3. REPETIR / VECES
4.6.4. MIENTRAS / HACER
4.7. FUNCIONES
4.7.1. DEFINE-NUEVA-INSTRUCCIN / COMO
4.7.2. RECURSIVIDAD
5. PROGRAMAS EJEMPLO
KAREL EL ROBOT
QU ES KAREL EL ROBOT?
Karel es una herramienta de aprendizaje que presenta los conceptos de una forma visual, lo
cual es menos abstracto que programar en un lenguaje como Pascal o C, es un Robot simple
que vive en un mundo simple y debido a que Karel y su mundo son simulados, nosotros
podemos realmente ver los resultados de un programa en accin.
EL MUNDO DE KAREL
El mundo de karel est formado por Calles y Avenidas, en las cuales tiene que desplazarse
y hacer las tareas que le indiques.
Karel puede orientarse en una de las cuatro direcciones: este, oeste, norte y sur. Slo gira
90 cada vez, por tanto no puede orientarse hacia el nordeste. En el mundo de Karel, las
calles van de este a oeste, y son numeradas comenzando por 1. No hay nmeros de calle
igual a 0 o negativos. Las avenidas van de norte a sur, y tambin estn numeradas
empezando por 1. Tampoco hay nmeros de avenida igual a 0 o negativos. Se le llama
esquina a la interseccin de una calle con una avenida. Karel va de una esquina a la
siguiente en un solo movimiento.
No. DE ZUMBADORES
DESPLAZADORES
C
A
L
L
E
S
MUROS
ZUMBADORES
KAREL
AVENIDAS
Figura 01: Elementos del Mundo de Karel
Las calles y avenidas se pueden limitar utilizando muros, que se pueden colocar al norte,
sur, este y oeste y evitan que Karel se salga de su mundo.
Otro elemento de inters en el mundo de Karel son los zumbadores. Un zumbador es una
forma de marca que Karel puede escuchar slo cuando se encuentra en la misma esquina
Fase 2: Programando a Karel el Robot
que el zumbador. Karel tiene una bolsa que puede utilizar para poner los zumbadores que
vaya cogiendo. Tambin puede hacer lo contrario, es decir, sacar los zumbadores de su
bolsa y depositarlos en las esquinas por las que va pasando. Puedes ajustar el nmero inicial
de zumbadores en cada esquina con el control Zumbadores.
VENTANA MUNDO
Karel vive en mundo simple el cual podemos crear utilizando la ventana Mundo, en esta
ventana definimos el espacio en el cual puede transitar Karel agregando muros y
zumbadores.
La definicin del mundo de Karel nos permitir hacer mas fcil o complejas las diferentes
actividades que le encarguemos al robot Karel.
A continuacin definiremos las partes de la ventana de karel
Haga clic en este botn para crear un nuevo mundo en blanco en el cual se
agregaran los muros y zumbadores
Permite guardar un mundo que ya existe con otro nombre. Al hacer clic en
este botn se abre el cuadro de dialogo de la figura 03.
Con este botn abrimos los mundos que tenemos creados previamente. Al
hacer clic en este botn se abre el cuadro de dialogo Abrir de Windows en el cual
seleccionaremos la ubicacin y el nombre del mundo que se desee abrir
Orientado al Norte
Orientado al Este
Orientado al Sur
Orientado al Oeste
VENTANA PROGRAMA
El objetivo es el de ensear a Karel a realizar diferentes actividades en su mundo
interactuando con sus diferentes elementos como son los muros, zumbadores, calles y
avenidas.
Para ensear a Karel a realizar una actividad se debe codificar un programa el cual puede
tener la estructura de Pascal o Java, para lo cual nos servir esta ventana.
La venta esta formada por dos partes: una barra de botones y un rea de codificacin en la
cual se escribe el cdigo programa, la cual esta representada por un recuadro blanco el cual
en la parte izquierda se numeran las lneas de cdigo.
10
11
VENTANA EJECUAR
Esta ventana es una de las caractersticas que podemos resaltar de Karel debido a que nos
permite ver la forma en que se ejecuta el cdigo del programa y las acciones que realiza
Karel por cada lnea de cdigo.
La ventana esta formada por tres partes:
En la parte superior una barra de botones que nos permite controlar la ejecucin, un panel
izquierdo en el cual se muestra la ejecucin del cdigo del programa y un panel derecho en
el que se muestra las acciones que realiza Karel en su mundo.
12
Ejecuta una lnea de cdigo cada vez que hacemos clic en este botn.
13
PROGRAMACIN EN KAREL
La programacin de Karel se puede realizar en los lenguajes Pascal o Java, en el caso de este manual se
vera la forma de programar en Pascal el cual es un lenguaje estructurado.
Kerel cuenta con pocas condiciones y comandos. Las actividades que puede realizar son avanzar,
recoger y dejar zumbadores, al combinar esta simples actividades se pueden realizar innumerables
actividades desde las ms simples como es el avanzar por una avenida o calle hasta las ms complejas
como son operaciones matemticas, ordenamientos entre otras.
Sintaxis general:
- Todas las instrucciones deben terminar con un punto y coma (;).
- No distingue entre minsculas y maysculas.
- Los identificadores (nombre de las instrucciones, comandos y funciones) no deben llevar:
espacios en blanco acentos,
- Las instrucciones que se pongan despus de la palabra Finalizar-programa no se consideran
parte del programa.
- Los comentarios se empiezan con los caracteres (* y finaliza con *), ejemplo (* Esta es una
lnea de comentario *) y no se consideran parte del cdigo del programa.
Fase 2: Programando a Karel el Robot
14
COMANDOS BSICO.
Karel solo puede realizar cinco acciones bsicas.
Comando
avanza
gira-izquierda
coge-zumbador
deja-zumbador
Descripcin de la accin
Avanza una esquina en la direccin en la que se encuentre
Gira 90 grados a la izquierda
Toma un zumbador y lo agrega a su mochila
Saca un zumbador de su mochila y lo deja en la esquina
sobre la que esta ubicado
Desconecta a Karel
apagate
Consideraciones:
- Si intentamos avanzar atreves de una pared karel marca un error y se desconecta
- Karel solo puede girar a la izquierda, por lo cual si queremos que gira a la derecha debemos
hacer que Karel gire 3 veces.
- Si intentamos dejar un zumbador cuando la mochila esta vaca Karel marca un error y se detiene
el programa.
VARIABLE DE KAREL
Karel solo cuenta con una variable que es su mochila en la cual podemos agregar o dejar zumbadores.
No se puede agregar otra variable.
CONDICIONES DE KAREL
La condicin es una funcin de la situacin actual de Karel, a medida que se ejecuta el programa.
Estas funciones retornan dos posibles valores, Falso o Verdadero los cuales indican si Karel se
encuentra o no en la situacin indicada por la condicin.
no-junto-a-zumbador
orientado-al-oeste
izquierda-libre
algun-zumbador-en-la-mochila
no-orientado-al-norte
15
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
OPERADORES LGICOS
Las condiciones de Karel se pueden combinar utilizando los operadores lgicos siguiente
Operador lgico Y (and en otros lenguajes)
Operador lgico O (or en otros lenguajes)
Para agrupar comparaciones se utilizan los parntesis.
Sintaxis:
Condicin operador-lgico condicin
Ejemplo:
mientras frente-libre Y derecha-bloqueada Y izquierda-bloqueada hacer inicio
deja-zumbador;
avanza;
fin;
SENTENCIAS DE CONTROL
Las sentencias de control se usan para elegir qu hacer, y/o cuantas veces hacerlo. Sin embargo, por si
solos no causan que ocurra algo. Simplemente controlan la ejecucin de otras sentencias o fragmentos
de cdigo. A continuacin se lista una serie de sentencias de control de Karel:
- Si / Entonces
- Si / Entonces / Sino
- Repetir / Veces
- Mientras / Hacer
Siempre a continuacin de las sentencias de control entonces, veces, sino, y hacer van seguidas de la
palabra inicio para iniciar el grupo de sentencias a ser realizado. El grupo de sentencias va seguido de
la palabra fin.
Utilizamos el par inicio/fin para un slo parmetro o para varios, no importa el nmero de ellos. El
compilador devolver una advertencia en caso de que no se siga este estilo.
Nota: Un punto y coma no debe estar a continuacin de un inicio, pero s es necesario a continuacin
de un fin (excepto cuando precede una sentencia sino).
16
Sentencia Si / Entonces
Utilizamos esta sentencia cuando queremos que Karel realice algo solo en ciertas condiciones
La forma general de la sentencia si es:
Si xxx entonces inicio
yyy;
fin;
Donde xxx es una condicin, yyy son sentencias a realizar si xxx es verdadero.
indica que puede haber ms sentencias antes o despus
Ejemplo:
...
Si orientado-al-sur entonces inicio
gira-izquierda;
gira-izquierda;
gira-izquierda;
fin ;
...
En este ejemplo si Karel se encuentra orientado al sur girara tres veces y quedara orientado al este.
Sentencia de control Si / Entoces / sino
Utilizamos esta sentencia cuando requerimos que Karel realiza una u otra accin dependiendo de la
condicin en la que se encuentre.
Forma general:
Si xxx entonces inicio
yyy;
fin
sino inicio
zzz;
fin ;
Donde xxx es una condicin, yyy son sentencias a realizar si xxx es verdadero, y zzz son las sentencias
a ejecutar si xxx es falso.
Ejemplo:
Fase 2: Programando a Karel el Robot
17
Donde xxx debe ser un nmero entero positivo, y yyy representa cualquier nmero de sentencias de
Karel.
Ejemplo:
...
repetir 14 veces inicio
avanza ;
fin ;
...
En este ejemplo Karel avanza 14 esquinas a partir de su ubicacin actual en la direccin en la que este
orientado.
18
La sentencia mientras/hacer nos permite repetir pasos mientras se cumple una condicin, y esto nos va
a permitir programar a Karel para que no sea un chico tan rgido!.
Forma general:
Mientras xxx hacer inicio
yyy;
fin;
Donde xxx debe ser una condicin (una de las funciones booleanas listadas anteriormente), y yyy
representa cualquier nmero de sentencias de Karel.
Ejemplo:
En este ejemplo Karel avanzara desde su posicin actual hasta que se encuentre con una pared, si
encuentra una pared deja de avanzar.
FUNCIONES
Hasta ahora, le hemos dicho a Karel exactamente lo que tena que hacer tal como necesitbamos que lo
hiciese. Esto funciona bien, pero se podrn haber dado cuenta de que siempre se utilizan secuencias de
sentencias similares. Un ejemplo es cuando Karel tiene que girar a la derecha, y nosotros le decimos
"gira-izquierda; gira-izquierda; gira-izquierda;". No sera ms fcil si le pudiramos decir
simplemente "gira-derecha"?.
En otras palabras, diciendo " gira-derecha; " Karel girara tres veces hacia la izquierda para alcanzar
nuestro objetivo. Es posible.
Una de las razones de crear nuevas instrucciones, es por evitar escribir tanto. Otra es para documentar
mejor cual es nuestro objetivo, cuando nosotros mismos u otra persona leen el programa. Como se
estarn dando cuenta, programar es una tarea muy sencilla, y necesitamos toda la ayuda necesaria para
hacer las cosas correctamente!
En si una funcin es un segmento de programa que podemos utilizar tanta veces como sea necesario y
con tan solo hacer una llamada al nombre de la funcin desde cualquier parte del programa.
Sentencia Define-nueva-instruccion
Las sentencias define-nueva-instrucion estn situadas en un sitio especial dentro de un programa de
Karel, justo despus de la sentencia iniciar-programa.
Fase 2: Programando a Karel el Robot
19
Forma gerenal:
Define-nueva-instruccion nnn como inicio
yyy;
fin;
Donde nnn es el nombre de la funcin, y yyy representa cualquier numero de sentencias.
Nombre de la funcin:
- Debe empezar con una letra.
- El nombre de la funcin se pude formara con las letras del abecedario (acepcin de la ),
nmeros y los caracteres guin alto (-) y guin bajo ( _ ) para separa las palabras.
- No debe tener espacios en blanco o cualquier carcter no valido para identificadores como
pueden ser: acentos, , /, ?, *, entre otros
Las sentencias se pueden anidar, es decir pueden existir una o ms funciones dentro de otra funcin.
Define-nueva-instruccion nnn1 como inicio
fin;
Ejecutar una funcin
Para ejecutar una funcin basta con escribir el nombre de la funcin seguida de punto y coma, en el
lugar que desee ejecutar dicha funcin, puede ser dentro de otra funcin o el bloque principal del
programa.
Ejemplo:
Programa que hace que Karel avance desde la esquina calle 1 avenida 1 hasta un muro y regrese y se
detenga hasta que encuentre un muro.
20
fin;
(* se crea una funcin que avanza mientras no exista un muro*)
define-nueva-instruccion Avanza-hasta-muro como inicio
mientras frente-libre hacer inicio
avanza;
fin;
fin;
inicia-ejecucion
(* se realiza una llamada a la funcin avanza muro *)
Avanza-hasta-muro;
(* Se realiza una llamada funcion media-vuelta *)
media-vuelta;
(* Se realiza una segunda llamada a la funcin Avanza-hasta-muro *)
Avanza-hasta-muro;
apagate;
termina-ejecucion
finalizar-programa
El siguiente es un programa vlido para Karel:
Recursividad
La recursividad es la propiedad que tienen las funciones de realizar llamadas as misma.
Una definicin podra ser la siguiente:
Fase 2: Programando a Karel el Robot
21
Recursividad:
Vea Recursividad.
Es decir es una funcin que se ejecuta a si misma un numero indeterminado de veces.
Cuado se realiza una llamada a una funcin (llammosla hija) la funcin que realiza la llamada
(llammosla padre) queda inconclusa y requiere que la funcin que fue llamada (funcin hija) termine
para que termine la funcin padre.
Con la siguiente grafica intentaremos mostrar el proceso de recursividad, inicio y finalizacin de las
llamadas de a la misma funcin.
Funcin original Inicia
Primera llamada inicia copia 1
Segunda llamada inicia copia 2
Tercera llamada inicia copia 3
No se cumple la condicin de llamada
Termina copia 3
Termina copia 2
Termina copia 1
Termina funcin original
Debemos tener cuidado al utilizar la recursividad y definir claramente cuando termina la funcin, si no
podemos crear un ciclo infinito y nunca terminara el programa.
Le sugerimos que la llamada a la funcin debe estar dentro de una sentencia de control si / entonces o si
/ entonces / sino mediante la cual controle si se realiza o no la llamada.
Debemos utilizar la recursividad cuando la solucin del problema as lo requiera y no exista otra forma
de dar solucin ya que utiliza una gran cantidad de recursos (memoria y procesamiento) y hace ms
lenta la ejecucin del programa.
Ejemplo de recursividad:
Este programa le indica a Karel que avance hasta que encuentre un muro y regrese a la ubicacin
exacta en la que inicio.
Nombre del programa recursividad_ejemplo.txt
iniciar-programa
(* Crea la funcin media-vuelta *)
define-nueva-instruccion media-vuelta como inicio
gira-izquierda;
gira-izquierda;
Fase 2: Programando a Karel el Robot
22
fin;
(* Crea la funcin avanza-y-regresa *)
define-nueva-instruccion avanza-y-regresa como inicio
si frente-libre entonces inicio
avanza;
(* Realiza una llamada as misma *)
avanza-y-regresa;
fin
sino inicio
(* Realiza una llamada a la funcion media-vuelta *)
media-vuelta;
fin;
avanza;
fin;
inicia-ejecucion
si frente-libre entonces inicio
avanza;
fin;
(* Se realiza la primera llamada a la funcin avansa-y-regresa *)
avanza-y-regresa;
media-vuelta;
apagate;
termina-ejecucion
finalizar-programa
23
24