Sunteți pe pagina 1din 21

Descripcin Documentacin

En las pginas siguientes se describe cmo escribir programas. Se


estructura en las siguientes secciones:
Descripcin general de las capacidades del robot.
Estas son las acciones que puede realizar
Instrucciones bsicas

directamente.
Descripcin de las estructuras del lenguaje de
programacin ofrece para definir el orden de

Estructuras de

ejecucin de las instrucciones.

programacin
Ver cmo algunos de los problemas pueden ser
abordados por writing scripts.
Programas de ejemplo
Learn how to create your own maps

Instrucciones bsicas
En cada dominio hay un nmero fijo de instrucciones bsicas que usted
puede utilizar para escribir un programa. Estas instrucciones solo pueden
usarse al escribir directamente el script. Para nuestro robot existen las
siguientes instrucciones bsicas:

Movimiento

adelante(n)

Mover n pasos hacia adelante

atrs(n)

Mover n pasos hacia atrs

izquierda()

Girar a la izquierda de 90 grados

derecha()

Girar a la derecha de 90 grados

norte(n)

Girar hacia el norte y mover n pasos hacia


adelante

sur(n)

Girar hacia el sur y mover n pasos hacia adelante

este(n)
oeste(n)

Pintar
pintarBlanco()
pintarNegro()
detenerPintar()

Tomar

tomar()

Girar hacia el este y mover n pasos hacia


adelante
Girar hacia el oeste y mover n pasos hacia
adelante
Usar brocha blanca para pintar el suelo
Usar brocha negra para pintar el suelo
Dejar de pintar, esconder brocha
Tomar la baliza delante del robot
Poner la baliza delante del robot

poner()
Come ()

Come/Destruye la baliza que tom

Lanzar moneda
lanzarMoneda()

Ve

Izquierda

Lanzar una moneda para tomar una


decisin.lanzarMoneda() ser verdadero o falso.

Delante

izquierdaEsObstacu
lo()
izquierdaEsClaro()
izquierdaEsBaliza(
)

Derecha
derechaEsObstacu

frenteEsObstacul lo()
o()
frenteEsClaro()

derechaEsClaro()
derechaEsBaliza(

frenteEsBaliza() )

izquierdaEsBlanco( frenteEsBlanco() derechaEsBlanco(


)

frenteEsNegro()

izquierdaEsNegro()

)
derechaEsNegro()

Estructuras de programacin
Aqu encontrars las estructuras gramaticales que permiten definir el
comportamiento del robot:

Comentario

Bucles

Estructuras condicionales

Expresiones lgicas

Procedimiento

Final

Comentari
o

# texto libre que no se evala


Todo texto que aparezca despus del simbolo '#' no se
interpretar como instruccin. El robot proceder con la
siguiente lnea en el script. Utiliza esta funcin para hacer
anotaciones sobre partes del script como nota recordatoria
para ti mismo sobre cmo algo funciona.

Bucles

repetir(n){...instrucciones...}
repite las instrucciones entre las {llaves} exactamente n
veces.
Ejemplo:
# un cuadrado de 2x2
repetir(4)
{
adelante(2)
derecha()
}

