Olimpiada de Informtica del Estado de Guanajuato Tutorial corto de Karel
Convenciones <> [] Lo que est entre signos de menor que y mayor que, es una aclaracin de lo que debe ir en ese lugar. Indica una porcin de cdigo que es optativa, o una opcin a escoger entre dos.
1. Estructura de programa Un programa de Karel debe tener el siguiente formato:
class program { <Definiciones de funciones > program() { <Definiciones de las instrucciones a ejecutar > turnoff(); } }
2. Funciones bsicas (nativas)
o o o o o
move(): hace un paso en la direccin que est apuntando (puede causar error "apagn" si hay una pared enfrente). turnleft(): gira a su izquierda 90 (siempre se puede). pickbeeper(): recoge un beeper de la esquina donde est parado (puede causar error "apagn" si no hay ningn beeper en la esquina). putbeeper(): deposita un beeper en la esquina (puede causar error "apagn" si la bolsa de beepers de Karel est vaca). turnoff(): es el comando que finaliza y apaga a Karel.
IMPORTANTE: Las nuevas funciones deben tener diferentes nombres y NO llamarse igual a una de las funciones bsicas. 3. La instruccin iterate Su sintaxis es la siguiente:
iterate (<nmero>) <instruccin>[{Bloque}]
Por ejemplo:
iterate(3) turnleft(); iterate(4) { turnleft(); move(); }
Tutorial corto de Karel
1 Pgina de la OIEG [Link]
Olimpiada de Informtica del Estado de Guanajuato Tutorial corto de Karel
4. Definir nuevas funciones de Karel (define) La sintaxis es:
define <nombre_nueva_instruccin >() <instruccin> [{bloque}]
Donde la instruccin puede ser una sola instruccin o un bloque de instrucciones creado con { y }. No se puede usar nombres de instrucciones nativas ni palabras reservadas. Karel hace distincin entre maysculas y minsculas
define turnright() { iterate(3) turnleft(); }
5. Condicionales Las condiciones posibles son las siguientes 18: frontIsClear frontIsBlocked leftIsClear leftIsBlocked rightIsClear rightIsBlocked nextToABeeper notNextToABeeper facingNorth notFacingNorth facingSouth notFacingSouth facingEast notFacingEast facingWest notFacingWest anyBeepersInBeeperBag noBeepersInBeeperBag es verdadero si el frente de Karel esta libre de pared es verdadero si existe una pared frente a Karel es verdadero si en el lado izquierdo de Karel no existe una pared es verdadero si en el lado izquierdo de Karel existe una pared es verdadero si en el lado derecho de Karel no existe una pared es verdadera si en el lado derecho de Karel existe una pared es verdadero si existe un beeper donde Karel esta parado es verdadero si no existe un beeper donde Karel esta parado es verdadero si Karel esta volteando hacia al Norte es verdadero si Karel no esta volteando hacia al Norte es verdadero si Karel esta volteando hacia el Sur es verdadero si Karel no esta volteando hacia el Sur es verdadero si Karel esta volteando hacia el Este es verdadero si Karel no esta volteando hacia el Este es verdadero si Karel esta volteando hacia al Oeste es verdadero si Karel no esta volteando hacia al Oeste es verdadero si existe algn beeper en a beeper_bag es verdadero si no existes algn beepers en a beeper_bag
Tutorial corto de Karel
2 Pgina de la OIEG [Link]
Olimpiada de Informtica del Estado de Guanajuato Tutorial corto de Karel
6. La instruccin if Su sintaxis es la siguiente:
if( <condicin> [bloque condicional] ) <instruccin> [{bloque}] Por ejemplo: if( frontIsClear ) move(); if( leftIsClear ) { turnleft(); move(); }
7. La instruccin else Su sintaxis es:
if( <condicin> [bloque condiciona l] ) <instruccin1> [{bloque1}] else <instruccin2> [{bloque2}] Por ejemplo: if( frontIsClear ) move(); else turnleft(); if( nextToABeeper ) { pickbeeper(); move(); } else putbeeper();
En este caso, lo que ocurre es que si la condicin es cierta, se ejecuta la instruccin1 (o el bloque1), pero si no lo es se ejecuta la instruccin2 (o el bloque2), e independientemente del resultado, se continua la ejecucin del programa. 8. La instruccin while El while tiene la siguiente sintaxis:
while( <condicin> [bloque condicional] ) <instruccin> [{bloque}]
Por ejemplo:
while( frontIsClear ) move(); while( leftIsClear ) { turnleft(); move(); }
Tutorial corto de Karel
3 Pgina de la OIEG [Link]
Olimpiada de Informtica del Estado de Guanajuato Tutorial corto de Karel
9. Bloques condicionales Los bloques condicionales, son un grupo de condiciones que se piden en una instruccin if o while. Las condiciones deben ir "ligadas" con un operador lgico "and" u "or". La sintaxis del and y or son respectivamente:
? And: <Condicin 1> && <Condicin 2> ? Or: <Condicin 1> || <Condicin 2>
Por ejemplo, para and:
if( nextToABeeper && frontIsClear ) move();
Por ejemplo, para or:
if( nextToABeeper || frontIsBlocked ) turnoff();
Elaborado por: Edgar Alfredo Duez Guzmn Marte Alejandro Ramrez Ortegn
Tutorial corto de Karel
4 Pgina de la OIEG [Link]