next up previous contents index
Siguiente: Acerca de XLOGO Subir: Manual del Usuario Anterior: Utilización de la red   Índice General   Índice de Materias

Subsecciones


Ejemplos de programas


Dibujar casas

para casa :c

repite 4 [

avanza (20*:c) giraderecha 90 ]

avanza (20*:c)

giraderecha 30

repite 3 [

avanza (20*:c) giraderecha 120 ]

fin

para colocar :c

subelápiz

giraizquierda 30

retrocede (:c*20)

giraderecha 90

avanza (:c*22)

giraizquierda 90

bajalápiz

fin

para casas

borrapantalla

ocultatortuga

subelápiz

giraizquierda 90

avanza 200

giraderecha 90

bajalápiz

repitepara [n 3 7 2]

[ casa :n colocar :n ]

casa 10

fin

Image casas


Dibujar un rectángulo sólido

   para rect :alto :largo
    si :alto = 0 | :largo = 0 [alto]
    repite 2 [
       avanza :alto
       giraderecha 90
       avanza :largo
       giraderecha 90 ]
    rect :alto -1 :largo -1
   fin
Image rectangulo


Factorial

Recordatorio: 5! = 5 * 4 * 3 * 2 * 1

   para factorial :n 
     si :n = 1 
      [devuelve 1]
      [devuelve :n * factorial (:n - 1)]
   fin
Ejemplo:
      escribe factorial 5 --> 120.0
      escribe factorial 6 --> 720.0


Copo de nieve (Gracias a Georges Noël)

   para copo :orden :lar
     si (:orden < 1) | (:lar < 1)
      [av :lar alto]
     copo :orden-1 :lar/3
     giraizquierda 60
     copo :orden-1 :lar/3
     giraderecha 120
     copo :orden-1 :lar/3
     giraizquierda 60
     copo :orden-1 :lar/3
   fin

   para coponieve :orden :lar 
     repite 3 [
       giraderecha 120 
       copo :orden :lar ]
   fin
Ej: coponieve 5 450
Image CopoNieve


Escritura

   para escribir 
     ocultatortuga
     repite 40 [
       avanza 30
       giraderecha 9
       poncolorlapiz azar 7
       rotula [XLogo es genial!] ] 
   fin
Image Escritura


Conjugación (sólo verbos regulares)

Primera versión

para futuro :verbo
es frase "yo palabra :verbo "é
es frase "tú palabra :verbo "ás
es frase "él palabra :verbo "á
es frase "nosotros palabra :verbo "emos
es frase "vosotros palabra :verbo "éis
es frase "ellos palabra :verbo "án
fin
Ejemplo: futuro "amar

yo amaré
tú amarás
él amará
nosotros amaremos
vosotros amaréis
ellos amarán

Segunda versión

para futuro :verbo
haz "pronombres [yo tú él nosotros vosotros ellos]
haz "terminaciones [é ás á emos éis án]
repitepara [i 1 6]
[ es fr elemento :i :pronombres palabra :verbo elemento :i :terminaciones ]
fin
Ejemplo: futuro "amar

yo amaré
tú amarás
él amará
nosotros amaremos
vosotros amaréis
ellos amarán

Tercera versión (con recurrencia)

para futuro :verbo
haz "pronombres [yo tú él nosotros vosotros ellos]
haz "terminaciones [é ás á emos éis án]
conjugar :verbo :pronombres :terminaciones
fin

para conjugar :verbo :pronombres :terminaciones
si vacio? :pronombres [alto]
es fr primero :pronombres palabra :verbo primero :terminaciones
conjugar :verbo mp :pronombres mp :terminaciones
fin
Ejemplo: futuro "amar

yo amaré
tú amarás
él amará
nosotros amaremos
vosotros amaréis
ellos amarán


Colores


Introducción

Primero, algunas aclaraciones: Habrás visto en la sección 5.1.4 que el comando poncl puede tomar como argumento tanto un número como una lista. Aquí nos centraremos en codificar valores RVA. Cada color en XLOGO está codificado usando tres valores: rojo, verde y azul, de ahí RVA (RGB en inglés).

Estos tres números conforman una lista que es argumento de la primitiva poncl, por lo que representan respectivamente los componentes rojo, verde y azul de un color. Esta manera de codificar no es muy intuitiva, así que para tener una idea del color que obtendrás puedes usar la caja de diálogo Herramientas Elegir color del lápiz.

Sin embargo, usando esta forma de codificar colores, se hace muy fácil transformar una imagen. Por ejemplo, si quieres convertir una foto color en escala de grises, puedes cambiar cada punto (píxel) de la imagen a un valor promedio de los 3 componentes RVA. Imagina que el color de un punto de la imagen está dado por [0 100 80]. Calculamos el promedio: (0 + 100 + 80)/3 = 60, y asignamos el color [60 60 60] a este punto. Esta operación debe ser realizada para cada punto de la imagen.


Práctica: Escala de grises