repetir(){...instrucciones...}
repite las instrucciones entre las {llaves} indefinidamente.
Ejemplo:
# avanza hacia adelante indefinidamente
# (aunque al final se quedar golpeando la pared)
repetir()
{
adelante()

repetirmientras(condicin){...instrucciones.
..}
repite las instrucciones entre las {llaves} siempre y cuando
la condicin se cumpla. La condicin debe ser siempre una
instruccin bsica de percepcin (consulta la seccin sobre
instrucciones bsicas) (por ejemplo frenteEsClaro())
Ejemplo:
# contina hacia adelante
# pero se para cuando no puede continuar
repetirMientras(frenteEsClaro)
{
adelante(1)

Interrupcin
Te permite interrumpir un bucle (por ejemplo:
repetir()seccin) y asi dejar de realizar las instrucciones
entre las llaves. El robot reanudar la realizacin de las
instrucciones que queden despus del la llave de cierre del
bucle.
Ejemplo:
# sigue hacia adelante, hasta que no pueda avanzar
ms
repetir()

{
si(frenteEsObstculo())

interrumpir
}
sino
{
adelante(1)
}
}

Ifstructures

si(condicin){...instrucciones...}
El robot realizar las instrucciones entre {llaves} si la
condicin se da. Si la condicin no se da, el robot seguir
realizando las instrucciones que se encuentren
inmediatamente despus de la llave de cierre del bucle. La
condicin debe ser una instruccin de percepcin (consulta
la seccin sobre instrucciones bsicas). (por
ejemplofrenteEsClaro())
Ejemplo:
# si ves pintura blanca a tu izquierda, pintar de
negro
si(izquierdaEsBlanco())
{
izquierda()
adelante(1)
pintarNegro()
detenerPintar()

hacia atras(1)
derecha()
}

si(condicin){...instrucciones...}sino{...in
strucciones...}
El robot realizar las instrucciones entre el primer par de
{llaves} si la condicin existe. Las instrucciones entre las
segundas {llaves} o bloque sino (segunda instruccin) no se
realizarn. Cuando la condicin no existe, el robot realizar
entonces las instrucciones del bloque sino (segunda
instruccin). Una vez que haya realizado una de las dos
instrucciones, continuar realizando las instrucciones que
se encuentren despus de la ltima llave. La condicin
debe ser una de las instrucciones bsicas
de percepcin(consulta la seccin de instrucciones bsicas)
(por ejemplofrenteEsClaro())
Ejemplo:
# si ves pintura blanca a la izquierda, pintar de
negro
# sino avanza unos pasos hacia adelante
si(izquierdaEsBlanco())
{
izquierda()
adelante(1)
pintarNegro()
detenerPintar()
hacia atras(1)

derecha()
}
sino
{
adelante(3)
}

Expresion
es
lgicas

Llamamos expresiones lgicas a las condiciones si y repetir


si. Estas expresiones resultarn en un valor verdadero
o falso, que determinarn la reanudacin de la ejecucin en
la parte apropiada del script.
Una expresin lgica puede ser una instruccin de
percepcin(consulta la seccin de instrucciones bsicas),
por ejemplo: (izquierdaEsBlanco())). Instrucciones bsicas
tambin pueden estar compuestas de conectivas lgicas
(lgebra de Boole) no, y, o (~, &, |).
Ejemplo:
si(izquierdaEsBlanco())
{
izquierda()
adelante(1)
}

Al usar una (o una combinacin) de las siguientes


operaciones, podremos refinar an ms la condicin para
indicar con mayor precisin cundo se deben ejecutar las
instrucciones correspondientes:

Operaci Notaci Nmero


n
n
de
alternat argumen
iva
tos
no

Descripcin

Niega el valor del argumento:


Tabla de valores de verdad:
~ no verdadero =falso
~ no falso =verdadero
Ejemplo:
~ nofrenteEsClaro()

&

Slo es verdadero cuando los dos


argumentos son verdaderos.
Tabla de valores de verdad:
verdadero &verdadero =verd
adero
verdadero & falso= falso
falso & verdadero= falso
falso & falso =falso
Ejemplo:
frenteEsClaro() &derechaEs
Blanco()

Verdadero cuando al menos uno de los


argumentos lo es.
Tabla de valores de verdad:
verdadero |verdadero =verd
adero
verdadero | falso= verdade
ro
falso | verdadero= verdade
ro
falso | falso =falso
Ejemplo:
frenteEsClaro() |derechaEs
Blanco()

Los valores verdadero y falso tambin pueden ser


aplicados directamente como si fuesen una instruccion de
percepcin.

El orden en que las operaciones ocurrent es importante ( tal


como lo es cuando se multiplica y suma). La operacin no
(~)es la ms fuerte, seguida de y (&), y por ltimo o (|). Se
pueden usar parntesis para influenciar el orden de la
evaluacin.
Ejemplos:

repetirmientras(no frenteEsClaro() y
(izquierdaEsBlanco() o derechaEsBlanco())){
adelante(1)
}

