TORTUGAS MULTIPLES

 

 

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