Está en la página 1de 50

Manual de aprendizaje MSWLogo

Indice:

MSWLogo
Logo es un lenguaje de programacin, desarrollado a finales de los aos
70 por un equipo de matemticos, dirigidos por Seymour Papert en la
Universidad de California (Berkeley), con el fin de entrenar el pensamiento
lgico.
Todas las versiones de Logo desarrolladas para Unix, DOS, Macintosh y
Windows, son gratuitas y pueden ser copiadas y distribuidas, sin ningn
tipo de restriccin, con fines educativos. MSWLogo es la versin de Logo
para Windows.
Originalmente, el lenguaje Logo estaba destinado a controlar el
movimiento de un vehculo robotizado, con aspecto de tortuga, controlado
desde un ordenador. En la actualidad, el icono de la tortuga se ha
sustituido por un tringulo que se mueve en la pantalla del ordenador.
Cada vez que el programador introduce una orden como, por ejemplo,
AVANZA 200, el icono de la tortuga se mueve obedeciendo la orden y
dibujando, si el lpiz de la tortuga est bajado, una linea en la pantalla.

Primitivas
MSWLogo es un lenguaje interpretado, al igual que VisualBasic o Java.
Cuando se escribe cdigo de programa en un lenguaje interpretado, cada
una de las rdenes escritas es interpretada y ejecutada al momento, lo
que permite ver inmediatamente si la instruccin escrita produce el efecto
deseado.
Por el contrario, los lenguajes que deben ser compilados (como es el caso
de C++, Fortran, Pascal, etc.), deben ser convertidos a lenguaje mquina,
es decir, convertidos a unos y ceros, para que se puedan cargar en
memoria y ser ejecutados.

Las rdenes o instrucciones bsicas de MSWLogo se


llaman primitivas. Las primitivas deben escribirse en el
cuadro inferior de la ventana de trabajo. Al pulsar Enter
o hacer clic en el botn Ejecutar, la primitiva escrita se
ejecuta. Si la primitiva est mal escrita o si le faltan
datos, el intrprete contesta no s cmo... Cada una de
las rdenes queda anotada en la ventana de trabajo.
Un programa tpico, para dibujar un tringulo equiltero, en lenguaje
Logo tiene el siguiente aspecto:
avanza 100
giraderecha 120
avanza 100
giraderecha 120
avanza 100
giraderecha 120
Las palabras avanza y giraderecha son primitivas, que indican a la
tortuga que debe desplazarse hacia adelante o girar hacia la derecha. Los
nmeros que completan las instrucciones son los argumentos, que le
indican cunto debe avanzar o qu ngulo, en grados, debe girar.
Para salir de MSWLogo basta con introducir la primitiva adios en la
ventana de trabajo o seleccionar Archivo / Salir en el men principal.
Veamos a
continuacin una pequea muestra de las primitivas ms sencillas de
MSWLogo y de sus abreviaturas:
PRIMITIVA

ACCIN

ABREVIADO

AVANZA 150

La tortuga avanza el nmero indicado AV 150


de puntos (150).

RETROCEDE 80

Retrocede el nmero de puntos


especificado (80).

RE 80

GIRADERECHA 15

Gira a la derecha el ngulo


especificado en grados (15).

GD 15

GIRAIZQUIERDA 30 Gira a la izquierda el ngulo indicado GI 30


(30).
SUBELAPIZ

Levanta el lpiz y no pinta al moverse SL


por la pantalla.

BAJALAPIZ

El lpiz toca el papel y pinta cuando


se mueve.

GOMA

La tortuga borra a lo largo de su


trayectoria.

OCULTATORTUGA

Oculta el icono de la tortuga.

BL

OT

MUESTRATORTUGA Muestra el tringulo que representa


la tortuga.

MT

BORRAPANTALLA

Borra la pantalla grfica y sita la


tortuga en el centro.

BP

BORRATEXTO

Borra la pantalla de trabajo

BT

CENTRO

Lleva la tortuga al centro de la


pantalla sin borrar.

ROTULA [hola]

Escribe el texto especificado entre


corchetes (hola).

RO [hola]

PONCOLORLAPIZ 4 Establece el color con que pinta. El 4 PONCL 4


corresponde al rojo.
TONO [800 200]

Emite un sonido de [frecuencia


(800Hz) y duracin (200ms)]

PONGROSOR [3 3]

Fija el grosor y la altura del lpiz con PONG [3 3]


el que traza lneas.

ADIOS

Sale de MSWLogo.

Procedimientos
Un procedimiento es un fragmento de programa, formado
por una sucesin de primitivas. Todos los procedimientos
empiezan con la palabra para y terminan con la palabra
fin.
Los procedimientos empiezan con la palabra para, que es una declaracin
de comienzo, seguida por el nombre del procedimiento y terminan con la
palabra fin, que es la declaracin de cierre. Entre ambas declaraciones se
sitan las primitivas que, al ejecutarse, componen el procedimiento:
para nombre
primitiva 1
primitiva 2
.
etc.
fin
Una vez creado, un procedimiento puede ser invocado como una primitiva
ms del lenguaje.

Crear un procedimiento
Ejercicio 1: Hola mundo

4 de 50

Por ejemplo, crea un procedimiento llamado tax que escriba el mensaje


"Hola, mundo" en la ventana de trabajo.
para tax
escribe [Hola, mundo]
fin
Invoca ahora el procedimiento que has creado, escribiendo en la lnea de
rdenes de la ventana de trabajo la palabra tax. Funciona? Ten en
cuenta que los nombres de los procedimientos son totalmente arbitrarios.
Puedes ponerle a un procedimiento cualquier nombre que se te ocurra,
excepto el nombre de una primitiva.

Modificar un procedimiento
Ejercicio 2: escribe dos frases
Modifica el procedimiento tax de forma que escriba el mensaje "Hola,
mundo" y en la siguiente lnea "Qu tal va todo?" en la pantalla de
trabajo. Para ello abre el editor y aade otra lnea:
Archivo editar tax
para tax
escribe [Hola, mundo]
escribe [Qu tal va todo?]
fin
Invoca de nuevo el procedimiento tax y comprueba que los cambios que
has introducido se ejecutan correctamente. Lo ves? Esta es la forma ms
sencilla de modificar o mejorar un procedimiento ya escrito.

Rotular textos en la pantalla


Primitiva rotula
Muchas veces, necesitars que tu programa presente textos o ttulos en la
pantalla grfica. En esos casos utilizars la primitiva rotula. Su sintaxis es
muy sencilla:
rotula manzana
<manzana> en la pantalla
rotula [hoy es jueves]
jueves>
rotula (lista febrero abril y septiembre)
lista

escribe la palabra
escribe la frase <hoy es
escribe las palabras de la

10/12/2015 18:45

5 de 50

comprubalo!

Ejercicio 3: mox
Por ejemplo: crea un procedimiento llamado mox que rotule el mensaje
"Esto es un mensaje" en la pantalla del ordenador.
para mox
rotula [Esto es un mensaje]
fin
Invcalo, escribiendo mox en la lnea de comandos de la ventana de
trabajo. Notars que el rtulo aparece en la direccin apuntada por la
tortuga.

Ejercicio 4: mox corregido


Modifica el procedimiento mox para girar la tortuga antes de rotular y
lograr, de ese modo, que el rtulo se pueda leer horizontalmente, abriendo
el men:
Archivo editar mox
para mox
gd 90
rotula [Esto es un mensaje horizontal]
fin

Ejercicio 5: mox mejorado


Invoca mox varias veces. Notars que el mensaje aparece cada vez girado
90 grados respecto al anterior. Modifica el procedimiento mox para que el
rtulo siempre aparezca horizontal, restaurando la posicin de la tortuga
antes de rotular.
Archivo editar mox
para mox
bp
gd 90
rotula [Este mensaje siempre es horizontal]
fin
Si te fijas, al incluir en el cdigo del programa la orden bp (borrapantalla),
cada vez que llamas al procedimiento mox la tortuga se sita en el centro
de la pantalla y orientada hacia arriba. Y, como giramos la tortuga 90
grados, siempre rotula en direccin horizontal.

10/12/2015 18:45

6 de 50

Primitiva pontamaotipo
Si quieres puedes controlar la fuente con la que el programa rotula en la
pantalla. Esto incluye tanto el tipo de letra, que deber estar incluido en
la coleccin de fuentes de tu sistema operativo, como su tamao y
formato. Su sintaxis es como sigue:
pontamaotipo [ [Arial] alto ancho inclinacin grosor]

Ejercicio 6: elegir tipo de letra


Escribe, por ejemplo, en la ventana de textos
pontamaotipo [[ Comic Sans MS] 100 50 0 400]
gd 90 rotula [ Hola !!]
y vers cmo aparece un cartel escrito con ese tipo y tamao de letra

Variables
Una variable es un dato, que tiene un nombre, y que
puede tomar distintos valores.
El programador puede crear una variable en cualquier momento,
declarando su nombre y asignndole un valor. Para ello utiliza la primitiva
haz. Por ejemplo:
haz cosa 50
Las comillas indican que nos referimos al nombre de la variable. Esta
instruccin puede leerse as: crea una variable llamada cosa, cuyo valor
es 50.
En lo sucesivo, cosa vale 50. Se puede utilizar este valor asignado a la
variable, en un procedimiento, escribiendo dos puntos delante del nombre
de la variable. Por ejemplo:
rotula :cosa
Los dos puntos indican que ahora nos referimos al valor de la variable.
Esta instruccin puede leerse as: crea un rtulo con el valor de la
variable llamada cosa.

Ejercicio 7: por
Por ejemplo: crea un procedimiento llamado por que calcule el producto
de 15 por 68 y lo presente en la pantalla grfica:

10/12/2015 18:45

7 de 50

para por
bp
haz numero1 15
haz numero2 68
haz resultado :numero1 * :numero2
bp gd 90
rotula [15 x 68 = ]
av 90
rotula :resultado
fin
Funciona !!
Ejercicio 8: por mejorado
Para mejorar el procedimiento, debes conseguir que no aparezca un trazo
sobre los nmeros (levantando la tortuga antes de rotular el resultado) y
que, al final no se vea la tortuga. Sabrs hacerlo?
Como ves, en este procedimiento hemos declarado tres variables llamadas
numero1, numero2 y resultado. Observa atentamente cundo utilizamos
su nombre y cundo utilizamos su valor.

Nombre y valor de una variable


Es importante que comprendas la diferencia entre el nombre de una
variable y el valor de esa misma variable. Por ejemplo:

Instruccin

Producir

rotula hola

hola

rotula [hola]

hola

haz hola 79
rotula :hola

79

haz "hola 79
rotula hola * 2

error

haz "hola 79
rotula :hola * 2

158

Guardar los procedimientos en el disco


Un programa escrito en Logo est compuesto por uno o

10/12/2015 18:45

8 de 50

varios procedimientos y debe guardarse en el disco duro,


en un archivo. De este modo, se podr cargar el archivo y
ejecutar el programa ms adelante.
Los archivos que contienen cdigo fuente escrito en
MSWLogo son archivos de texto plano (sin formato) que
tienen la extensin .lgo

Ejercicio 9: Guardar procedimientos en un archivo


Por ejemplo, guarda en el disco duro todos los procedimientos creados
hasta ahora en un archivo llamado misejercicios.lgo. Elige con cuidado
en qu carpeta lo vas a guardar.
Archivo guardar como... misejercicios.lgo
Ejercicio 10: Abrir un archivo lgo con un editor de texto
Cierra MSWLogo y busca en tu disco duro el archivo misejercicios.lgo
que acabas de guardar. brelo con un editor de textos simple, como
Wordpad o el Bloc de notas de Windows. Observars que el archivo que
contiene tu cdigo fuente es un simple archivo de texto, que se puede
modificar fcilmente con el editor de textos.
Ejercicio 11: Cargar un archivo lgo en MSWLogo
Inicia de nuevo MSWLogo y carga tu archivo de ejercicios acudiendo al
men:
Archivo cargar misejercicios.lgo
Ejercicio 12: Listado de procedimientos contenidos en un archivo
Saca un listado de los procedimientos creados hasta este momento,
escribiendo en la lnea de rdenes de la ventana de trabajo:
escribe contenido
Ejercicio 13: Borrar procedimientos de un archivo
Borra uno de los procedimientos contenidos en el archivo
misejercicios.lgo
borra "sox
escribe contenido
Comprobars que el procedimiento sox ha desaparecido de la lista
Ejercicio 14: Borrar todos los procedimientos de un archivo
Borra todos los procedimientos contenidos en el archivo misejercicios.lgo

10/12/2015 18:45

9 de 50

borra contenido
escribe contenido
En este momento, el archivo misejercicios.lgo ha sido vaciado de
procedimientos. Como no queremos perderlos, NO GUARDES LOS
CAMBIOS EFECTUADOS:
Archivo salir rechazar
Ejercicio 15: Verificar los procedimientos incluidos en un archivo
Carga del disco nuevamente los procedimientos salvados anteriormente.
Archivo cargar misejercicios.lgo
escribe contenido
Comprueba que has recuperado la versin guardada de misejercicios.lgo y
que estn disponibles todos los procedimientos que incluiste en ese
archivo.