si(lanzarMoneda() y no derechaEsBlanco())
{
derecha()
atras(1)
}

si(verdadero y falso){
# esta instruccion no se ejecuta nunca
adelante(1)
}

Procedimi
ento

procedimientonombre(par1, par2, ... ,


parN){...instrucciones...}
Define un nuevo procedimiento con el nombre que tu le
quieras dar. El procedimiento puede tener cero o ms

parmetros, a los cuales tambin puedes nombrar. En


nuestro ejemplo se llaman par1, par2, . . . , parN. Estas son
las variables que puedes usar en las instrucciones entre
llaves. El script del procedimiento no se ejecutar
automticamente, sino que tendrs que escribir una
"llamada" de procedimiento cada vez que desees ejecutar
las instrucciones del nuevo procedimiento (consulta la
prxima instruccin).
Consejo: crea un nuevo procedimiento cuando quieras usar
una secuencia de instrucciones en ms de una ocasin.
Ejemplo:
# define como dibujar un rectngulo
procedimiento rectngulo(anchura, altura)
{
pintarBlanco()
repetir(2)
{
adelante(altura)
derecha()
adelante(anchura)
derecha()
}
detenerPintar()
}

nombre(arg1, arg2, . . . , argN)


es la "llamada" de procedimiento que debes escribir y usar
cada vez que quieras ejecutar el nuevo procedimiento

creado, con el nombre correspondiente y tantos parmetros


como argumentos haya en el procedimiento. El argumento,
aqui llamado arg1, arg2, ..., argN, son los valores
particulares que se usaran en la definicin del
procedimiento.
Ejemplo:
# las instrucciones siguientes se ejecutarn:
adelante(1)
rectngulo(3,2) # una llamada al procedimiento
'rectngulo'
adelante(3)
rectngulo(1,4) # otra llamada con otros argumentos

# esta es la definicin de 'rectngulo'


procedimiento rectngulo (anchura, altura)
{
pintarBlanco()
repetir(2)
{
adelante(height)
derecha()
adelante(width)
derecha()
}
pararPintar()
}

Final

Final
Esta instruccin har que todo el programa se detenga
cuando este comando se lleve a cabo.
Ejemplo:
# parar despus de 5 pasos, o antes si encuentra una
baliza a la derecha
repetir(5)
{
adelante(1)
si(derechaEsBaliza())
{
final # detiene la ejecucin del
programa
}
}
# normal fin del programa

Los scripts de ejemplo


En los programas de ejemplo siguiente usted ver cmo las instrucciones y
estructuras bsicas de programacin se puede llevar a un comportamiento
interesante del robot. Trate de entender la escritura y por qu funciona. An mejor
es probarlos si ha copiado el cdigo y pegarlo en el panel de script RoboMind.
Asegrese de que el mapa de la derecha se utiliza antes de ejecutarlos.

Ejemplo 1: Escriba su nombre


Ejemplo 2: Encontrar el punto blanco
Ejemplo 3: Lnea seguidor
Ejemplo 4: Corredor de laberintos

Ejemplo 1 : Escriba su nombre


Debido a que el robot es capaz de pintar, que es capaz de crear programas
sencillos de dibujo. Utilizando pintarBlanco() ydetenerPintar()l puede ordenarle al
robot para poner su pincel en el suelo o no. Cuando usted permite que el robot se
mueva, se dejar una lnea en el suelo. De esta manera usted puede escribir los
caracteres como la 'A'.
En el mapa openArea.map tendr suficiente espacio para crear una buena pieza
de arte. Trate de usar el mando a distancia (Ejecutar> control remoto) para que la
pintura robot.

Ver tambin: instrucciones bsicas: pintar,mover


#character 'A'
pintarBlanco()

adelante(2)
derecha()
adelante(1)
derecha()
adelante(2)
atras(1)
derecha()
adelante(1)

detenerPintar()

Ejemplo 2 : Encontrar el punto blanco


