11.1. EXPERIMENTA
1) Ejecuta las siguientes
órdenes:
?bp ponfondo 1 ponpaleta
0 poncl 3
?activa [0 1 2 3 4 5 6 7] ot
?activa [0] mt av
50
?activa [1] gd 120 mt av 50
?activa [2] gd 240 mt av 50
?activa [0 1 2]
?repite 4 [av 40 gd 90]
?muestra
quien
..........
2) Define el siguiente
procedimiento:
para colocar
activa [0 1 2 3 4 5 6 7] sl ot
activa [0] ponpos [-100 -80] poncl
1
activa [1] ponpos [-50 -80] poncl
2
activa [2] ponpos [0 -80] poncl 3
activa [3] ponpos [50 -80] poncl 1
activa [4] ponpos [100-80] poncl2
activa [0 1
2 3 4] bl mt
fin
Ejecútalo así:
?bp colocar
?av 100 gi 90
?repite 18 [av 20 re 10 gd 20]
....................
3) Define y ejecuta los
siguientes procedimientos:
para eje :n
repite :n [av 10 gd 90 al, 2 re 4 av 2 gi 90]
fin
para ejes
activa [0 1
2 3 4 5 6 7] ot
poncl 3
activa [0] ponrumbo 0
activa [1] ponrumbo 90
activa [2] ponrumbo 180
activa [3] ponrumbo 270
activa [0 1
2 3]
eje 9
centro
ot activa [0] mt
fin
Ejecución:
?bp ejes
4) Antes de definir el
siguiente procedimiento trata de descubrir su función
para
simetría2
activa [0 1
2 3 4 5 6 7] ot
activa [0]
ejes mt
poncl 1
activa [1] mt ponrumbo 180
poncl 2
activa [0 1]
ponct [1 0]
poncursor [0 0]
es [Continúa
dándole órdenes]
ponct [3 0]
poncursor [0 22]
fin
Ejecución:
?bp simetría2 Continúa
dándole órdenes.
5) Que analogías y
diferencias tiene el procedimiento anterior con los dos siguientes:
para simetría.ejex
activa [0 1 2 3 4 5 6 7] ot
activa [0] ejes
activa [0 1] mt
ponct [1 0]
poncursor [0 0]
es [Continúa dándole
órdenes]
ponct [3 0]
poncursor [27 0]
es [ T = Terminar ]
poncursor [0 22]
sx
fin
para sx
(local "a "r "b "lista)
teclea "?
haz "lista ll
si o pr :lista = "t pr :lista = "T [alto]
activa [0]
poncl 1
ejecuta :lista
haz "a pos
haz "r rumbo
haz "b
lista pr :a -ul :a
activa [1]
poncl 2
ponrumbo 180 - :r
ponpos :b
sx
fin
Ejecución:
?bp
simetría.ejex Continúa dándole órdenes.
11.2. OBSERVA
El Logosb nos
brinda la posibilidad de utilizar hasta 8 tortugas al mismo tiempo. Cada
tortuga se corresponde con uno de estos números:
0 , 1, 2, 3, 4, 5, 6, 7
Para manejar las tortugas
múltiples utilizaremos las siguientes primitivas:
activa Es la orden que ACTIVA las tortugas. Una vez que hayamos ac tivado un determinado número de tortugas, éstas
permanecerán en ese estado hasta que
utilicemos de nuevo la primitiva ACTIVA con
otros números.
Ej. activa [0 1 2 3]
quien Devuelve una lista cuyos elementos son
números enteros que representan a la tortuga o tortugas activas en ese
momento.
Ej. muestra quien
11.3. RESOLUCION DE
PROBLEMAS
PROBLEMA 1:
Define un procedimiento en
el que 5 tortugas dibujen al mismo tiempo los cinco aros olímpicos.

PROBLEMA 2:
Define una
simetría respecto del eje OY.

PROBLEMA 3:
Simula un movimiento
uniforme circular y la proyección sobre un diámetro.

PROBLEMA 4:
Simula una persecución de un perro a un tren.

PROBLEMA 5:
Define un MENU para este tema y guarda
el contenido del Area de Trabajo en un fichero con una variable global arranque.