Situar la tortuga en la pantalla


La posicin inicial de la tortuga est en el centro de la
pantalla, donde est el origen de coordenadas [0 0] y
orientada verticalmente hacia arriba, que es el origen
desde el que se miden los ngulos (0).
Para crear figuras y presentarlas, la tortuga debe moverse por la pantalla
de grficos, avanzando o retrocediendo una cantidad precisa de puntos y
girando ngulos precisos. Por eso conviene mantener el control acerca del
lugar en el que se sita la tortuga y en qu direccin se mueve. Para ello
hay un buen puado de primitivas como, por ejemplo:
borrapantalla
(bp)

Borra todo y sita la tortuga en su


posicin inicial.

limpia

Borra todo y deja la tortuga donde


est

centro

Sita la tortuga en la posicin inicial,


sin borrar nada.

ponpos

[x y]

Sita la tortuga en las coordenadas


especificadas

ponrumbo

Orienta la tortuga en la direccin del


ngulo

pos

Devuelve las coordenadas de la


tortuga como una lista [x y]

10/12/2015 18:45

10 de 50

Ejercicio 16: trazos


Crea un procedimiento llamado trazos que dibuje una linea de trazos, de
100 pixel de largo. Al terminar el procedimiento, muestra la tortuga en el
centro de la pantalla.
para trazos
limpia
sl ot
ponpos [-500 0]
gd 90
bajalapiz avanza
bajalapiz avanza
bajalapiz avanza
bajalapiz avanza
bajalapiz avanza
bajalapiz avanza
ponpos [0 0]
gi 90
mt
fin

100
100
100
100
100
100

subelapiz
subelapiz
subelapiz
subelapiz
subelapiz
subelapiz

avanza
avanza
avanza
avanza
avanza
avanza

100
100
100
100
100
100

Observars que, por comodidad, est permitido usar abreviaturas como ot


o mt en lugar del nombre completo de la primitiva ocultatortuga o
muestratortuga, sl o bl en lugar de subelapiz o bajalapiz

Ejercicio 17: cuadro


Haz un procedimiento llamado cuadro para dibujar, en la pantalla grfica,
un cuadrado de 50 pxeles de lado. La posicin de partida ser el centro
de la pantalla.
para cuadro
bp bl
av 50 gd 90
av 50 gd 90
av 50 gd 90
av 50 gd 90
fin

Ejercicio 18: chispa


El siguiente procedimiento, llamado chispa, dibuja una estrella mediante
trazos:
para chispa
bp
ponrumbo 0

sl av 10 bl av 40 sl centro

10/12/2015 18:45

11 de 50

ponrumbo
ponrumbo
ponrumbo
ponrumbo
ponrumbo
ponrumbo
ponrumbo
ot
fin

45 sl av 10 bl av 40 sl centro
90 sl av 10 bl av 40 sl centro
135 sl av 10 bl av 40 sl centro
180 sl av 10 bl av 40 sl centro
-135 sl av 10 bl av 40 sl centro
-90 sl av 10 bl av 40 sl centro
-45 sl av 10 bl av 40 sl centro

Ejercicio 19: marco


Averigua las coordenadas de las cuatro esquinas de tu pantalla, haciendo
avances exploratorios con la tortuga. Cuando conozcas dichas
coordenadas, escribe un procedimiento, llamado marco que dibuje un
marco rectangular alrededor de la pantalla.

Manejar el lpiz
Para hacer dibujos en la pantalla grfica, manejamos el lpiz virtual que
est asociado a la tortuga. Hay un grupo de primitivas bsicas, dedicadas
al manejo del lpiz, que debes conocer:
PRIMITIVA

ABREVIADO

ACCIN

subelapiz

sl

Levanta el lpiz del papel y


no pinta al moverse

bajalapiz

bl

Baja el lpiz y deja un trazo


al moverse la tortuga

poncolorlapiz [RGB] poncl [RGB] Asigna al lpiz un color


compuesto [rojo verde azul]
poncolorlapiz n

poncl n

Asigna al lpiz el color


nmero n de la tabla

pongrosor [g g]

pong [g g]

El grosor del lpiz es de g


puntos de alto y de ancho

poncolorpapel [RGB] poncp


[RGB]

Establece el color del fondo


de la pantalla grfica

poncolorrelleno [r v poccr [RGB] Fija el color con el que


rellenar figuras cerradas
a]
Sustituye el lpiz por una
goma que borra al
desplazarse

goma

ponlapiz

pla

Deja la goma y vuelve a


coger el lpiz

10/12/2015 18:45

12 de 50

Ejercicio 20: marcas


Con el siguiente procedimiento, que llamaremos marcas, vamos a crear
un logotipo compuesto por trazos de color borrados parcialmente:
para marcas
bp gd 90 sl
pongrosor [15 15]
ponpos [0 15] bl poncl 4 av 120 sl
ponpos [0 45] bl poncl 1 av 120 sl
ponpos [0 75] bl poncl 2 av 120 sl
ponpos [0 105] bl poncl 6 av 120 sl
goma pongrosor [8 8]
ponrumbo 180 sl
ponpos [15 120] bl av 120 sl
ponpos [45 120] bl av 120 sl
ponpos [75 120] bl av 120 sl
ponpos [105 120] bl av 120 sl
ponlapiz sl
poncl 0 pongrosor [5 5]
ponpos [-10 -10] ponrumbo 0 bl
av 140 gd 90 av 140 gd 90 av 140 gd 90 av 140
pongrosor [0 0]
ot
fin

Repeticin
Para evitar la escritura repetida de lneas de cdigo
idnticas o muy parecidas, recurrimos a primitivas que
indican al ordenador cuntas veces debe repetir una
instruccin

Ejercicio 21: cuadro mejorado


Modifica el procedimiento cuadro para dibujar un cuadrado de 50 pxeles
de lado, utilizando muy pocas lineas de cdigo:
para cuadro
bp
repite 4 [av 50 gd 90]
fin
Como ves en el ejemplo anterior, con la primitiva repite se consigue
reducir drsticamente el nmero de lneas de cdigo de tu programa. La
escritura de un programa es ms clara y elegante cuanto menos lineas
de cdigo tiene.

10/12/2015 18:45

13 de 50

Ejercicio 22: blonda


Con la tcnica de la repeticin puedes hacer grficos impactantes. Por
ejemplo, el siguiente procedimiento, llamado blonda, dibuja muchos
cuadrados pero la tortuga se desplaza y gira un poco cada vez que termina
de dibujar uno de los cuadrados.
Los efectos pueden ser sorprendentes, con slo variar las cifras de los
desplazamientos y los giros. Prubalo introduciendo modificaciones en
el siguiente cdigo:
para blonda
bp repite 12 [repite 40 [repite 4 [av 100 gd 90] gd 9] av 60 gi 30]
fin

Comentarios en el cdigo
Completar con comentarios las lineas de cdigo es una
buena idea. Los comentarios empiezan con el smbolo ;
(punto y coma). Todo lo que se escriba a continuacin del
punto y coma no se ejecuta en el programa.
Gracias a los comentarios es ms fcil recordar las ideas
que tuvimos al programar, y otro programador puede
reparar o mejorar el cdigo de nuestro programa.

Ejercicio 23: por mejorado


Por ejemplo, el procedimiento por se entendera mejor si el cdigo
ejecutable estuviese complementado con comentarios como estos:
para por
bp
haz numero1 15
valor 15
haz numero2 68
valor 68
haz resultado :numero1 * :numero2
bp gd 90
horizontal
rotula [15 x 68 = ]
operacin
av 90
signo =
rotula :resultado

;la primera variable toma el


;la segunda variable toma el
;calculamos el producto
;la tortuga en el centro y
;rotula los factores de la
;se desplaza a la derecha del
;rotula el resultado

fin

10/12/2015 18:45

14 de 50

Sangrado del cdigo


Cuando una lnea contiene muchas instrucciones
juntas resulta difcil comprender los efectos que
producir dicho cdigo. Slo se deben unir las
instrucciones que forman una unidad funcional.
Adems, para mejorar la lectura resulta muy til
sangrar y alinear las lineas que corresponden al
mismo bucle o subrutina.
En el procedimiento del ejercicio anterior hay muchos corchetes que
encierran partes que se ejecutan por separado. Fjate cmo mejora la
lectura del cdigo si utilizamos tabuladores para que cada seccin del
procedimiento quede claramente separada:
para blonda
bp
repite 12 [
;hace 12 veces lo que sigue
repite 40 [
;hace 40 veces lo que sigue
repite 4 [av 100 gd 90] gd 9] ;hace un cuadrado y gira a la
derecha
av 60 gi 30]
;avanza y gira a la izquierda
fin

Los colores
Los colores de la pantalla y el lpiz, se fijan con las
rdenes poncp y poncl seguidos de un cdigo de color.
Ese cdigo del color puede ser un nmero, entre 0 y 15,
de modo que cada nmero se corresponde con un color
de la tabla siguiente, por ejemplo: poncl 1 elige el lpiz
azul.
Tambin se puede emplear un conjunto de tres cifras
entre corchetes, entre 0 y 255, que se corresponden con
la cantidad de luz roja, verde y azul que compone el color
deseado. Por ejemplo: poncp [207 176 89]

Tabla de colores
0

10

11

12

13

7
15

10/12/2015 18:45

15 de 50

Ejercicio 24: hexa


Haz un procedimiento, llamado hexa, que dibuje un hexgono de lado
120, con grosor 3 y de color marrn (8) sobre fondo carmn (12).
para hexa
bp bl
poncp 12
;papel de color carmn
poncl 8
;lpiz marrn
pong [3 3]
;grosor de 3 puntos
repite 6 [av 120 gd 60] ;dibuja un hexgono
ot
fin
23. Haz un procedimiento llamado dode que dibuje un dodecgono de
lado 40, con grosor 2 y de color azul (1) sobre fondo amarillo (6)
para dode
bp bl
poncp 6 poncl 1 pong [2 2]
repite 12 [ av 40 gd 30]
ot
fin
Fjate que, para dibujar cualquier polgono regular de 80 puntos de lado,
el conjunto de rdenes es el mismo. La nica variacin entre un polgono y
otro es el nmero de lados, que coincide con el nmero de repeticiones, y
el ngulo que debe girar la tortuga.
24. Toma una hoja de papel, copia la tabla siguiente y rellena las celdas
vacas con los valores adecuados:
Polgono Lados Orden que se repite
Tringulo 3 repite 3 [av 80 gd 120]
Cuadrado 4 repite 4 [av 80 gd 90]
Pentgono 5
Hexgono 6
Heptgono 7
Octgono
Enegono
Decgono
Icosgono

Rellenar de color
Las figuras creadas en el entorno grfico pueden rellenarse de color,
utilizando la primitiva rellena. El color de relleno se establece con la
primitiva poncolorrelleno.
Para que el relleno funcione se deben cumplir algunos requisitos: la figura
debe estar cerrada, la tortuga debe situarse en el interior de dicha figura y

10/12/2015 18:45

16 de 50

el lpiz debe estar levantado con la primitiva subelpiz sl.


25. Por ejemplo: vamos a modificar el procedimiento cuadro para que el
cuadrado que resulta quede relleno de color.
para cuadro
bp bl
poncp 14
;el papel ser de color naranja
poncl 0
;el lpiz pintar en negro
poncolorrelleno 10
;el relleno ser verde oscuro
repite 4 [ av 80 gd 90]
;dibuja un cuadrado
sl gd 45 av 3
;levanta el lpiz y se mete dentro del cuadrado
rellena
;rellena de color
ot
fin

Procedimientos con parmetros


Se puede escribir un procedimiento de tal manera que se ejecute con el
valor de la variable que acompaa al nombre del procedimiento.
Una variable permite guardar un valor, tanto numrico como de texto. En
cualquier momento se puede tomar el contenido de esa variable o
cambiarlo por otro nuevo. Cuando damos un valor a una variable que ya
exista, el valor antiguo se pierde.
26. Escribe un procedimiento capaz de dibujar un cuadrado cualquiera.
El tamao del cuadrado se especificar mediante la variable lado que
acompaar al nombre del procedimiento cuando lo invoques.
para cuadro :lado
bp
repite 4 [av :lado gd 90]
fin
Ahora invcalo para que dibuje un cuadrado de lado 100, tecleando
cuadro 100. Prueba tambin a teclear cuadro 20, cuadro 78 o cuadro 35.
Lo ves?. Te obedece.
27. Piensa: Sera posible construir un nico procedimiento, que fuese
capaz de dibujar cualquier polgono regular? Si, porque el ngulo que
debe girar la tortuga puede deducirse fcilmente a partir del nmero de
lados del polgono.
28. Escribe un procedimiento, de nombre poli seguido de la variable
lados, que dibuje un polgono regular de 80 puntos de lado, con el nmero
de lados indicado en la variable lados
para poli :lados
bp bl
poncp 12 poncl 8 pong [3 3]
;fija los colores y el grosor del lpiz
haz angulo 360/:lados
;calcula el ngulo de giro en cada vrtice
repite :lados [av 80 gd :angulo]
;dibuja el polgono
ot
fin
29.

Modifica el procedimiento poli para que admita dos parmetros: el

