Sie sind auf Seite 1von 61

Indice:

MSWLogo
Si quieres, puedes descargar el manual en formato pdf para imprimirlo
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.
Ir al ndice:
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 losargumentos, 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.
Ir al ndice:
Veamos a continuacin una pequea muestra de las primitivas ms sencillas de
MSWLogo y de sus abreviaturas:
PRIMITIVA
AVANZA 150
RETROCEDE 80
GIRADERECHA 15
GIRAIZQUIERDA 30
SUBELAPIZ
BAJALAPIZ
GOMA
OCULTATORTUGA
MUESTRATORTUGA
BORRAPANTALLA
BORRATEXTO
CENTRO
ROTULA [hola]
PONCOLORLAPIZ 4
TONO [800 200]

ACCIN
La tortuga avanza el nmero indicado de puntos (150).
Retrocede el nmero de puntos especificado (80).
Gira a la derecha el ngulo especificado en grados (15).
Gira a la izquierda el ngulo indicado (30).
Levanta el lpiz y no pinta al moverse por la pantalla.
El lpiz toca el papel y pinta cuando se mueve.
La tortuga borra a lo largo de su trayectoria.
Oculta el icono de la tortuga.
Muestra el tringulo que representa la tortuga.
Borra la pantalla grfica y sita la tortuga en el centro.
Borra la pantalla de trabajo
Lleva la tortuga al centro de la pantalla sin borrar.
Escribe el texto especificado entre corchetes (hola).
Establece el color con que pinta. El 4 corresponde al rojo.
Emite un sonido de [frecuencia (800Hz) y duracin
(200ms)]

ABREVIADO
AV 150
RE 80
GD 15
GI 30
SL
BL
OT
MT
BP
BT
RO [hola]
PONCL 4

PONGROSOR [3 3]
ADIOS

Fija el grosor y la altura del lpiz con el que traza lneas.


Sale de MSWLogo.

PONG [3 3]

Ir al ndice:
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.
Ir al ndice:
Crear un procedimiento
Ejercicio 1: Hola mundo
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.
Ir al ndice:
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.
Ir al ndice:
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
la pantalla
rotula [hoy es jueves]
rotula (lista febrero abril y septiembre)

escribe la palabra <manzana> en


escribe la frase <hoy es jueves>
escribe las palabras de la lista

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.
Ir al ndice:
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:
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.
Ir al ndice:
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
rotula [hola]
haz hola 79
rotula :hola
haz "hola 79
rotula hola * 2
haz "hola 79
rotula :hola * 2

hola
hola
79
error
158

Ir al ndice:
Guardar los procedimientos en el disco
Un programa escrito en Logo est compuesto por uno o 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
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.

Ir al ndice:
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]
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 obajalapiz
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
ponrumbo 45 sl av 10 bl av 40 sl centro
ponrumbo 90 sl av 10 bl av 40 sl centro
ponrumbo 135 sl av 10 bl av 40 sl centro
ponrumbo 180 sl av 10 bl av 40 sl centro
ponrumbo -135 sl av 10 bl av 40 sl centro
ponrumbo -90 sl av 10 bl av 40 sl centro
ponrumbo -45 sl av 10 bl av 40 sl centro
ot
fin
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.
Ir al ndice:
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
subelapiz
bajalapiz
poncolorlapiz [RGB]
poncolorlapiz n
pongrosor [g g]
poncolorpapel [RGB]
poncolorrelleno [r v a]
goma
ponlapiz

ABREVIADO
sl
bl
poncl [RGB]
poncl n
pong [g g]
poncp [RGB]
poccr [RGB]
pla

ACCIN
Levanta el lpiz del papel y no pinta al moverse
Baja el lpiz y deja un trazo al moverse la tortuga
Asigna al lpiz un color compuesto [rojo verde azul]
Asigna al lpiz el color nmero n de la tabla
El grosor del lpiz es de g puntos de alto y de ancho
Establece el color del fondo de la pantalla grfica
Fija el color con el que rellenar figuras cerradas
Sustituye el lpiz por una goma que borra al desplazarse
Deja la goma y vuelve a coger el lpiz

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

Ir al ndice:
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.
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
Ir al ndice:
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
haz numero2 68
haz resultado :numero1 * :numero2
bp gd 90
rotula [15 x 68 = ]
av 90
rotula :resultado
fin

;la primera variable toma el valor 15


;la segunda variable toma el valor 68
;calculamos el producto
;la tortuga en el centro y horizontal
;rotula los factores de la operacin
;se desplaza a la derecha del signo =
;rotula el resultado

Ir al ndice:
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 [
repite 40 [
repite 4 [av 100 gd 90] gd 9]
av 60 gi 30]
fin

;hace 12 veces lo que sigue


;hace 40 veces lo que sigue
;hace un cuadrado y gira a la derecha
;avanza y gira a la izquierda

Ir al ndice:

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 1 2 3 4 5 6 7
8 9 10 11 12 13 14 15
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 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 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 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
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
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
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 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]
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
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 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 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 programa
discos
;llama al procedimiento discos
fin
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


espera 3]

;dibuja un crculo y lo rellena


;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
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
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 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]
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]


rotula "FIN
bl pongrosor [0 0]
fin

;se sita en el centro del ltimo polgono


;anuncia que ha terminado
;recompone valores para no afectar a otros

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
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]
ponpos [-400 200]
rotula "FIN
fin

;limpia la pantalla
;posicin idnea para el cartel de 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
(y expresion1 expresion2 expresion3 ...)
si debe evaluar ms de 2 expresiones
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

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.
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
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]
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 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 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:
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
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]
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 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
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
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
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, 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
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
(izda.)

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

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 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
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.

Eplogo
Bien, espero que hayas disfrutado de tu aprendizaje como programador.
Ahora no me queda ms que animarte a que apliques lo que has aprendido a crear
los programas que puedas imaginar. Buena suerte.

Luis Gonzlez
Profesor de Tecnologas de la Informacin
Madrid 060530

Das könnte Ihnen auch gefallen