RECURSIÓN Y CONDICIONAL

 

 

P ara parar un procedimiento en Logosb se utiliza la tecla F2 y en ACTI‑LOGO F10 ;algunas veces ara parar es necesario pulsar la tecla            e inmediatamente F2 o F10 según el Logo utilizado.

 

 

8.1. EXPERIMENTA

 

1) Dibuja las siguientes poliespirales

 

              

 

2) Copia el siguiente procedimiento y ejecútalo

 

para poli :d :a

si 180 < :d [alto]

av :d gd :a

poli :d + 5 :a

            fin                                                            

 

Ejecución:

 

?bp poli 5 90

?bp poli 5 123

               …………………..

 

3) Copia el siguiente procedimiento y ejecútalo

 

para polis

bp

ponfondo azar 16

ponpaleta azar 2

poli 5 90 + azar 90

espera 20

polis

fin

 

Ejecución:

 

?polis      

 

4) ¿Cuál es la función del siguiente procedimiento?. Cuando hayas intuido posible solución ejecútalo.

 

para color

bt

teclea [¿Color del fondo?1 ]

haz "c lp

si o 0 = :c "negro = :c [ponfondo 0]

si o 1= :c "azul = :c [ponfondo 1]

si o 2 = :c "verde = :c [ponfondo 2]

si (o 3 = :c "clan = :c "cyan = :c) [ponfondo 3]

si o 4 = :c "rojo = :c [ponfondo 4]

 si o 5 = :c "morado = :c [ponfondo 5]

si o 6 = :c "marrón = :c [ponfondo 6]

si o 7 = :c "blanco = :c [ponfondo 7]

color

fin

 

Ejecución:

 

?color

 

5) ¿Qué operación matemática realizan los siguientes procedimientos?, ejecútalos

 

para m :x :y

si :y = 0 [dev :x]

dev m :y resto :x :y

fin

 

para mcd

(local "x "y)

es [Este procedimiento calcula]

es [el M.C.D. de dos números]

es "

teclea [Escribe el primer número\]

haz "x lp

teclea [escribe el segundo número\ ]

haz "y lp

(teclea [M.C.D. \(] :x ", :y ") "\ \=\  m :x :y)

es "

es "                                           

mcd                                          

fin

 

Ejecución:

 

?pt bt mcd

 

 

 

8.2. OBSERVA

 

RECURSION

 

Consiste en llamar dentro de un procedimiento al mismo procedimiento, como por ejemplo poli del EXPERIMENTA.

 

CONDICION O PREDICADO

 

Es una expresión cuyo resultado es CIERTO o FALSO. Ejemplo:

 

100 < :d

 

Con las condiciones podemos volver el Logo de alguna manera inteligente; puede dilucidar entre varias posibilidades y elegirla que nos interese en cada caso.

 

si         Es un condicional, siempre tiene que ir seguido de un predicado y de una o dos acciones. SI el predicado es CIERTO, se ejecuta la acción, si hay dos acciones se ejecuta la primera. SI el predicado es FALSO, no se ejecuta la acción, si hay dos acciones se ejecuta la segunda. Las acciones tienen que ir entre corchetes.

 

Sintaxis

 

1) si predicado [acción]

 

Ej. si 180 < :d [alto]

 

2) si predicado [acción1] [acción2]

                                                                   

Ej. si 0 = resto: n 2 [es "Par] [es "Impar]

 

alto      Hace un ALTO en el ejecución y devuelve el control al procedimiento  del que venía.

          

           Ej. si 180 < :d [alto]

 

no        Devuelve CIERTO o FALSO según que el predicado sea FALSO o  CIERTO, es el NO lógico y devuelve el complementario.

          

           Ej. no 0 > :x

 

 

y          Devuelve CIERTO, si uno Y otro de los predicados de las entradas

            son CIERTOS, es decir, si todas las entradas son CIERTAS, en otro

            caso, devuelve FALSO.

              

               Ej. Y 0 < :x 10 > :x

 

o          Devuelve CIERTO, si uno O el otro de los predicados de las entradas

            son CIERTOS, es decir, si alguna de las entradas es CIERTA, en otro

            caso, devuelve FALSO.

              

               Ej. o 2 = :c "verde = :c

 

Las funciones lógicas o e y pueden llevar más de dos entradas, en este caso todo ello va entre paréntesis.

 

Ejemplo:

 