En el findSpot1.map mapa que se puede encontrar en la carpeta por defecto
romboidal mapa, siempre encontrar algo a la izquierda una esquina que tiene una
mancha blanca. Supongamos que no se sabe de antemano a qu distancia se
encuentra este rincn. Cmo es el robot capaz de encontrar si se empieza en
algn lugar a lo largo de la pared? Por supuesto que puede contar el nmero de
pasos que el robot tiene que mover por s mismo, pero hay mejores maneras.
Deje que el robot haga un paso adelante en el tiempo, y le dej comprobar si ya ve
el lugar a su izquierda. Si se ve el lugar, tiene que subirse en ella y luego se
termina. De lo contrario debe dar otro paso adelante y volver a comprobar si ya
est cerca del lugar. Esto puede repetirse en un bucle.

Ver tambin: instrucciones bsicas: mover,ver.


repetir(){
si(izquierdaEsBlanco()){
# Hay una mancha blanca a su izquierda
izquierda()
adelante(1)
fin
}
otro{
# No hay ninguna mancha blanca todava
adelante(1)
}
}

Otro enfoque que muestra los mismos resultados es el siguiente script. Aqu se
repite el robot en movimiento hacia adelante hasta que no se ve la pared ms (lo
que debe ser la esquina que est buscando). A continuacin, el robot gira y se
mueve hacia adelante a la tierra en el lugar.
repetirMientras(izquierdaEsObstaculo()){
adelante(1)
}

izquierda()
adelante(1)

ejemplo 3 : Lnea seguidor


En default.map a encontrar una lnea blanca en el este. Esta lnea forma una pista
a travs del medio ambiente. Cmo puede hacer que el robot siga esta pista?
La solucin es algo similar al ejemplo anterior. Despus de que el robot se pone al
principio de la pista, que determina lo que debe hacer paso a paso.

Ver tambin: instrucciones bsicas: mover,ver.


# Ir al inicio de la lnea
derecha()
adelante(8)

# Sigue paso a paso la pista


repetir()
{
si(frenteEsBlanco()){
adelante(1)
}
otro si(derechaEsBlanco()){
derecha()
}
otro si(izquierdaEsBlanco()){
izquierda()
}

otro si(frenteEsObstaculo()){
fin
}
}

Otro mtodo es usar los llamados procedimientos recursivos. En el guin prxima


vez que vea que un procedimiento de "seguir ()" se define. En este procedimiento,
despus de que el paso correcto se realiza, se ve que seguir() se utiliza en su
propia definicin. Lo que se obtiene es una secuencia de seguir (... seguir (...
seguir (...)...)...) que realizar la accin correcta cada vez que paso para cumplir la
tarea. Esta definicin se llama cclica repeticin, y es probable que usted lo
encontrar algo extrao la primera vez que lo veo. No se preocupe, jugar con l y
se vuelve ms claro.

# Ir al inicio de la lnea
derecha()
adelante(8)

# iniciar el seguimiento
seguir()

# Definicin recursiva para el seguimiento.


procedimiento seguir(){
si(frenteEsBlanco()){
adelante(1)
follow()
}

otro si(derechaEsBlanco()){
derecha()
follow()
}
otro si(izquierdaEsBlanco()){
izquierda()
follow()
}
otro si(frenteEsObstaculo()){
#
#
#
#

Finalizar la llamada al procedimiento en curso


(porque no hay nada para despus
Regresar este, todas las llamadas se terminarn
y el programa se detiene)

regresar
}
}

Ejemplo 4 : Corredor de laberintos


Cmo escapar de un laberinto en general? Parece que
esta difcil pregunta tiene una solucin simple. Por
siempre siguiendo la pared a la derecha (o siempre
siguiendo la pared en el lado izquierdo) se encuentra la
salida con seguridad.
El siguiente script hace que el robot encuentra el faro en
la maze1.map ejemplo.
Ver tambin: instrucciones bsicas: mover,ver.
repetir(){
si(derechaEsObstaculo()){
si(frenteEsClaro()){
adelante(1)
}
otro{
izquierda()
}
}
otro{
derecha()
adelante(1)
}

si(frenteEsBaliza()){
tomar()
fin
}
}

S-ar putea să vă placă și