Vamos a transformar una imagen color de 100 por 100 a escala de grises. Esto significa que tenemos 100 * 100 = 10000 puntos a modificar.

La imagen de ejemplo utilizada aquí está disponible en la siguiente dirección:

   http://xlogo.tuxfamily.org/images/transfo.png
Así es como vamos a proceder: primero, nos referiremos al punto superior izquierdo como [0 0]. Luego, la tortuga examinará los primeros 100 puntos (pixeles) de la primera línea, seguidos por los primeros 100 de la segunda, y así sucesivamente. Cada vez tomaremos el color del punto usando encuentracolor, y el color será cambiado por el promedio de los tres [r v a] valores. Aquí está el código principal: (No olvides cambiar la ruta del archivo en el procedimiento!)

para transform
# Debes cambiar la ruta de la imagen transfo.png
# Ej: cargaimagen [/home/usuario/imagenes/transfo.png]
  borrapantalla ocultatortuga
  pondirectorio "/home/usuario/imagenes
  cargaimagen "transfo.png
  escalagris
fin

para escalagris
  repitepara [y 0 -100 -1]
    [ repitepara [x 0 100]
# asignamos el promedio de color del punto al color del lapiz
      [ poncolorlapiz pixel encuentracolor lista :x :y
# convertimos el punto escala de grises 
        punto lista :x :y ] ]
fin

para pixel :lista1
# devuelve el promedio de los 3 numeros [r v a]
  haz "r primero :lista1 
  haz "lista1 menosprimero :lista1 
  haz "v primero :lista1 
  haz "lista1 menosprimero :lista1 
  haz "a primero :lista1 
  haz "color redondea (:r+:v+:a)/3
  devuelve frase :color frase :color :color 
fin
Image colores1


Negativo

Para cambiar una imagen a su negativo, se puede usar el mismo proceso de la escala de grises, excepto que en lugar de hacer el promedio de los números [r v a], los reemplazamos por su complemento, o sea la diferencia a 255.

Ejemplo: Si un punto (píxel) tiene un color [2 100 200], lo reemplazamos con [253 155 55]. Podríamos usar el mismo código que en el ejemplo anterior, cambiando únicamente el procedimiento pixel, pero veamos un procedimiento recursivo:

para transform2
# Debes cambiar la ruta de la imagen transfo.png
# Ej: c:\Mis Documentos\Mis imagenes\transfo.png
  borrapantalla
  ocultatortuga
  pondirectorio "c:\\Mis\ Documentos\\Mis\ imagenes
  cargaimagen "transfo.png
  negativo 0 0
fin

para negativo :x :y
  si :y = -100
   [ alto ]
   [ si :x = 100
     [ haz "x 0 haz "y :y-1]
     [ poncolorlapiz pixel2 encuentracolor lista :x :y
       punto lista :x :y ] ] 
  negativo :x+1 :y
fin

para pixel2 :lista1
# devuelve el promedio de los 3 numeros [r v a]
  haz "r primero :lista1 
  haz "lista1 menosprimero :lista1 
  haz "v primero :lista1 
  haz "lista1 menosprimero :lista1 
  haz "a primero :lista1 
  devuelve frase (255 - :r) frase (255 - :v) (255 - :a)
fin
Image colores2


Listas (Gracias a Olivier SC)

Supongo que apreciarás este hermoso programa:

   para revertir :w 
     si vacio? :w
       [devuelve "]
       [devuelve palabra ultimo :w revertir menosultimo :w ]
   fin

   para palindromo :w
    si :w = revertir :w
      [devuelve "cierto]
      [devuelve "falso]
   fin

   para palin :n
     si palindromo :n
      [escribe :n alto]
      [haz "texto suma :n revertir :n
       haz "texto frase "igual\ a :texto
       haz "texto frase revertir :n :texto
       haz "texto frase "mas :texto
       haz "texto frase :n :texto
       escribe :texto
       palin :n + revertir :n ]
   fin
Ejemplo: palin 78
      78 mas 87 igual a 165
      165 mas 561 igual a 726
      726 mas 627 igual a 1353
      1353 mas 3531 igual a 4884
      4884


Un lindo medallón

   para roset
     pongrosor 2
     repite 6 [
       repite 60
        [avanza 2 giraderecha 1]
       giraderecha 60
       repite 120
        [avanza 2 giraderecha]
       giraderecha 60 ]
     pongrosor 1
   fin

   para roseton 
     roset 
     repite 30
       [avanza 2 giraderecha 1]
     roset 
     repite 15
       [avanza 2 giraderecha 1]
     roset
     repite 30
       [avanza 2 giraderecha 1]
     roset
   fin

Ejemplo:

   borrapantalla ocultatortuga
   poncolorpapel 0 poncolorlapiz 5
   roset
   subelapiz ponposicion [-300 0] bajalapiz
   ponrumbo 0 roseton
Image roseton


next up previous contents index
Siguiente: Acerca de XLOGO Subir: Manual del Usuario Anterior: Utilización de la red   Índice General   Índice de Materias
Álvaro Valdés 2008-03-13