(o 3 = :c "cian = :c "cyan = :c "tres = :c)

 

dev        devuelve

 

DEVuelve el objeto de la entrada, y hace un alto DEVolviendo el control al procedimiento del que venía. Solo se puede usar dentro de procedimientos.

 

FUNCIONES EN LOGO

 

Son las primitivas o precedimientos que necesitan ir precedidas de otras primitivas.

 

Ej. coorx es coorx

 

8.3. RESOLUCION DE PROBLEMAS

 

PROBLEMA 1:

 

Define un procedimiento que dibuje estrellas, siendo al azar los colores del fondo y de la paleta.

Obtén una por impresora.

 

 

PROBLEMA 2:

 

Define un procedimiento para dibujar dirigiendo la tortuga mediante 6 teclas, obedecediendo con mayúsculas y con minúsculas. Obtén por impresora los procedimientos.

 

 

 

PROBLEMA 3:

 

Define un procedimiento que nos pregunte aleatoriamente la tabla de multiplicar, ejemplo:

 

¿Cuántos son?

6*8=48

Correcto

 

¿Cuántas son?

4*0=4

No, la respuesta es 0

 

PROBLEMA 4:

 

Definir un conjunto de procedimientos para representar parábolas.

 

PROBLEMA 5:

 

Definir un MENU para este tema y guardarlo en un fichero con la variable global arranque.

 

 

8.4. SOLUCIONES

 

PROBLEMA 1:

 

para estrella :d :a

poncl 1 + azar 3

av :d gd :a

si 0 = rumbo [alto]

estrella :d :a

fin

 

Ejecución:

 

?bp ponfondo 1

?estrella 100 150

?bp estrella 100 145

 

Para obtener una copia en la impresora, se pulsan las teclas

 

 

para estrellas

bp

ponfondo azar 16

ponpaleta azar 2

re 80

estrella 160 90 + azar 90

espera 20

estrellas

fin

 

Arbol de los procedimientos

 

estrellas --> estrella

 

Ejecución:

 

?estrellas

 

 

PROBLEMA 2:

 

para dibujar

bp mt

poncursor [0 0]

es [U = av 10]

es [N = re 10]

es [K = gd 15]

es [H = gi 15]

es [Z = bp]

es [F = FIN]

dib

fin

 

para dib

local "x

haz "x lc

si o "u = :x "U = :x [av 10]

si o "n = :x "N = :x [re 10]

si o "k = :x "K = :x [gd 15]

si o "h = :x "H = :x [gi 15]

si o "z = :x "Z = :x [dibujar alto]

si o "f = :x "F = :x [alto]

dib

fin

 

Arbol de los procedimientos

 

dibujar --> dib

 

Ejecución:

 

?dibujar

 

Para obtener por impresora estos dos procedimientos ejecutamos:

 

?eco "lpt1

?im [dibujar dib]

?noeco

 

PROBLEMA 3:

 

para mul

(local "x "y "n)

pt

haz "x azar 11

haz "y azar 11

es [¿Cuántas son?]

(teclea :x "\ "*  "\ :y "\\ =\ )

haz "n lp

si :n = :x * :y [es "correcto] [(es [No, la respuesta es] :x * :y)]

es "

mul

fin

 

Ejecución:

 

?pt mul

 

PROBLEMA 4:

 

para ejes

ponpaleta 0 poncl 2 ponfondo 1

ot ponrumbo 0

eje 10                                  

gd 90 eje 10

gd 90 eje 10

gd 90 eje 10

gd 90

fin

 

para eje :n

repite :n [gi 90 av 2 re 4 av 2 gd 90 av 10]

 

gi 90 av 2 re 4 av 2 gd 90 re:n*10

fin

para parábola

(local "a "b "c "x "y)

bt poncl 3 ponct [1 1]

poncursor [0 22]

es [Parábola y = ax\ + bx + c

poncursor [15 21] es 2

 

 

ponct [3 1] poncursor [0 23]

es "Coeficientes

poncursor [15 23]

teclea [a \=\ ]

haz "a lp

poncursor [23 23]

telclea [b \=\ ]

haz "b lp

poncursor [31 23]

teclea [c \=\ ]

haz "c lp

haz "x -10

haz "y :a * :x * :x + :b * :x + :c

 

sl ponpos lista -100 :y * 10 bl

paráb :x

fin

 

para paráb :x

si 10 < :x [alto]

haz "y :a * :x * :x + :b * :x + :c

filtro

ponpos lista :x * 10 :y * 10

paráb :x + .3

fin

 

para filtro

si 500< :y [haz "y 500]

si -500 > :y [haz "y -500]

fin

 

Arbol de los procedimientos

 

ejes -> eje

 

parábola -> paráb  --> filtro

 

Ejecución:

 

?bp ejes

?bt parábola

 

PROBLEMA 5:

 

para menú

ponfondo 1 ponpaleta 0

cargadib "menú

ot

ponct [1 0]

poncursor [6 11] es [OPCIONES \ \ \ \ \ EJECUCION]

ponct [3 0]

poncursor [10 13] es [1 \ \ \ \ \ Estrellas]

poncursor [10 14] es [2 \ \ \ \ \ Dibujar]

poncursor [1015] es [3 \ \ \ \ \ Tabla de multiplicar]

poncursor [10 16] es [4 \ \ \ \ \ Parábola]

poncursor [10 17] es [5 \ \ \ \ \ FIN]

ponct [2 0]

poncursor [8 20] 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 estrellas]

si 2 = :c [bp bt dibujar]

si 3 = :c [pt bt mul]

si 4 = :c [bp bt ejes parábola]

si 5 = :c [pt 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 --> estrellas ‑->    estrella

                                    -->dibujar    -->   dib

                                    -‑>mul

                                    --> ejes -‑> eje

                                    -->parábola  -->  paráb

                                -->continuar -->        menú

 

Ejecución:

 

?menú

 

Guardamos el contenido del Area de Trabajo en un fichero con la variable global arranque

 

haz "arranque [menú]

?guarda "tema8

 

 

8.5. PROYECTOS

 

PROYECTO 1. Geometría

 

Haz los procedimientos para dibujar una elipse con los focos y semiejes.

 

 

Angeles Fernández Yuncal

Carmen Uceda Arranz

Adolfo Alvarez Mateos

Luis Vegas Mollá

I. B. "Fijo y Garay".

 

Madrid


PROYECTO 2. Física

 

Diseña los procedimientos para representar gráficamente el movimiento uniformemente acelerado

 

 

M. Angeles Gutiérrez

Rosa M. Santander

I. B. "García Morato".

 

Madrid