10/12/2015 18:45

17 de 50

nmero de lados y la longitud de esos lados


para poli :lados :longitud
bp bl
poncp 12 poncl 0 pong [3 3]
haz angulo 360/:lados
repite :lados [av :longitud gd :angulo]
ot
fin
Para probarlo, escribe en la lnea de rdenes el polgono que quieres que
dibuje. Por ejemplo, si le ordenas poli 5 90 deber dibujar un pentgono
cuyos lados miden 90 puntos.
30. Y, si somos capaces de dibujar un polgono cualquiera, podremos
dibujar un crculo?. Escribe un procedimiento, llamado aro, capaz de
dibujar un crculo del radio que se le indique.
para aro :radio
haz "avance :radio*tan 1
repite 360 [av :avance gd 1]
fin
Primitivas circulo, arcodeelipse
Afortunadamente, hay primitivas que dibujan un crculo de una forma
ms sencilla, como la primitiva circulo, cuya sintaxis es as:
circulo r
donde r es el radio del crculo, cuyo centro estar en el centro de la
tortuga. As pues, para dibujar un crculo cuyo radio es 75, bastar
escribir la orden:
circulo 75
Tambin puedes utilizar la primitiva arcodeelipse, cuya funcin es
dibujar arcos de elipse y su sintaxis es como sigue:
arcodeelipse angulo mayor menor inicial
donde angulo es el ngulo recorrido por el arco, mayor es la longitud del
eje semiejemayor de la elipse, menor es la longitud del semieje menor e
inicial es el ngulo o rumbo desde el que empieza el arco. Para dibujar el
mismo crculo de 75 de radio, bastar con escribir:
arcodeelipse 360 75 75 0
31. Ahora, para practicar la programacin de reiteraciones con
parmetros, modifica el procedimiento trazos para crear otro
procedimiento llamado trazo :longitud, que dibuje en la pantalla una lnea
de trazos, de longitud ajustable, que ocupe toda la pantalla.
Redacta un programa con el menor nmero posible de lneas de cdigo,
utilizando la repeticin de una nica orden. El procedimiento debera
tener un aspecto como este:
para trazo :longitud
...
fin

Uso de procedimientos como primitivas


Un procedimiento creado con primitivas u otros procedimientos, puede ser

10/12/2015 18:45

18 de 50

utilizado como una primitiva ms del lenguaje.


32. Haz un procedimiento, llamado penta, que dibuje en la pantalla
grfica un pentgono de cualquier longitud de lado. Posteriormente utiliza
ese procedimiento ya creado, en uno nuevo que dibuje seis pentgonos,
unidos entre s por un vrtice y formando una estrella.
para penta :lado
repite 5 [av :lado gd 72]
fin
para estrella :lado
bp bl
poncp 10 poncl 0 pong [3 3]
repite 6 [penta :lado gd 60]
ot
fin
Fjate que, en el cdigo del procedimiento estrella aparece una llamada al
procedimiento penta :lado, como si fuese una primitiva ms del lenguaje!
33. Guarda este grfico, creado con MSWLogo, en una carpeta de tu
disco duro con formato de mapa de bits .bmp. Para ello abre el men
bitmap Guardar como... Estrellapenta
34. brelo con un editor de imgenes, como Gimp o Pixia, y
comprobars que puedes trabajar con l y exportarlo a otro formato.
Insrtalo tambin en un documento de texto como OpenOffice Writer.
35. Escribe un procedimiento, llamado figura, que dibuje una figura
compuesta por un cuadrado, de lado cualquiera, que tiene un tringulo
equiltero en cada uno de sus lados, como el de la siguiente ilustracin:
Figura
36. Aprovechando el procedimiento aro :radio que ya tienes creado,
escribe un procedimiento llamado donut :radio que dibuje crculos
consecutivos, pero de forma que cada vez que empieza a dibujar un
crculo nuevo lo haga desvindose un cierto ngulo respecto al anterior,
para llegar a formar una corona con aspecto de rosquilla como la de la
ilustracin siguiente:
Figura donut
Cuando veas aparecer el donut ante tus ojos podrs comprender, quiz,
qu es la programacin elegante: conseguir un resultado espectacular con
muy pocas lneas de cdigo.
37. Podras dibujar una flor? Un mtodo sencillo podra consistir en
dibujar cada ptalo con un cuarto de crculo hecho con varios segmentos.
Por ejemplo:
para cuarto :paso
repite 9 [av :paso gd 10]
fin
Dibujar un ptalo es fcil, con dos cuartos de crculo:
para petalo :paso

10/12/2015 18:45

19 de 50

repite 2 [cuarto :paso gd 90]


fin
38. Ahora te toca a ti lo ms fcil: escribe un procedimiento, llamado flor
que sea capaz de dibujar una flor compuesta de varios ptalos, como esta:
Figura flor
39. Ahora, utilizando repeticiones de procedimientos, experimenta a tu
aire creando imgenes hechas con figuras sencillas (polgonos simples,
crculos, etc.), que vuelven a dibujarse una y otra vez, tras
desplazamientos y giros de la tortuga.

Estructuras de datos
A veces, manejamos muchos datos y variables en un programa. Los
programadores suelen agrupar los datos y variables formando estructuras
regulares, tales como matrices, listas, frases o palabras. Estas estructuras
nos permiten manejar, de forma racional y ordenada, grupos de
caracteres o grupos de datos para utilizarlos como variables en nuestros
programas.
Una lista es una entidad compuesta por una sucesin de datos, que
pueden ser letras, palabras completas, variables o nmeros. Para
referirnos a uno de los elementos de una lista bastara con utilizar el
ndice que seala al elemento.
Una matriz es una entidad que organiza los datos en filas y columnas. De
este modo, para referirnos a un dato de una matriz bastara con citar los
ndices que sealan a la fila y la columna en la que se encuentra dicho
dato.
Primitiva lista
La primitiva lista crea una lista cuyos elementos son los datos que se
declaran. Por ejemplo:
escribe (lista Zaragoza Toledo Len Huelva)
har que aparezca Zaragoza Toledo Len Huelva en la ventana de textos
rotula lista [2 3 7 9] [rojo negro]
har que aparezca [2 3 7 9] [rojo negro] en la pantalla grfica
haz k -240
haz w 110
ponpos (lista :k :w)
desplazar la tortuga hasta las coordenadas -240 110
40. Al presentar datos en pantalla comprenders la utilidad prctica de
las listas. Por ejemplo, escribe un procedimiento, llamado sumar, que nos
pida dos nmeros y nos devuelva el resultado de sumarlos en la ventana
de grficos.
para sumar
bp gd 90 ot sl bt
; inicializa las pantallas
ponpos [-200 0]
; sita el puntero
rotula [Qu nmeros quieres sumar?]
haz "num1 leepalabra
; pide al usuario el primer nmero
haz "num2 leepalabra
; pide y captura el segundo nmero
bp gd 90
; limpia la pantalla

10/12/2015 18:45

20 de 50

ponpos [-200 0]
; sita el puntero al comienzo
rotula [LA SUMA DE ]
ponpos [-85 0]
; de cada uno de los
rotula :num1
ponpos [-45 0]
; fragmentos del mensaje
rotula [+]
ponpos [-30 0]
; de salida
rotula :num2
ponpos [10 0]
rotula [= ]
ponpos [30 0]
rotula :num1 + :num2
; calcula la suma y la presenta
fin
Observa que, si introduces nmeros largos, se producen problemas al
rotular cada una de las partes del mensaje de salida.
41. Si quieres que la presentacin del resultado sea ms elegante, en
una sola lnea de cdigo y sin tener que preocuparte de cunto espacio
necesitas para cada cifra, puedes conseguirlo utilizando la primitiva lista.
El procedimiento sumar quedara as:
para sumar
bp gd 90 ot sl bt
ponpos [-200 0]
rotula [Qu nmeros quieres sumar?]
haz "num1 leepalabra
haz "num2 leepalabra
bp gd 90
ponpos [-200 0]
rotula (lista "La "suma "de :num1 "+ :num2 "= :num1+:num2)
fin
En una nica lnea de cdigo hemos resuelto la presentacin. Mucho ms
elegante, no es cierto? Prubalo introduciendo nmeros muy largos o
muy cortos.

Primitiva leelista
La primitiva leelista presenta una ventana de entrada de datos en pantalla
y construye una lista con los caracteres tecleados por el usuario en su
terminal. Por ejemplo:
rotula leelista
rotular en la pantalla cualquier texto que teclees en la ventana de
entrada
haz "k leelista
escribe elemento 2 :k
escribir en la ventana de textos la segunda de las palabras tecleadas
42. Por ejemplo; hagamos un procedimiento llamado identidad, capaz de
preguntarte tu nombre y luego saludarte escribindolo en la pantalla.
para identidad
bp gd 90 ot sl bt
rotula [Cul es tu nombre y apellidos?]
haz "napel leelista

10/12/2015 18:45

21 de 50

bp gd 90
rotula (lista Hola! :napel)
fin
43. Escribe un procedimiento llamado pesetas capaz de convertir euros
a pesetas y que presente el resultado sin espacios superfluos
para pesetas
bp gd 90 sl ot
ponpos [-200 0]
rotula [De cuntos euros se trata?]
haz euros leelista
haz pesetas :euros *166.386
bp gd 90
ponpos [-200 0] rotula (lista :euros Euros son: :pesetas Pesetas.]
fin

Primitivas elemento, ponelemento, primero


Los elementos de una lista pueden seleccionarse citando el ndice, como
vimos en la sintaxis de la primitiva lista. Tambin pueden modificarse
utilizando el ndice. Por ejemplo;
haz ww lista (verde azul sepia morado)
rotula elemento 3 :ww
rotular la palabra sepia en la pantalla grfica
haz ww lista (verde azul sepia morado)
ponelemento 3 :ww amarillo
escribe :ww
escribir verde azul amarillo morado en la ventana de textos
haz ww lista (verde azul sepia morado)
rotula primero :ww
rotular la palabra verde en la pantalla grfica
44. Haz un procedimiento, llamado nombre, que pregunte su nombre de
pila al usuario, lo guarde en una variable, y lo rotule en la pantalla con el
formato TU NOMBRE ES: nombre.
para nombre
bp sl ot gd 90
; prepara la pantalla
rotula [Cmo te llamas?]
haz "name primero leelista
; toma la primera palabra tecleada
bp gd 90
; limpia la pantalla
rotula (lista Hola!, :name Qu tal ests?)
fin
Primitivas palabra y frase
Una palabra es una lista de caracteres. Puede construirse desde un
programa o solicitrselas al usuario desde el teclado. Una frase, por su
parte, es una lista de palabras.
Las palabras y las frases se manejan, por tanto, como una lista
cualquiera, cuyos elementos pueden seleccionarse y modificarse.
palabra dato1 dato2 dato3 ...

;forma una palabra con los datos

10/12/2015 18:45

22 de 50

indicados
frase palabra1 palabra2 ...
;forma una frase con las palabras
indicadas
elemento indice objeto
;devuelve el carcter, o la palabra, que ocupa
la posicin del ndice
45. Por ejemplo, podemos componer el cdigo de un procesador, por
ejemplo, uniendo en una palabra la marca, el modelo y la velocidad:
para codigo
bp gd 90 ot
haz "numserie (palabra "Intel- "PIV "- "3,2 "Ghz) ;construye la palabra
rotula :numserie
;escribe la palabra
fin
La primitiva palabra ignora los espacios, que nunca pueden formar parte
de una palabra.
46. Ahora modificaremos el anterior procedimiento, aadiendo una
instruccin que extrae algunos elementos de una palabra y los escribe en
la ventana de textos:
para codigo
bp gd 90 ot
haz "numserie (palabra "Intel- "PIV "- "3,2 "Ghz) ;construye la palabra
rotula :numserie
;escribe la palabra
haz j elemento 7 :numserie
;toma tres letras de la palabra
haz k elemento 8 :numserie
haz m elemento 9 :numserie
haz tipo (palabra :j :k :m)
;construye una nueva palabra
escribe (lista microprocesador :tipo)
;la escribe en los textos
fin
47. Haz un procedimiento con el nombre inicial, que pregunte tu
nombre y responda cul es la letra inicial de tu nombre.
para inicial
bp ot sl gd 90
rotula [Cul es tu nombre?]
haz "letra primero leepalabra
bp gd 90
ponpos [-100 0]
rotula [Tu nombre empieza por ]
ponpos [125 0]
rotula :letra
fin

Clculos matemticos
Primitivas entero, redondea y raizcuadrada
48. Haz un procedimiento que nos pida un nmero con decimales y nos
devuelva la parte entera del mismo, el nmero redondeado y su raz
cuadrada, en la ventana de trabajo.
para numeros
bt
escribe [ESCRIBE UN NUMERO CON DECIMALES]

10/12/2015 18:45

23 de 50

haz "valor leepalabra