11.4. SOLUCIONES
PROBLEMA 1:
para oli OLIMPIADA
activa [0 1
2 3 4 5 6 7] ot
bt ponfondo 1
cirs
bar
fin
para cirs
activa [0 1
2 3 4 ] mt sl
activa [ 0 ] ponpos [-80 40] poncl 1
activa [ 1 ] ponpos [0 40] poncl 2
activa [ 2 ] ponpos [80 40] poncl 3
activa [ 3 ] ponpos [-40 -10]
activa [ 4 ] ponpos [40 -10] poncl 1
activa [0 1
2 3 4 ] bl
circ 50
activa [0]
fin
para circ :r
local "paso
haz "paso
2 * pi * :r / 36
sl gi 90 av
:r gd 90 bl
gd 5
repite 36 [av :paso gd 10]
gi 5
sl gi 90 re : r gd 90 bl
rellena
fin
para bar BARCELONA
poncursor [14 20]
es
"BARCELONA'92
fin
Arbol de los
procedimientos
oli --> circs -> circ
-->
bar
Ejecución:
? bp oli
PROBLEMA 2:
para simetría.ejey
activa [0 1 2 3 4 5 6 7] ot
activa [0] ejes
activa [0 1] mt
poncursor [0 0]
ponct [10]
es [Continúa dándole
órdenes]
ponct (3 0]
poncursor [27 0]
es [T = Terminar]
poncursor [0 22]
sy
fin
para sy
(local "a "r
"b "lista)
teclea "?
haz "lista ll
si o pr :lista = "t pr lista =
"T [alto]
activa [0]
poncl 1
ejecuta :lista
haz "a pos
haz "r rumbo
haz "b
lista -pr :a ul :a
activa [1]
poncl 2
ponrumbo :r
ponpos :b
sy
fin
para eje :n
repite :n [av 10 gd 90 av 2 re 4 av 2 gi 90]
fin
para ejes
activa[0 1 2 3 4 5 6 7] ot
poncl 3
activa [0] ponrumbo 0
activa [1] ponrumbo 90
activa [2] ponrumbo 180
activa [3] ponrumbo 270
activa [ 0 1 2 3 ]
eje 9
centro
ot activa [0] mt
fin
Arbol de los procedimientos
simetría.ejey
--> ejes --> eje
--> sy
Ejecución:
?bp bt simetría.ejey
?..................
se continúa dándole órdenes
PROBLEMA 3:
para
circular
(local
"ángulo "paso "v)
activa [0 1
2 3 4 5 6 7] ot
activa [0 1]
sl ponpos [80 0] bl
activa [0] mt
haz "paso 2 * pi * 80 / 36
ponrumbo
-5
repite 36
[av :paso gi 10]
gd 5 sl
teclea [Dame la velocidad = \ ]
haz "v lp
haz
"ángulo 360 * :v / (2 * pi * 80)
gi
:ángulo / 2
poncl 3
activa [1] mt
poncl 2
circul
fin
para circul
local
"x1
activa [0]
av :v gi :ángulo
haz "x1
pr pos
activa [1]
ponpos lista :x1 0
circul
fin
Arbol de los
procedimientos
circular ->
circul
Ejecución:
?bp bt
?circular
PROBLEMA 4:
para persecución2
(local "rl "r2 "a "b)
teclea [Dame la velocidad
del tren = \ ]
haz "r1
lp
teclea [Dame
la velocidad del perro = \ ]
haz "r2
lp
activa [0 1
2 3 4 5 6 7] ot
haz "a
[-150 80]
activa [0] sl mt ponpos :a
poncl 1
haz "b
[-150 -80]
activa [1] sl mt ponpos :b
poncl 2
activa [0 1] bl
perse2
fin
para perse2
si d :a :b < :r2 - :r1 [es [Persecución concluida] alto]
activa [0]
ponrumbo 90 av :r1
haz "a
pos
si :r1 + pr :a > 160 [es
[La presa se ha escapado] alto]
activa [1]
ponrumbo hacia :a av :r2
haz "b
pos
perse2
fin
para d :a :b
(local
"x1 "y1 "x2 "y2)
haz "x1 pr :a
haz "y1 ul :a
haz "x2 pr :b
haz "y2 ul :b
dev re (:x1
- :x2) * (:x1 - :x2) + (:y1
- :y2) * (:y1 - :y2)
fin
Arbol de los procedimientos
persecución2 ->
perse2 -> d
Ejecución:
?bp bt persecución2
PROBLEMA 5:
para menú
ponfondo 1 ponpaleta 0
cargadib "menú
activa [0 1 2 3 4 5 6 7] ot
ponct [1 0 ]
poncursor [6 11] es
[OPCIONES \ \ \ \ \ EJECUCION]
ponct [3 0]
poncursor [7 13] es
[1 \ \ Olimpiada]
poncursor [7 14] es
[2 \ \ Simetría eje OY]
poncursor [7 15] es
[3 \ \ Movimiento circular]
poncursor [7 16] es
[4 \ \ Persecución perro\- tren]
poncursor [7 17] es
[5 \ \ FIN]
ponct [2 0]
poncursor [8 21] es
[Pulsa la opción deseada]
ponct [7 0]
opciones
fin
para opciones
local "c
haz "c lc
si no miembro?
:c [1 2 3 4 5] [opciones alto]
si 1= :c [bp bt oli]
si 2 = :c [bp bt simetría.ejey]
si 3 = :c [bp bt circular]
si 4 = :c [bp bt persecución2]
si 5 = :c [bp bt alto]
continuar
fin
para continuar
local "v
poncursor [3 24]
teclea [¿Quieres
volver al menú? \(S\/N\)\]
haz "v lc
si "s = :v [menú]
pt bt
fin
Arbol de los procedimientos:
menú ->
opciones --> oli …
-->simetría.ejey
...
-->circular ...
-->persecución2 ...
-->continuar
->
menú
Ejecución:
?menú
Definimos una variable global arranque y lo
guardamos en un fichero
?haz "arranque [menú]
?guarda
"tema11