escribe (lista "NUMERO "SOLICITADO: :valor)
escribe (lista "LA "PARTE "ENTERA "ES: entero :valor)
escribe (lista "SU "VALOR "REDONDEADO "ES: redondea :valor)
escribe (lista "SU "RAIZ "CUADRADA "ES: rc :valor)
fin
Primitivas azar, resto y muestra
49. Haz un procedimiento, llamado loteria, que genere dos nmeros
aleatorios entre el 0 y el 255 y los muestre en la ventana de trabajo.
Adems devolver el resultado de dividir el primero entre el segundo, y su
resto.
para loteria
bt
;borra la pantalla de trabajo
haz "num1 azar 255
;genera al azar dos nmeros menores que
255
haz "num2 azar 255
escribe (lista "Primer "nmero "aleatorio: :num1)
escribe (lista "Segundo "nmero "aleatorio: :num2)
escribe (lista "Su "cociente "es: :num1/:num2)
escribe (lista "Y "queda "un "resto "de: resto :num1 :num2)
fin
50. Escribe un procedimiento, llamado num10, que sea capaz de
escribir 6 nmeros aleatorios entre 0 y 10.
para num10
bt
repite 6 [muestra azar 11]
fin
51. Ahora escribe un procedimiento, al que llamaremos num25, que
escriba ocho cifras elegidas al azar entre el 2 y el 5. Las cifras no deben
ser menores que 2 ni mayores que 6
para num25
bt
repite 8 [haz "num1 azar 4
escribe :num1+2]
fin
52. Finalmente, te voy a presentar un procedimiento, que he llamado
multistar, que dibuja estrellas al azar en la pantalla:
para multistar
bp
poncp [20 9 60]
;Sobre un fondo azul oscuro
repite 100 [
haz "lado azar 40
;Sortea el tamao de la estrella < 40
haz "x -450 + azar 900
;Sortea la coordenada x
haz "y -300 + azar 600
;Sortea la coordenada y
poncl azar 15
;Sortea el color del lpiz
sl ponpos (lista :x :y) gd :y bl
;Colcate en la posicin de dibujo
repite 5 [av :lado gd 144]]
;Dibuja una estrella
ot
;Oculta la tortuga
fin

10/12/2015 18:45

24 de 50

Qu bonito! Lee atentamente el cdigo de las lneas en las que se fijan las
coordenadas en las que dibujar una estrella y trata de comprender por
qu las he escrito as.

Primitivas sen, cos y tan


53. Haz un procedimiento, con el nombre de trigo, que nos pida el valor
de un ngulo y nos devuelva el seno, el coseno y la tangente en la ventana
de trabajo.
para trigo
bt
haz "valor leepalabra
escribe (lista ngulo: :valor grados)
escribe (lista Su seno es: sen :valor)
escribe (lista Su coseno: cos :valor)
escribe (lista Y su tangente: tan :valor)
fin

54. Ahora t solo: escribe un procedimiento, llamado senoide :pico,


capaz de dibujar en la pantalla la funcin y = Vmax *sen x dndole el
valor mximo de la funcin :pico
Figura senoide
Procedimientos recursivos
A veces nos puede interesar que un procedimiento se repita una y otra
vez. Podemos ordenar que se repita un nmero determinado de veces,
como ya has visto. Tambin podemos hacer que se repita indefinidamente,
incluyendo una lnea de cdigo, antes del comando fin que vuelve a llamar
al propio procedimiento para que vuelve a empezar. En este caso, el
procedimiento necesitan una orden alto para detenerse.
Auto llamada
55. En el siguiente ejemplo, haremos un procedimiento que se llama a si
mismo: el procedimiento al que llamaremos zigzag, dibujar una lnea en
zigzag, indefinidamente:
para zigzag
ponrumbo 45
;orienta la tortuga en diagonal
av 150 gd 90
;traza un segmento y gira a la derecha
av 150 gi 90
;traza otro segmento y gira a la izquierda
espera 2
;espera un poco
zigzag
;se llama a si mismo
fin
Qu pasara si el segmento de subida del zigzag fuese ms largo o ms
corto que el flanco de bajada? Comprubalo.
Qu pasara si incluimos una orden de borrar pantalla en el cdigo de
este procedimiento?
Uso de contadores
56. Con el cdigo del siguiente procedimiento, llamado filigrana, el
ordenador dibujar 200 pentgonos. Pero cada vez lo har en un lugar
distinto y con una orientacin inicial distinta. Para ello utilizaremos una
variable k que ir contando. Cada vez que dibuje uno de esos

10/12/2015 18:45

25 de 50

pentgonos, cambiaremos el valor de dicho contador en una cantidad fija.


para filigrana
haz "k 1.5
;inicia un contador
repite 200[
bl
repite 5 [av 50 gd 72]
;dibuja un pentgono
sl gi :k*3 av :k+12
;cambia la posicin de la tortuga
haz "k :k+1]
;incrementa el contador
fin
57. En este otro ejercicio, llamado espiral, utilizaremos un contador
llamado r que iremos incrementando geomtricamente, multiplicndolo
por una cantidad fija. De este modo dibujaremos una espiral, mediante
arcos de circunferencia que van aumentando su radio progresivamente.
para arco :r
;dibuja un arco de circunferencia
haz "step :r*tan 1
;calcula el lado de un polgono de 360 lados
repite 90 [
av :step gd 1]
;dibuja un lado
fin
para espiral
;para dibujar una espiral
bp ot
;limpia la pantalla
haz "r 2
;empezamos fijando un arco pequeo
repite 22 [
;para dar varias vueltas completas
arco :r
;dibuja un arco
haz "r :r*1.28]
;aumenta el radio 1,28 veces
fin

Manejo del tiempo


Primitiva espera
Podemos conseguir que el procesador haga una pausa, con la primitiva
espera, antes de ejecutar la siguiente instruccin. La primitiva espera
detiene la ejecucin del programa durante un lapso de tiempo que se
especificar en 1/60 de segundo. As, por ejemplo:
espera 120
;detiene el programa durante 2 segundos
58. Por ejemplo, escribe un procedimiento llamado num :bajo :alto, que
muestre una vez cada segundo un nmero elegido al azar, entre dos cifras
lmite.
para num :bajo :alto
bt
haz "lapso :alto-:bajo
haz "num1 azar :lapso+1
escribe :bajo+:num1
espera 60
num :bajo :alto
fin
Puedes detener la ejecucin del procedimiento tecleando Alto en la
botonera del rea de comandos.
Primitiva horamili
La primitiva horamili lee en los registros de Windows y averigua cunto

10/12/2015 18:45

26 de 50

tiempo ha estado encendido el ordenador y lo expresar en milisegundos.


59. Una aplicacin prctica de la primitiva horamili es la medida del
tiempo que tarda en ejecutarse un programa. El procedimiento siguiente
cronometrar cunto tarda en ejecutarse un dibujo compuesto por 60
elipses:
para crono
bp ot
haz "start horamili
repite 60 [elipse 50 220 gd 6]
haz "tiempo horamili-:start
escribe (lista :tiempo "milisegundos)
fin
Cunto tiempo tardar en dibujar 120 elipses, el doble? Haz la prueba.
Cunto tiempo tardar en dibujar elipses ms grandes o ms pequeas?
Comprubalo.
Primitiva hora
Esta primitiva lee en los registros de Windows y devuelve la hora actual
del sistema, como una lista de palabras. Por ejemplo:
escribe hora
;escribe en la ventana de textos algo as: Wed May 10
13:31:16 2006
;el formato es anglosajn: Semana Mes Dia Hora Ao
60. Ahora te toca a ti: escribe un procedimiento llamado clock que rotule
en la pantalla grfica, centrado y con un tamao grande, qu hora es:
Figura Reloj digital

Control de la ejecucin con el teclado


Imagina que quieres que un programa se est ejecutando
indefinidamente, hasta que el usuario pulse una tecla del teclado. Un
modo de conseguirlo sera con un procedimiento de control, que activase
la parada del siguiente modo:
para control
ponfoco [pantalla de mswlogo]
ponteclado [parada]
instrucciones del programa
fin
La primitiva ponfoco permite a Logo tomar el control de la ventana que
tiene el foco.
La primitiva ponteclado permite capturar eventos ocurridos en el teclado.
61. Por ejemplo, con el siguiente procedimiento, llamado lunares, se
desarrollar un programa que dibujar crculos de color aleatorio, en una
posicin aleatoria de la pantalla, hasta que el operador lo detenga
pulsando en cualquier tecla del teclado:
para lunares
bp ot poncp 0
;prepara la pantalla
ponfoco [pantalla de mswlogo] ;pone el foco en la pantalla
ponteclado [parada]
;un evento en el teclado detiene el

10/12/2015 18:45

27 de 50

programa
discos
fin

;llama al procedimiento discos

para discos
repite siempre [
haz "x -500 + azar 900
;elige coordenadas al azar
haz "y -350 + azar 700
sl ponpos (lista :x :y) bl
;sita la tortuga en las coordenadas
haz "radio 10+azar 30
;elige el radio al azar
haz "color azar 16
;elige un color al azar
poncl :color poccr :color
circulo :radio rellena
;dibuja un crculo y lo rellena
espera 3]
;una pequea pausa
fin
Debes comprobar que la ejecucin del programa se detiene pulsando en
cualquier tecla del teclado.
62. Ahora te toca a ti: escribe un procedimiento llamado semana capaz
de rotular en pantalla, uno tras otro, los das de la semana (lunes, martes,
mircoles, etc.) en un bucle que no se detiene hasta que el usuario pulse
una tecla en el teclado:
Figura semana
Cdigo ASCII
El cdigo ASCII establece la equivalencia entre cada uno de los smbolos
de texto que pueden introducirse en el teclado, y un valor numrico
binario de 8 bits (1 byte).
A la letra "A", por ejemplo, le corresponde el nmero 65 en binario
determinado, a la "z" le corresponde el nmero 122, y as sucesivamente.
Tambin estn incluidos los smbolos grficos y los comandos no
imprimibles, como el espacio o el retorno de carro.
Primitivas ascii y caracter.
63. Haz un procedimiento llamado tabasci, que genere una tabla entre
el 0 y el 255 en la que aparezca el valor decimal y su correspondiente
cdigo ASCII. Se mostrar en la ventana de trabajo.
para tabasci
bt
; Borra la pantalla de trabajo
haz "x 0
; Crea un contador y lo pone a 0
repite 256 [escribe (lista :x caracter :x) ; Escribe un nmero y el carcter
haz "x :x+1]
; equivalente en ascii
fin
64. Te sientes capaz de escribir un procedimiento, llamado tabasci2
que, en lugar de escribir los caracteres ASCII en una sola columna en el
cuadro de texto, los presente rotulados en la pantalla grfica en forma de
tabla? Intntalo
a)
65. Escribe ahora un procedimiento que nos pida una letra y devuelva
su cdigo ASCII en la pantalla.
para traduce

10/12/2015 18:45

28 de 50

bt
; borra la ventana de textos
escribe [INTRODUCE UNA LETRA EN LA VENTANA]
haz "valor leepalabra
bt
escribe (lista "LETRA: :valor)
escribe (lista "Su "valor "ASCII "es: ascii :valor)
fin
Ejecucin secuencial y ejecucin condicionada.
En algunos casos, para escribir el cdigo de un programa, basta con
escribir una serie ordenada de primitivas, que se ejecutarn una detrs de
otra (ejecucin secuencial).
Pero es frecuente tambin que en un programa haya que ejecutar unas
primitivas u otras en funcin de alguna condicin. De esta forma la
ejecucin del programa se ramificar por unas primitivas u otras, segn
se vayan dando determinadas condiciones (su ejecucin est
condicionada).
Primitivas si y sisino
La primitiva si permite ordenar al programa que ejecute una accin, en
funcin de que una condicin se cumpla o no. La sintaxis de la primitiva si
es la siguiente:
si condicin accion
Si la condicin es verdadera ejecuta la accin. Si la condicin es falsa no
hace nada y pasa a la instruccin siguiente. Por ejemplo:
si 1>0 escribe cierto har que el programa escriba la palabra cierto
66. Por ejemplo: escribe un procedimiento llamado numpos que nos
pida un nmero. Si el nmero que introducimos es positivo se mostrar
su raz cuadrada. Si es negativo no debe calcularlo, ya que dara un error.
para numpos
bt
escribe [INTRODUCE UN NMERO EN LA VENTANA]
haz "valor leepalabra
bt
escribe (lista "El "nmero "es: :valor)
si :valor>0 [escribe (lista "Su "raiz "cuadrada "es: rc :valor)]
fin
La primitiva si tambin permite ordenar al programa que ejecute una
accin u otra, en funcin de que una condicin se cumpla o no. En este
caso, la sintaxis de la primitiva si es la siguiente:
si condicin [accion1] [accion2]
Si la condicin es verdadera ejecutar la accin1. Si la condicin es falsa
ejecutar la accin 2.
67. Por ejemplo: escribe un procedimiento, llamado posneg, que nos
pida un nmero. Si el nmero que introducimos es positivo se mostrar
su raz cuadrada. Si es negativo se escribir un mensaje que diga "NO SE
PUEDE CALCULAR LA RAIZ DE UN NEGATIVO".
para posneg
bt
escribe [INTRODUCE UN NMERO EN LA VENTANA]
haz "valor leepalabra

10/12/2015 18:45

29 de 50

bt
escribe (lista "El "nmero "es: :valor)
si :valor>0 [escribe (lista "Su "raiz "cuadrada "es: rc :valor)] [escribe (lista
"No "tiene "raiz, "es "un "nmero "negativo)]
fin
La sintaxis de la primitiva si exige que las dos acciones estn en la misma
lnea de cdigo. Hay una primitiva que se comporta de un modo
semejante: se llama sisino. Su sintaxis es similar:
sisino condicin [accion1] [accion2]
68. Escribe un procedimiento, llamado santiago, que formule una
pregunta y que informe si la respuesta es correcta o no lo es. No olvides
escribir todas las acciones en la misma lnea:
para santiago
bt bp sl ot gd 90 poncp 14
ponpos [-50 100]
rotula [De qu color es el caballo blanco de Santiago?]
haz "respuesta leepalabra
limpia ponpos [-50 100]
sisino :respuesta="blanco [rotula (lista "!Muy "bien!! "Acertaste! " "Es
"blanco)] [rotula (lista "Cunto "lo "siento!! "Fallaste. " "No "es :respuesta)]
fin
69. Ahora, y para terminar con las prcticas de ejecucin condicionada,
escribe un procedimiento llamado elegir que te ofrezca la posibilidad de
elegir entre cuatro tareas distintas. Por ejemplo, que te pregunte qu tipo
de figura quieres que dibuje:
b) Un cuadrado rojo
c) Un crculo azul
d) Un tringulo amarillo
e) Un pentgono blanco
Si respondes a dibujar un cuadrado rojo; si tecleas b deber dibujar un
crculo azul, y as sucesivamente. Si tecleas cualquier otra tecla por error
te lo debe advertir y negarse a hacer ninguna de las cuatro tareas
previstas. Procura que las figuras sean de tamao semejante, rellenas de
color y sobre un fondo del mismo color.
Concepto de bucle en un programa
Un bucle es una subrutina de un programa, que se ejecuta repetidamente
un nmero determinado de veces o hasta que se cumple una condicin
fijada de antemano.
Primitivas mientras y hasta
Hay dos primitivas, llamadas mientras y hasta, que permiten la ejecucin
repetida de un bucle del programa mientras una expresin sea cierta o
hasta que una expresin sea cierta. Su sintaxis es como sigue:
mientras [expresin] [lista de instrucciones a ejecutar]
hasta [expresin] [lista de instrucciones a ejecutar]
La primitiva hasta ejecutar repetidamente la lista de instrucciones
establecida tantas veces como haga falta, hasta que la expresin tenga el

10/12/2015 18:45

30 de 50

valor cierto. En cambio, la primitiva mientras ejecutar repetidamente la


lista de instrucciones establecida tantas veces como haga falta, hasta que
la expresin tenga el valor falso.
Lo primero que hacen ambas primitivas es evaluar si la expresin da como
resultado cierto o falso, por lo que las instrucciones de la lista podran no
ejecutarse nunca si la primera evaluacin de la expresin arrojase como
resultado falso (en la primitiva mientras) o cierto (en la primitiva hasta).
70. Por ejemplo, haz un procedimiento, llamado tablamul, que genere
un nmero aleatorio entre el 0 y el 30. Una vez elegido ese nmero, el
programa debe presentarlo en la pantalla y, adems, presentar en la
ventana de texto la tabla de multiplicar por 7, desde el 0 hasta el nmero
generado al azar.
para tablamul
bp bt gd 90 sl ot
haz "num azar 30
;elige un nmero al azar menor que 30
rotula (lista "Nmero "elegido: :num)
escribe (lista "TABLA "DEL "SIETE "DE "0 "A :num)
escribe [ ]
;lnea en blanco
haz "contador 0
;inicializa un contador
mientras [:contador<:num+1] [escribe (lista :contador "x "7 "= :contador *
7)
haz "contador :contador + 1]
fin
71. Para redundar en la ejecucin de tareas hasta que se cumpla una
condicin, vamos a hacer un procedimiento, llamado tablatrigo, que
calcule los valores del seno y el coseno de un ngulo, desde 0 a 120
grados, y los presente en la pantalla en forma de tabla ordenada.
para tablatrigo
bp gd 90 sl ot
poncp [245 196 127]
haz "angulo 0
haz "x -400
haz "y 300
hasta [:angulo>120] [
ponpos (lista :x :y) rotula (lista "ngulo: :angulo)
ponpos (lista :x+150 :y) rotula (lista "Seno: sen :angulo)
ponpos (lista :x+450 :y) rotula (lista "Coseno: cos :angulo)
haz "angulo :angulo+5 haz "y :y-20]
fin
Es posible que tengas que retocar las coordenadas iniciales x e y para
que la tabla quede correctamente centrada en tu pantalla.
Primitiva haz.mientras
La primitiva haz.mientras ejecutar repetidamente un conjunto de
instrucciones y lo har tantas veces como una condicin lgica
permanezca con valor CIERTO. Primero ejecuta las instrucciones y luego
evala la condicin, por lo que las instrucciones se ejecutarn al menos
una vez. La sintaxis de esta primitiva es como sigue:
haz.mientras [conjunto de instrucciones] [condicin a evaluar]

10/12/2015 18:45

31 de 50

72. Por ejemplo, el siguiente procedimiento, llamado crece, dibujar


polgonos con ms lados cada vez, y seguir dibujando mientras el nmero
de lados sea inferior a un valor que hemos fijado en 14, pero que t
puedes variar a tu gusto:
para poli :lados
bp
poncl :lados
;cada polgono ser de un color
repite :lados [
av 800/:lados gd 360/:lados]
;dibuja un polgono
fin
para crece
ot
haz "lados 2
;inicia el contador ponindolo a 2
pongrosor [3 3]
;elige un grosor bien visible
poncp [20 40 90]
;papel azul oscuro
haz.mientras [
haz "lados :lados + 1
;incrementa el contador
poli :lados
;dibuja un polgono
escribe :lados
;escribe el nmero de lados
espera 30] [:lados<14]
;espera un poco y evala la condicin
gd 90 sl ponpos [110 50]
;se sita en el centro del ltimo polgono
rotula "FIN
;anuncia que ha terminado
bl pongrosor [0 0]
;recompone valores para no afectar a otros
fin
73. Otro ejemplo de haz.mientras: escribe un procedimiento, llamado
multipi, que genere la lista de mltiplos de (3,141592), comprendidos
entre el 0 y el 150, con una precisin de tres decimales. La serie de
nmeros debe aparecer en la ventana de texto con una cadencia de 0,5
segundos entre cada nmero presentado.
para multipi
bt
escribe [MLTIPLOS DE PI 0<n<150]
escribe [ ]
haz "num 0
haz.mientras [escribe formatonumero :num 7 3 haz "num :num +
3.141592654 espera 30] [:num<150]
fin

Primitiva haz.hasta
Esta primitiva es semejante a la anterior. Ejecutar repetidamente un
conjunto de instrucciones y lo har tantas veces como la condicin lgica
especificada permanezca con valor FALSO. Primero ejecutar las
instrucciones y luego evaluar si sigue sin cumplirse la condicin, por lo
que las instrucciones se ejecutarn al menos una vez. La sintaxis de esta
primitiva es como sigue:
haz.hasta [conjunto de instrucciones] [condicin a evaluar]
74. Para poner un ejemplo, veamos el siguiente procedimiento
cuenta30, que cuenta de cero a treinta, utilizando la primitiva haz.hasta:
para cuenta30

10/12/2015 18:45

32 de 50

bp sl gd 90 ot
;inicia la tortuga
poncp [40 10 90] poncl [220 200 80] ;elige los colores
pontamaotipo [[Times New Roman] ;tipo de letra Times
400 200
;tamao de letra muy grande
0 400 0 0 0 0 3 2 1 18]
;otros datos del tipo de letra
ponpos [-100 200]
;esquina superior del primer nmero
haz "k 0
;inicia el contador k
haz.hasta [
sisino :k<10 [ponpos [-115 200]] [ponpos [-230 200]]
rotula :k
;rotula el valor del contador
espera 40
;espera algo ms de medio segundo
haz "k :k+1
;incrementa el contador
bp gd 90] [:k>30]
;limpia la pantalla
ponpos [-400 200]
;posicin idnea para el cartel de FIN
rotula "FIN
fin
Primitiva formatonumero
Cuando hay que fijar el tamao y la forma de presentacin de una cifra
numrica, recurriremos a la primitiva formatonumero. Esta primitiva
entrega una palabra con una representacin del nmero que se quiere
presentar, con un tamao mnimo de caracteres y un nmero de dgitos
de precisin despus del punto decimal. La sintaxis es como sigue:
formatonmero nmero tamao precisin
nmero es la cifra que hay que presentar
tamao indica el nmero mnimo de caracteres que tendr la palabra,
incluyendo los dgitos de precisin especificados. Si fuese necesario,
aadir espacios en blanco delante de la cifra para alcanzar el tamao de
palabra indicado.
precisin indica el nmero de cifras decimales despus del punto
75. Para poner un ejemplo, hagamos un procedimiento llamado
formato203 que genere una lista de nmeros entre el 5,00 y el 15,00 con
dos decimales y con un incremento entre ellos de 0,03.
para formato203
bt
escribe [NMEROS DE 5 A 15]
escribe [INCREMENTO: 0.03]
escribe [ ]
haz "num1 5.00
haz.hasta [escribe formatonumero :num1 5 2 haz "num1 :num1+0.03]
[:num1 > 15]
fin

Operaciones lgicas
Primitivas lgicas o, no, y, bity, bito y bitinverso
Naturalmente, un lenguaje de programacin debe servir para manejar
funciones lgicas bsicas: Y, O, OEXCLUSIVA, etc.
La funcin lgica y evala varias expresiones. Devuelve el valor cierto si
todas las expresiones evaluadas tienen el valor cierto y devuelve el valor
falso si alguna de las expresiones es falsa. Su sintaxis es como sigue:
y expresion1 expresion2
si debe evaluar 2 expresiones

10/12/2015 18:45

33 de 50

(y expresion1 expresion2 expresion3 ...)


expresiones

si debe evaluar ms de 2

76. Por ejemplo: escribe un procedimiento llamado logica, que nos pida
dos nmeros. Si los dos nmeros son mayores de 100, nos devolver la
suma de ambos. Si es alguno de ellos es igual o menor que 100 nos
devolver un mensaje de error.
para logica
bp gd 90 sl ot ponpos [-200 0]
rotula (lista "Introduce "dos "nmeros "mayores "que "100)
haz "num1 leepalabra
haz "num2 leepalabra
bp gd 90 ponpos [-200 0]
sisino y :num1>100 :num2>100 [rotula (lista "La "suma "de :num1 "y
:num2 "es: :num1+:num2)] [rotula (lista "Error!!! "Uno "de "los "dos
"nmeros "es "menor "que "100)]
fin
La funcin lgica o evala varias expresiones. Devuelve el valor cierto si
alguna de las expresiones evaluadas tienen el valor cierto y devuelve el
valor falso si todas las expresiones son falsas. Su sintaxis es como sigue:
o expresion1 expresion2
si debe evaluar 2 expresiones
(o expresion1 expresion2 expresion3 ...)
si debe evaluar ms de 2
expresiones
77. Para comprenderlo, vamos a redactar un procedimiento llamado
logica2 que nos pida dos nmeros, uno de los cuales debe ser mayor que
500. Si uno o los dos nmeros son mayores que 500, nos devolver la
suma de ambos. Si los dos nmeros son iguales o menores que 500, nos
devolver un mensaje de error.
para logica2
bp gd 90 sl ot ponpos [-200 0]
rotula (lista "Introduce "dos "nmeros. "Uno "de "ellos "debe "ser "mayor
"que "500)
haz "num1 leepalabra
haz "num2 leepalabra
bp gd 90 ponpos [-200 0]
sisino o :num1>500 :num2>500 [rotula (lista "La "suma "de :num1 "y
:num2 "es: :num1+:num2)] [rotula (lista "Error!!! "Ambos "nmeros "son
"menores "que "500)]
fin
La primitiva bity devuelve el resultado de aplicar la funcin lgica Y sobre
dos o ms nmeros, que deben ser nmeros enteros. Su sintaxis es como
sigue:
bity numero1 numero2
Si debe hacer el clculo con 2 nmeros
(bity numero1 numero2 numero3 ...) Si debe calcularlo con ms de 2
nmeros
La primitiva bito devuelve el resultado de aplicar la funcin lgica O sobre
dos o ms nmeros enteros. Su sintaxis es similar a la de la primitiva bity

10/12/2015 18:45

34 de 50

78. Para practicarlo, escribe un procedimiento llamado funcionyo, que


nos pida dos nmeros enteros y nos devuelva el resultado de hacer la
funcin lgica Y entre ellos, y la funcin lgica O.
para funcionyo
bp gd 90 sl ot
ponpos [-50 0]
rotula (lista "Introduce "dos "nmeros "enteros.)
haz "num1 leepalabra
haz "num2 leepalabra
bp gd 90
ponpos [-50 0]
rotula (lista "Los "nmeros "introducidos "son: :num1 "y :num2)
ponpos [-50 -20]
rotula (lista "El "resultado "de "aplicar "la "funcin "Y "es: bity :num1
:num2)
ponpos [-50 -40]
rotula (lista "El "resultado "de "aplicar "la "funcin "O "es: bito :num1
:num2)
fin
Primitivas prueba, sicierto y sifalso
Estas tres primitivas estn vinculadas entre si. La primitiva prueba evala
una expresin y recuerda si el resultado ha sido cierto o falso, para que
luego puedan utilizarlo las otras dos primitivas: sicierto, que puede
abreviarse como sic y sifalso, que puede abreviarse como sif.
La sintaxis del conjunto es como sigue:
prueba expresion
sic [acciones a realizar]
sif [acciones a realizar]
79. Veamos un ejemplo, con un procedimiento, llamado sorteo50 que
genera un nmero aleatorio entre el 0 y el 100. Si el nmero generado es
menor que 50 aparecer un mensaje indicndolo. Si el nmero es igual o
mayor que 50 aparecer otro mensaje que nos lo indica.
para sorteo50
bp gd 90 sl ot
haz "num azar 100
ponpos [-50 0]
rotula (lista "El "nmero "agraciado "es: :num)
ponpos [-50 -20]
prueba :num<50
sic [rotula (lista "que "es "menor "que "50)]
sif [rotula (lista "que "es "mayor "que "50)]
fin
Paso de argumentos entre procedimientos
Se puede realizar un procedimiento que necesite algn dato previo para
poder realizar alguna operacin con l y luego nos devuelva el dato o los
datos del resultado.
Estos datos que se pasan al procedimiento, en el momento de llamarlo o
ejecutarlo o que devuelve el procedimiento al finalizar su ejecucin, se
denominan argumentos.

10/12/2015 18:45

35 de 50

Primitiva devuelve
La primitiva devuelve finaliza la ejecucin del procedimiento en el que
aparece. Este procedimiento devuelve el dato que lo acompaa al contexto
en el que fue invocado su procedimiento.
80. Por ejemplo: escribe un procedimiento llamado multiplica, que
reciba dos nmeros y devuelva el producto de ambos a otro procedimiento
que lo llame.
para prod :x :y
;Se inicia un procedimiento con dos datos de entrada
haz "z :x * :y
devuelve :z
;Al finalizar devuelve z al procedimiento que lo llam
fin
para multiplica
bt
escribe [Introduce los factores]
haz "x leepalabra
haz "y leepalabra
bt
escribe [El resultado es:]
escribe (lista :x "x :y "= prod :x :y) ;Llama a prod y le da los datos.
fin
;De prod recibe un dato y lo presenta
Primitiva local
Esta primitiva sirve para declarar una o ms variables, que slo tendrn
validez dentro del procedimiento en el que se crean. Su sintaxis es como
sigue:
local var1 var2 var3
Se crear una variable para cada una de las palabras que acompaan a la
instruccin. Las variables de alcance local en un procedimiento estarn
disponibles para cualquier procedimiento invocado por l. Las variables
creadas con local no tienen valor inicial; se les tiene que asignar un valor
antes de que el procedimiento intente utilizarlas.
81. Haz un procedimiento llamado rectanx3, que reciba un nmero y
dibuje un rectngulo cuyo lado horizontal sea 3 veces el vertical. La altura
del lado vertical ser el nmero recibido. Las variables que utilice dicho
procedimiento sern de carcter local.
para rectanx3 :lado
bp bl pong [2 2]
local "ancho
haz "ancho :lado * 3
repite 2 [av :lado gd 90 av :ancho gd 90]
ot
fin
Programacin orientada a objetos
La tcnica de programacin orientada a objetos consiste, a diferencia de la
programacin estructurada mediante procedimientos, en organizar la
interaccin con el usuario a travs de objetos que aparecen en pantalla.
Son objetos caractersticos las ventanas, botones, casillas de seleccin, etc.
Los objetos son los elementos bsicos de la interfaz grfica de usuario GUI

10/12/2015 18:45

36 de 50

Primitivas ventana y estatico


Una ventana es un rea de trabajo, tpica del interface grfico de usuario,
dotada de una barra de ttulo, sobre la que aparecern otros objetos para
facilitar la interaccin del usuario. Una ventana puede arrastrase por la
pantalla, maximizar, minimizar, borrar, etc.
82. Crea tu primera ventana tecleando la siguiente orden:
creaventana " "primera [Mi primera ventana] 90 50 120 80 [ ]
Observa que la ventana tiene un nombre (en este caso la hemos llamado
primera), su barra de ttulo mostrar el texto que pongamos entre
corchetes (en este caso pondr Mi primera ventana), su posicin respecto
a la esquina superior izquierda (en este caso x=90 y=50) y su tamao (en
este ejemplo 120 * 80). La ventana ha sido creada en la ventana principal
de la pantalla ()
83. Puedes desactivar la ventana con la orden:
habilitarventana primera falso
una vez deshabilitada, la ventana est inactiva y no puedes operar con
ella ni arrastrarla a otro lugar de tu pantalla.
84. Para activarla de nuevo, bastar con teclear la orden siguiente:
habilitarventana primera verdadero
comprueba que ahora s puedes operar con la ventana y arrastrarla por la
pantalla
85. Ahora borra la ventana, utilizando la orden siguiente:
borraventana primera
Para saber ms sobre la sintaxis de las ventanas consulta el men de
ayuda de MSWLogo.
86. Puedes crear textos estticos, en el interior de una ventana, que se
mueven con ella. Por ejemplo, si est creada y activa la ventana primera
y tecleas
creaestatico primera texto1 PAN 50 25 15 9
vers aparecer un texto en la ventana primera, llamado texto1, que
contiene la palabra PAN, est situado en las coordenadas 50 25 desde la
esquina superior izquierda de la ventana y tiene un tamao de 15 x 9.
Vamos a introducir un nuevo texto esttico con la orden:
creaestatico primera texto2 [SARDINAS ASADAS] 30 30 15 9
observars que las nuevas coordenadas 30 30 son adecuadas para el
comienzo del letrero, pero las dimensiones del texto son insuficientes y
debers aumentarlas, por lo menos, hasta 65x9:
creaestatico primera texto2 [SARDINAS ASADAS] 30 30 65 9
87. Para borrar los textos estticos debes emplear las rdenes:
borraestatico texto1
borraestatico texto2
88. Para practicar la creacin de ventanas y la introduccin de textos
estticos, escribe un procedimiento llamado resultado, que reciba dos
nmeros y devuelva el producto de ambos en una nueva ventana.
para resultado
bp gd 90 ot sl
ponpos [-100 100]

10/12/2015 18:45

37 de 50

rotula [Introduce dos nmeros]


haz "num1 leepalabra
haz "num2 leepalabra
haz "resul :num1 * :num2
bp
creaventana "root "calculo [ Resultado del producto: ] 200 150 100 40 []
creaestatico "calculo "resul1 :num1 5 5 20 10
creaestatico "calculo "resul2 [x] 25 5 10 10
creaestatico "calculo "resul3 :num2 35 5 20 10
creaestatico "calculo "resul4 [=] 55 5 10 10
creaestatico "calculo "resul5 :resul 65 5 20 10
fin
Si te fijas, la posicin de cada uno de los textos estticos est calculada
para nmeros de tamao medio. Pero, tanto si se introducen nmeros
muy pequeos, como si los nmeros son muy grandes, las coordenadas
fijas de los textos producen una presentacin pobre y desajustada.
La presentacin mejora al reemplazar las cinco primitivas creaesttico por
una sola lnea de cdigo que llama a una lista:
para resultado
bp gd 90 ot sl
ponpos [-100 100]
rotula [Introduce dos nmeros]
haz "num1 leepalabra
haz "num2 leepalabra
haz "resul :num1 * :num2
bp
creaventana "root "calculo [Resultado del producto:] 200 150 100 40 [ ]
creaestatico "calculo "resul1 (lista :num1 "x :num2 "= :resul) 5 10 90 10
fin
Haz una prueba: deshabilita la ventana calculo y vers que no puedes
manejarla con el ratn. Si la habilitas de nuevo podrs activarla y
arrastrarla por la pantalla.
Para despejar la pantalla, debes teclear la orden:
borraventana calculo

Primitiva boton
Un botn es un elemento que permite manipular un programa mediante
el ratn, que puede hacer clic en l o, simplemente, pasar sobre l.
89. Escribe un procedimiento que cree una ventana, llamada segunda,
en la que haya un botn para cerrarla.
Para segunda
creaventana segunda [Pulsa Aceptar para cerrar] 200 50 90 40 [ ]
creaboton segunda boton1 [Aceptar] 30 5 30 20 [sesamo]
fin
La longitud de la ventana (fjate que en nuestro ejemplo la longitud de la
ventana es 90) ha de ser suficiente para que quepa el texto (en nuestro
caso Pulsa Aceptar para cerrar). La altura de la ventana ha de bastar para
que quepa el botn, que tiene 30 x 20. Las coordenadas de la posicin del

10/12/2015 18:45

38 de 50

botn pretenden que quede centrado en la ventana. Y ahora, crea el


procedimiento sesamo, que se encargar de cerrar la ventana:
para sesamo
borraventana "segunda
fin
90. Haz un procedimiento, con el nombre ven3boton, que dibuje en
pantalla una ventana con tres botones. Al pulsar el primero aparecer un
mensaje en la misma ventana que diga pulsado. Al pulsar el segundo se
dibuja un donut en la ventana grfica, utilizando nuestro viejo
procedimiento del mismo nombre y el texto del botn cambia a DONUT. Al
pulsar el tercero se cierra la ventana con todo su contenido.
para ven3boton
creaventana " "nueva [Ventana con tres botones] 170 50 190 70 [ ]
creaboton "nueva "primero [Pulsar] 15 30 40 20 [boton1]
creaboton "nueva "segundo [Arrancar] 67 30 50 20 [boton2]
creaboton "nueva "tercero [Cerrar] 130 30 40 20 [borraventana "nueva
poncp 7]
fin
para boton1
creaestatico "nueva "boton1 [PULSADO] 17 10 35 15
fin
para boton2
actualizaboton "segundo [DONUT]
donut 50
ocultatortuga
fin
El primer botn hace que aparezca un nuevo texto esttico. El segundo
botn pone en marcha un procedimiento y, adems, cambia el texto del
botn y, finalmente, fjate qu ahorro!, en la creacin del tercer botn se
incluye ya el cdigo de lo que debe hacer al ser pulsado: borrar la ventana
y dejar la pantalla en blanco. No es necesario un procedimiento adicional.

Primitiva barradesplazamiento
Una barra de desplazamiento es un objeto que tiene un cursor que puede
desplazarse mediante el ratn, para dar diversos valores a una variable.
91. Escribe un procedimiento que cree una ventana, llamada tercera, en
la que haya un botn para cerrarla y una barra de desplazamiento.
Para tercera
creaventana " "tercera [Mi primera barra deslizante] 200 50 140 60 [ ]
creabarradesplazamiento "tercera "barra 30 10 80 10 [ ]
ponbarradesplazamiento "barra 0 100 50
creaboton "tercera "close [Cerrar] 55 25 30 20 [borraventana "tercera]
fin
Observa que la longitud de la ventana (en este caso 140) ha de ser
suficiente para que quepa el ttulo (Mi primera barra deslizante) y la barra
(que en nuestro caso mide 80 de largo). La altura de la ventana ha de

10/12/2015 18:45

39 de 50

bastar para que quepan tanto la barra (nuestra barra mide 80 x 10) como
el botn (que mide 30 x 20). Las coordenadas de la posicin del botn y de
la barra pretenden que queden centrados en la ventana. Comprueba que
puedes mover el cursor con el ratn y que puedes cerrar la ventana.
Fjate en la primitiva ponbarradesplazamiento. En su sintaxis se incluye:
el nombre de la barra, el valor inicial, el valor final y el punto de su
recorrido en el que se presenta.
92. Aplica lo que has aprendido, escribiendo un procedimiento llamado
venbar, que dibuje en pantalla una barra de desplazamiento dentro de
una ventana. La barra tendr un rango de valores entre 50 y 250. Cada
vez que se mueva se debe visualizar en la ventana el valor de su posicin y
su raz cuadrada. Tendremos, adems, un botn que sirva para cerrar la
ventana.
para venbar
creaventana " "ultima [Calculadora automtica de raices] 150 70 180 70 [ ]
creaestatico "ultima "estat [150] 140 10 20 15
creaestatico "ultima "estat1 [Su raiz cuadrada es:] 15 30 70 10
creaestatico "ultima "estat2 raizcuadrada 150 35 40 30 10
creabarradesplazamiento "ultima "barra 15 10 110 10 [leebarra]
ponbarradesplazamiento "barra 50 250 150
creaboton "ultima "primero [Cerrar] 125 30 40 20 [borraventana "ultima]
fin
La barra de desplazamiento adoptar el valor inicial de 150 (en el centro
de su recorrido). Por lo tanto, el esttico estat2 deber tener como valor
inicial la raz cuadrada de 150 (sealado en amarillo). Cuando el cursor de
la barra se mueva se ejecutar el procedimiento llamado leebarra que
habr que escribir:
para leebarra
haz "x leebarradesplazamiento "barra
haz "y raizcuadrada :x
actualizaestatico "estat :x
actualizaestatico "estat2 :y
fin

Primitiva dialogo
Una ventana de dialogo se utiliza como marco de trabajo en el que se
pueden aadir otros objetos o controles como botones, barras de
desplazamiento, listboxes, etc. Este objeto es similar a una ventana,
excepto que no devolver el control al procedimiento llamante hasta que la
ventana de dilogo se cierre.
93. Vamos a crear una ventana de dilogo que pida al usuario que
acepte pulsando un botn. Pero, en primer lugar, vamos a crear el
procedimiento que cerrar la ventana al pulsar el botn:
para vendialo
creaboton "dialogo1 "botvale "ACEPTAR 25 10 40 20 [borradialogo
"dialogo1]
fin
Ahora que est preparado teclea, en la ventana de trabajo, la orden
siguiente:

10/12/2015 18:45

40 de 50

creadialogo " "dialogo1 [El sistema debe reiniciarse] 120 60 90 50


[vendialo]
Naturalmente, una vez pulsado el botn pueden ponerse en marcha
procedimientos ms ambiciosos que el simple cierre de la ventana de
dilogo.
94. Por ejemplo, escribe un procedimiento que pregunte al usuario,
mediante una ventana de dilogo, cuntos das faltan para su
cumpleaos:
para faltan
creaestatico "cumple "fecha [180] 155 10 20 15
creabarradesplazamiento "cumple "deslizadias 15 10 130 10 [haz "dias
leebarradesplazamiento "deslizadias actualizaestatico "fecha :dias]
ponbarradesplazamiento "deslizadias 0 365 180
creaboton "cumple "ok [Aceptar] 70 30 40 20 [borradialogo "cumple]
fin
y teclea a continuacin:
creadialogo " "cumple [Cuntos dias faltan para tu cumpleaos?] 120 60
180 70 [faltan]
Como puedes ver aparece una ventana de dilogo (con el nombre cumple),
con una pregunta en el ttulo y, en la misma ventana de dilogo, una
barra de desplazamiento (llamada deslizadias), un texto esttico (con el
nombre fecha) que indica la lectura de la barra de desplazamiento y un
botn (llamado ok) que pone Aceptar.
Al mover la barra de desplazamiento, el texto esttico reflejar la posicin
de la barra (entre 0 y 365). Al pulsar el botn Aceptar, se borrar la
ventana de dilogo.
95. Para practicar introduce alguna novedad de tu propia cosecha. Por
ejemplo, haz que rotule al cerrar el dilogo, sobre una pantalla roja y con
letras grandes, cuntos das faltan para el cumpleaos. Puedes crear para
ello un pequeo procedimiento, llamado happytext, que ser invocado por
el botn ok desde su lnea de creacin:
creaboton "cumple "ok [Aceptar] 70 30 40 20 [happytext]

Primitivas groupbox y botonradio


Un botn radio es un objeto que permite seleccionar una opcin con dos
estados: verdadero (botn seleccionado) o falso (botn no seleccionado).
Todos los botones radio, que se corresponden con cada una de las
opciones que se presentan al usuario, deben estar asociados en un grupo
o groupbox.
96. Para practicar, escribiremos el cdigo de una ventana llamada
cuarta, en la que el usuario deber elegir su rango de edad seleccionando
uno de los botones radio que se presentan reunidos en un groupbox.
para edad
creaventana " "cuarta [Seleccione su grupo de edad] 200 50 115 65 [ ]
creagroupbox "cuarta "marco 5 5 65 40

10/12/2015 18:45

41 de 50

creabotonradio "cuarta "marco "bot1 [<15 aos] 10 13 40 9


creabotonradio "cuarta "marco "bot2 [15 a 18 aos] 10 23 55 9
creabotonradio "cuarta "marco "bot3 [>18 aos] 10 33 40 9
escribebotonradio "bot1 "verdadero
creaboton "cuarta "cierre [Aceptar] 75 18 30 20 [borraventana "cuarta]
fin
Fjate bien, todas las coordenadas estn referidas a un origen comn,
situado en la esquina superior izquierda de la ventana. La creacin de
cada objeto incluye una ruta compuesta por la ventana padre, el objeto
padre y su propio nombre.
Slo puede estar seleccionado uno de los botones radio de un groupbox.
Cuando el usuario selecciona una de las opciones lo pone en estado
verdadero y, automticamente, el resto de las opciones se ponen en
estado falso. Adems, al iniciar el groupbox, una de las opciones debe
declararse en estado verdadero.
97. Haz una calculadora, llamada calcacme, que pida dos nmeros y
dibuje en una ventana un grupo con cuatro botones radio. Cada botn
tendr asignada una operacin matemtica. Cuando pulsemos un botn
aparecer el resultado de aplicar la operacin matemtica seleccionada a
los dos nmeros introducidos. Tendr, adems, otro botn que permita
cerrar la ventana:
para calcacme
bp sl gd 90 ot
ponpos [-480 150] bl
pontamaotipo [[Arial] 40 18 0 400 0 0 0 0 3 2 1 18]
rotula (lista "Introduce "dos "nmeros "en "la "ventana "superior)
haz "num1 leepalabra
haz "num2 leepalabra
bp
creaventana " "ultima [Calculadora aritmtica marca "ACME"] 150 70 180
100 [ ]
creagroupbox "ultima "grupo 10 10 160 50
creabotonradio "ultima "grupo "boton1 [ +] 15 15 25 10
creabotonradio "ultima "grupo "boton2 [ -] 15 25 25 10
creabotonradio "ultima "grupo "boton3 [x] 15 35 25 10
creabotonradio "ultima "grupo "boton4 [/] 15 45 25 10
escribebotonradio "boton1 "verdadero
creaboton "ultima "calcular [CALCULAR] 20 67 45 15 [calculo]
creaboton "ultima "cerrar [ACABAR] 115 67 45 15 [borraventana "ultima]
creaestatico "ultima "estat [NUMEROS: ] 50 25 45 15
creaestatico "ultima "estat1 :num1 110 25 20 15
creaestatico "ultima "estat2 :num2 140 25 20 15
creaestatico "ultima "estat3 [RESULTADO:] 50 40 50 15
creaestatico "ultima "estat4 [ ] 110 40 30 15
fin
para calculo
haz "x leebotonradio "boton1
si :x= "verdadero [haz "num3 :num1 +:num2]
haz "x leebotonradio "boton2
si :x= "verdadero [haz "num3 :num1-:num2]

10/12/2015 18:45

42 de 50

haz "x leebotonradio "boton3


si :x= "verdadero [haz "num3 :num1 *:num2]
haz "x leebotonradio "boton4
si :x= "verdadero [haz "num3 :num1/:num2]
actualizaestatico "estat4 :num3
fin

Primitiva checkbox
Un objeto checkbox es una casilla que el usuario puede seleccionar. Todas
las casillas checkbox deben estar reunidas en un groupbox. El usuario
puede seleccionar varias casillas simultneamente.
98. Haz un procedimiento, llamado vencom, que dibuje en una ventana
un grupo con tres botones de tipo checkbox. Cada uno tendr como
etiqueta un nmero. Cuando pulsemos un botn aparecer un mensaje
indicando el estado de cada uno de ellos. Tendr, adems, otro botn que
permita cerrar la ventana.
para vencom
creaventana " "ultima [Ventana con casillas de comprobacin] 150 70 180
90 [ ]
creagroupbox "ultima "grupo 10 5 160 50
creacheckbox "ultima "grupo "boton1 [Primero] 15 15 45 10
creacheckbox "ultima "grupo "boton2 [Segundo] 15 25 45 10
creacheckbox "ultima "grupo "boton3 [Tercero] 15 35 45 10
creaboton "ultima "comprobar [COMPROBAR] 15 60 60 15 [comprueba]
creaboton "ultima "cerrar [CERRAR] 120 60 40 15 [borraventana "ultima]
creaestatico "ultima "estat1 [Desactivado] 100 15 60 10
creaestatico "ultima "estat2 [Desactivado] 100 25 60 10
creaestatico "ultima "estat3 [Desactivado] 100 35 60 10
fin
para comprueba
haz "x estadocheckbox "boton1
sisino :x= "verdadero [actualizaestatico "estat1 [Activado]] [actualizaestatico
"estat1 [Desactivado]]
haz "x estadocheckbox "boton2
sisino :x= "verdadero [actualizaestatico "estat2 [Activado]] [actualizaestatico
"estat2 [Desactivado]]
haz "x estadocheckbox "boton3
sisino :x= "verdadero [actualizaestatico "estat3 [Activado]] [actualizaestatico
"estat3 [Desactivado]]
fin

Primitiva listbox
Un objeto listbox es una caja de texto, que contiene una lista de opciones
entre las que el usuario puede elegir una.
99. Haz un procedimiento llamado venmenu que dibuje en una ventana
un men de opciones mediante listbox. Dicho men tendr 5 opciones:
CIRCULO, CUADRADO, TRINGULO, PENTGONO y HEXGONO.
Despus de elegir una de las opciones de la lista, al pulsar el botn

10/12/2015 18:45

43 de 50

DIBUJAR, se dibujar la figura seleccionada en el men. Con el botn


BORRAR podremos limpiar la pantalla grfica. Tendr, adems, otro botn
que permita cerrar la ventana.
para venmenu
creaventana " "ultima [Trazado de polgonos] 300 250 180 90 [ ]
crealistbox "ultima "menu "10 10 100 30
aadecadenalistbox "menu [CIRCULO ROJO]
aadecadenalistbox "menu [CUADRADO AZUL]
aadecadenalistbox "menu [TRIANGULO VERDE]
aadecadenalistbox "menu [PENTAGONO AMARILLO]
aadecadenalistbox "menu [HEXAGONO VIOLETA]
creaboton "ultima "calcular [DIBUJAR] 120 20 40 15 [dibujar]
creaboton "ultima "cerrar [ACABAR] 120 50 40 15 [borraventana "ultima]
creaboton "ultima "borrar [BORRAR] 60 50 40 15 [bp]
fin
para dibujar
haz "x leeseleccionlistbox "menu
si :x=[CIRCULO ROJO] [arorojo]
si :x=[CUADRADO AZUL] [cuadroblue]
si :x=[TRIANGULO VERDE] [triverde]
si :x=[PENTAGONO AMARILLO] [pentaillo]
si :x=[HEXAGONO VIOLETA] [hexaviol]
fin
para arorojo
arcodeelipse 360 120 120 0 sl poccr 4 gd 10 av 10 rellena bl ot
fin
para cuadroblue
repite 4 [av 200 gd 90] sl poccr 1 gd 10 av 10 rellena bl ot
fin
para triverde
repite 3 [av 220 gd 120] sl poccr 10 gd 10 av 10 rellena bl ot
fin
para pentaillo
repite 5 [av 150 gd 72] sl poccr 6 gd 10 av 10 rellena bl ot
fin
para hexaviol
repite 6 [av 120 gd 60] sl poccr 13 gd 10 av 10 rellena bl ot
fin

Primitiva combobox
Un objeto combobox es un objeto compuesto por una lista, en la que el
usuario puede elegir una de las opciones que ofrece, y una ventana de
texto en la que el usuario puede introducir una expresin que no est en
la lista.
Para crear un combobox hay que utilizar la sintaxis siguiente:
creacombobox ventana nombre Titulo posx posy largo alto

10/12/2015 18:45

44 de 50

Una vez creado, podemos aadir el texto de las opciones que se ofrecen en
la lista:
aadelineacombobox nombre [expresion 1]
aadelineacombobox nombre [expresion 2]
...
A continuacin, designamos cul de las opciones aparecer seleccionada
por defecto al crearse el combobox
pontextocombobox nombre [expresion x]
Para averiguar cul es la opcin elegida por el usuario, utilizaremos la
expresin:
leetextocombobox nombre
100. Para mostrar un ejemplo del uso del objeto combobox, veamos el
procedimiento elige, en el que MSWLogo dibujar un polgono, con un
nmero de lados elegido por el usuario mediante una ventana combobox:
para elige
creaventana " "miventana (lista "Elige "el "nmero "de "lados) 20 20 100
120 [ ]
creacombobox "miventana "micombo 25 0 50 50
aadelineacombobox "micombo [3 lados]
aadelineacombobox "micombo [4 lados]
aadelineacombobox "micombo [5 lados]
aadelineacombobox "micombo [6 lados]
aadelineacombobox "micombo [7 lados]
aadelineacombobox "micombo [8 lados]
aadelineacombobox "micombo [9 lados]
aadelineacombobox "micombo [10 lados]
creaboton "miventana "boton1 "Dibujar 25 50 50 25 [hazdibujo]
creaboton "miventana "boton2 "Cerrar 25 77 50 25 [cerrar]
fin
para hazdibujo
bp sl av 150 bl
haz "lados primero leetextocombobox "micombo
repite :lados [gd 360/:lados av 1000/:lados]
ot
fin
para cerrar
borraventana "principal
bp
fin
101. Y, para terminar, vamos a escribir el cdigo de un programa para
una agencia de viajes, en el que el cliente puede elegir el lugar elegido
para sus vacaciones. La agencia de viajes ofrece una lista de destinos
comunes, los ms solicitados, pero tambin permite al cliente solicitar un
destino que no est en esa lista. Un objeto combobox es la opcin ideal:
para viaje
creaventana " "destino [Elija el destino de su viaje] 150 80 120 120 []
creacombobox "destino "listado 20 5 80 50

10/12/2015 18:45

45 de 50

aadelineacombobox "listado [Turquia]


aadelineacombobox "listado [Viena clsica]
aadelineacombobox "listado [Praga romntica]
aadelineacombobox "listado [Italia]
aadelineacombobox "listado [Fiordos noruegos]
aadelineacombobox "listado [Viedos de Francia]
aadelineacombobox "listado [Costas de Espaa]
aadelineacombobox "listado [Islas Canarias]
pontextocombobox "listado [Fiordos noruegos]
creaboton "destino "botacepto "Elegir 20 60 30 20 [confirmar]
creaboton "destino "botcierre "Cerrar 70 60 30 20 [borraventana "destino]
creaestatico "destino "eleccion [Su eleccin:] 20 85 80 9
creaestatico "destino "texto [Fiordos noruegos] 20 95 80 9
fin
para confirmar
haz "lugar leetextocombobox "listado
actualizaestatico "texto :lugar
fin
Haz la prueba, eligiendo lugares de la lista ofrecida por la agencia y,
tambin, eligiendo un lugar de vacaciones que no est en la lista.

Mensajes del sistema


A veces, durante la ejecucin de un programa, el sistema debe
comunicarse con el usuario para informarle de algo, preguntarle o pedirle
que tome una decisin. El modo habitual de hacerlo es utilizar una
ventana con botones y algunos otros objetos.
Logo tiene en su biblioteca de primitivas varios mensajes de sistema ya
preparados: sinobox, seleccionbox, preguntabox, etc. Vamos a practicar
con ellos:
Primitiva Mensaje
Esta primitiva detiene la ejecucin del programa y muestra una ventana
con un mensaje al usuario. El procesamiento no continuar hasta que el
usuario se d por enterado pulsando el botn ACEPTAR. la ventana de
trabajo quedar inhabilitada hasta que el usuario pulse el botn. La
sintaxis de la primitiva es:
mensaje [titular de la ventana] [texto del mensaje]
102. Por ejemplo: crea un procedimiento llamado sox que muestre en la
pantalla un aviso pidiendo que lo aceptes o lo rechaces:
para sox
mensaje [Plan para esta tarde] [Quieres ir al cine?]
fin

103. Modifica el procedimiento sox para que pregunte otra cosa distinta.
Archivo editar sox
para sox
mensaje [Plan para esta tarde] [Qu tal una siesta?]
fin

10/12/2015 18:45

46 de 50

104. Prueba a crear un mensaje de alarma con el que el sistema


informa al usuario que debe cerrar todos los programas antes de seguir:
para alarma
mensaje [ERROR DE EJECUCIN] [Debes cerrar todos los programas]
fin
Observa que la ventana se dimensiona automticamente para adaptarse a
la longitud del texto.
Primitiva Sinobox
Esta primitiva detiene la ejecucin del programa y lanza un mensaje, con
un ttulo y un texto de mensaje. El programa no continuar hasta que el
usuario pulse en uno de los botones Si o No. La ventana de trabajo
quedar estar inhabilitada hasta que se pulse un botn. La sintaxis de la
primitiva es:
sinobox [titular de la ventana] [texto del mensaje]
Una vez que el usuario pulsa un botn, la instruccin devolver
VERDADERO si el usuario ha pulsado el botn Si y devolver FALSO si ha
pulsado No.
105. Imagina, por ejemplo, que estamos haciendo un programa para
jugar al ajedrez. Al comienzo de la partida, el programa debe preguntar al
usuario con qu color desea jugar. As podr decidir si dibuja el tablero
desde un lado o desde el otro. Puede hacerlo por ejemplo con una ventana
de mensaje sinobox, de este modo:
sinobox [ELEGIR EL COLOR DE LAS FICHAS] [Quieres jugar con
blancas?]
Logo responde que no sabe qu hacer con los valores, cierto o falso, que
devuelve la primitiva. Eso sucede porque una vez que el usuario ha
contestado, la primitiva sinobox devolver el valor CIERTO o FALSO y el
programa deber hacer algo con dichos valores, dibujando el tablero con
las fichas blancas o las fichas negras en el lado del usuario, por ejemplo.
Para simplificar, hagamos que el programa rotule Usted juega con blancas
o Usted juega con negras, segn lo que elija el usuario:
para fichas
bp gd 90 sl ponpos [-150 100] bl
sisino sinobox [ELEGIR EL COLOR DE LAS FICHAS] [Va a jugar con
blancas?] [rotula [Usted juega con blancas]] [rotula [Usted juega con
negras]]
fin
recuerda que la primitiva sisino necesita que todo el cdigo est en una
nica lnea.
Primitiva Seleccionbox
Este comando detiene el procesamiento y lanza un mensaje con un ttulo y
una lista de opciones. El programa no continuar hasta que el usuario
pulse en el botn ACEPTAR o en el botn CANCELAR. La sintaxis de esta
primitiva es:
seleccionbox [titulo de la ventana] [lista de opciones]
Una vez que se pulsa ACEPTAR el comando devolver un ndice que se
corresponde con el elemento de la lista de opciones que, en ese momento,

10/12/2015 18:45

47 de 50

est seleccionado: 1 para la primera opcin, 2 para la segunda opcin,


etc. La primitiva devolver el valor 0 si el usuario pulsa el botn
CANCELAR. Luego, el programa abordar un procedimiento u otro en
funcin del ndice devuelto por la primitiva seleccionbox.
106. Imagina, por ejemplo, el programa de reservas de avin de una
agencia de viajes. En un momento de su ejecucin, el programa pide al
cliente que indique cul es el destino de su viaje para luego emprender
acciones acordes con esa decisin. Podramos hacerlo, por ejemplo, con un
mensaje de tipo seleccionbox:
seleccionbox [ELIJA UN DESTINO PARA SU VIAJE] [Pennsula Islas Europa
Caribe]
Prubalo. Vers que puedes elegir un elemento de la lista, pero Logo
responde que no sabe qu hacer con los ndices que devuelve la primitiva
107. Lo que podemos hacer con los ndices, por ejemplo, sera mostrar
al cliente el mapa de la zona elegida. Adems, mostraremos en pantalla
un mensaje para que el cliente confirme el viaje que ha elegido. Podramos
hacerlo as:
para viajar
bp sl ponpos [-175 30] gd 90 ot
poncp [30 40 120] poncl [200 200 30]
haz "x seleccionbox [ELIJA UN DESTINO PARA SU VIAJE] [Pennsula
Canarias Europa Caribe]
si :x=1 [cargadib "c:\\espaa.bmp mensaje [El viaje que usted ha elegido]
[Desea viajar por la pennsula?]]
si :x=2 [cargadib "c:\\canarias.bmp mensaje [El viaje que usted ha elegido]
[Prefiere las Islas Canarias?]]
si :x=3 [cargadib "c:\\europa.bmp mensaje [El viaje que usted ha elegido]
[Suea con un viaje por Europa?]]
si :x=4 [cargadib "c:\\caribe.bmp mensaje [El viaje que usted ha elegido]
[Su destino preferido es el caribe?]]
espera 90 limpia
ponpos [-380 50]
pontamaotipo [[Arial] 100 50 0 400]
rotula [BUEN VIAJE!!]
fin
Para que este procedimiento funcione, los archivos grficos tienen que
estar en el directorio especificado en el cdigo. Si los dejas, por ejemplo,
en C:/Archivos de programa debers decirlo as en el cdigo:
cargadib c:\\Archivos de programa\\canarias.bmp
Ejercicios libres
Bueno, ha llegado la hora de abordar la escritura de programas sin ayuda.
Te voy a proponer algunos proyectos para que t desarrolles ntegramente
un programa que cumpla los requisitos para cada proyecto. Al hacer estos
ejercicios ten en cuenta las siguientes instrucciones:
? Hazlo con todo el cuidado por los pequeos detalles del que seas
capaz.
? Utiliza repeticiones y bucles. No escribas ms lneas de cdigo que las

10/12/2015 18:45

48 de 50

necesarias.
? Aade comentarios para que se entiendan las ideas que tratas de
desarrollar.
? Prueba cada parte de tu programa por separado para asegurarte de
que funciona.
? Somete al programa a condiciones extremas y situaciones no previstas.

1. Damero
Escribe un procedimiento llamado damero capaz de presentar,
perfectamente centrado en la pantalla un tablero de damas. Ten en
cuenta que un tablero de damas est compuesto por 64 cuadrados
iguales, organizados en 8 filas de 8 cuadrados cada fila. Los cuadrados de
color claro se alternan con los cuadrados de color oscuro. Las filas impares
tienen los cuadrados claros y oscuros en orden inverso al de las filas
pares.
Figura damero
Si aceptas un desafo mayor, haz que se pueda invocar el procedimiento
damero :lado de tal forma que sea capaz de construir el tablero con los
cuadrados del tamao especificado en la variable :lado. As si tecleas
damero 20 te dibujar un damero de 20x20 y si tecleas damero 80
dibujar un tablero de 80x80. Aade adems un cerco decorativo a los
cuadrados que forman el tablero.
Figuras dos dameros
2. Escapar del corral
Este programa busca mostrar a la tortuga movindose al azar para
escapar de un recinto dibujado en la pantalla. El programa debe
componerse, por lo menos de dos procedimientos: uno que dibuja el
corral, con un pequeo pasillo para escapar, y otro que hace que la
tortuga se mueva al azar.
Figura corral
El movimiento de la tortuga debe ser errtico, girando al azar a la
izquierda y a la derecha despus de cada pequeo paso. Por ejemplo:
gd azar 30 gi azar 22
de 0 22 (izda.)

;gira un ngulo aleatorio de 0 a 30 (derecha) y

Para saber si la tortuga ha tropezado con el muro del corral es til la


primitiva pixel, que devuelve el color del pixel sobre el que se encuentra el
centro de la tortuga. Su sintaxis es as:
si pixel=color [haz esto], por ejemplo:
si pixel=0 [re 10]

;la tortuga retrocede 10 si toca un pixel negro

Cada vez que la tortuga tropieza con el muro, debera retroceder y girar
un poco antes de volver avanzar para tratar de salir del corral.
3. Reloj
Construye un programa capaz de presentar en pantalla un reloj analgico,
es decir con agujas para sealar la hora, los minutos y los segundos. El

10/12/2015 18:45

49 de 50

diseo de la esfera del reloj es libre, para que puedas darle un toque
personal: un reloj moderno o antiguo, con todas las cifras o slo con las
cuatro cifras principales, con trazos o con vietas para sealar las horas y
minutos, con colores atractivos, etc.
Figura Reloj
Para facilitar la construccin del programa es conveniente que dividas el
cdigo en varios procedimientos separados, que se llaman
consecutivamente:
? Dibujar la esfera
? Obtener los datos desde el reloj del sistema
? Calcular el ngulo que tendr cada aguja
? Dibujar las agujas
? Enlazar todos los procedimientos y hacer que suene el tic-tac
Las agujas deben dibujarse en un ngulo acorde con la hora mostrada.
Por ejemplo: a las 9:45 la aguja horaria est ms cerca de las 10 que de
las 9.
Para que el funcionamiento del reloj sea impecable y muestre la hora
correcta, debes utilizar el reloj del sistema, utilizando la primitiva hora.
Y, para aadir un efecto impactante, haz que suene un sonido cada vez
que la aguja de los segundos da un paso, a modo de tic-tac

4. Calculadora vectorial
Este ejercicio consiste en disear un programa que sea capaz de hacer
operaciones con magnitudes vectoriales. Introduciendo los valores de un
vector (su mdulo y su argumento) el programa debe ser capaz de
dibujarlo al pulsar en un botn.
Despus de dibujar dos vectores, el programa debe dibujar el vector suma
y el vector diferencia. Si el usuario introduce ms de 3 vectores, el
programa slo calcular la suma o resultante.
Figura interface calculadora
El aspecto del interface de programa con el usuario podra ser, por
ejemplo, como este:
Tenemos una barra deslizante para fijar el mdulo entre 0 y 500, con un
texto esttico que indica el valor del mdulo elegido.
Otra barra deslizante nos servir para elegir el ngulo, entre 0 y 360
grados, con un texto esttico que indica el ngulo elegido.
Hay, adems, 4 botones con funciones bien definidas:
? Dibujar. Representa en la pantalla el vector elegido con las barras
deslizantes.
? Calcular. Calcula los vectores suma y/o diferencia y los dibuja.
? Borrar. Limpia del escritorio los vectores dibujados para un nuevo
clculo, y
? Cerrar. Cierra el programa.
El aspecto del escritorio, al realizar un clculo, podra ser como se
muestra aqu:
Figura escritorio calculadora

10/12/2015 18:45

50 de 50

Cada vector lleva una etiqueta, rotulada cerca de la flecha pero sin
interferir con ella, en la que se identifica de qu vector se trata, su mdulo
y su argumento. Adems, los resultados del clculo, la suma y la resta, se
representan con un color y un grosor distintos de los vectores que
intervienen en la operacin.

10/12/2015 18:45