LeXicoEl poder de los simple

  

Uso de objetos compuestos


Simulación de 10 lanzamientos de un dado

:
Se usa la clase o modelo Random para crear el objeto dado y se le envía el mensaje Next
que él entiende para que genere el próximo número aleatorio comprendido entre 1 y 6. Observe
que el rango es cerrado por debajo y abierto por encima [ , ) y por ello hay que darle (salen) 1 y 7.
tarea
{
el objeto dado es un "System.Random"
los objetos vez, número_generado son cantidades
variando vez desde 1 hasta 10 haga:
         {
         copie dado.Next(sale 1, sale 7) en número_generado
         muestre número_generado
         }
}

Cómo calcular el tiempo transcurrido en un proceso desde Lexico ?

Cuando necesite calcular un tiempo transcurrido (en éste ejemplo la realización 1000 veces de la estructura lógica ciclo para, for o variando) utilice la propiedad TickCount de un objeto tipo Environment para conocer la milésima de segundo en el que se encuentra el relog de la máquina y calcule la diferencia transcurrida. Obsérvese que el uso de la clase Environment está precedida por el espacio de nombres (System) en el que se encuentra y encerrados en dobles comillas. Esto indica a Lexico que su definición se encuentra ya compilada (en una dll).

tarea:
{
los objetos tiempo_inicial, tiempo_final, i son cantidades
el objeto Contador_de_tiempo es un "System.Environment" no_crear

copie Contador_de_tiempo.TickCount en tiempo_inicial

variando i desde 1 hasta 1000 haga: nop /* No hay operación explícita */

copie Contador_de_tiempo.TickCount en tiempo_final

muestre
"Demora en la ejecución del ciclo:

Tiempo inicial ", tiempo_inicial, "
Tiempo final ", tiempo_final, "
Tiempo transcurrido ", tiempo_final - tiempo_inicial, " ms"
}

Creación de un archivo plano (ASCCI o texto)

/*demo51_archivo_plano_creación.lx*/

tarea:
{
/* Para aleatorizar cambie el valor 17 de la semilla, por ejemplo usando el mensaje Millisecond de "system.datetime" */

el objeto archivo es un "System.IO.StreamWriter" (sale "demo51_archivo_generado.txt")
los objetos n, veces, número son cantidades
el objeto azar es un "System.Random"(sale 17)
el objeto texto son caracteres

entre n


archivo.WriteLine(sale " números seudoaleatorios generados desde un programa Lexico:")
archivo.WriteLine
archivo.WriteLine(sale n)
variando veces desde 1 hasta n haga:
   {
   copie azar.next(sale 0, sale 255) en número
   archivo.WriteLine(sale número)
   }

archivo.close

}

Lectura desde un archivo plano

:
/*demo51_archivo_plano_lectura.lx*/

tarea:
{

el objeto archivo es un "System.IO.StreamReader" (sale "demo51_archivo_generado.txt")
los objetos n, veces, número son cantidades
el objeto texto son caracteres

copie archivo.ReadLine en texto
muestre "texto_1= ", texto

copie archivo.ReadLine en texto
muestre "texto_2= ", texto

copie archivo.ReadLine en n
muestre "n= ", n

variando veces desde 1 hasta n haga
   {
   copie archivo.ReadLine en número
   muestre número
   }

archivo.close
}

Una colección tipo tabla (HashTable)


tarea:
{
el objeto tabla es un "System.Collections.HashTable"(sale 20)
tabla.Add(sale "uno", sale 1)
tabla.Add(sale "dos", sale 2)
tabla.Add(sale "tres", sale 3)

el objeto valor es una cantidad

copie tabla.Item(sale "tres") en valor
muestre "Para la clave tres existe el valor ", valor

copie tabla.Count en valor
muestre "La tabla tiene ", valor, " objetos"
}

Lanzamiento de un proceso

Cuando desde su programa necesite activar otro proceso cree un objeto de la clase Process" (en este ejemplo lanzador) y envíele el mensaje Start con los argumentos necesarios en uno o dos objetos tipo caracteres: 1. Nombre de un archivo asociado bajo el sistema operativo (Este ejemplo) o 2. Nombre de la aplicación directamente o 3. Nombre de la aplicación y los argumentos necesarios.


/*demo26_lanzar_otra_aplicacion_desde_tarea.lx*/
tarea
{
el objeto lanzador es un "System.Diagnostics.Process"

lanzador.Start(sale "http://riosur.net")
}

Cómo crear un color desde Lexico ?

Cree un objeto de la clase color existente en el espacio de nombres System.Drawing. Con la propiedad Red de color se puede establecer como color rojo. Hay 141 nombres preestablecidos. Las propiedades A, R, G, B entregan los valores para los niveles de Alfa (opacidad), Red (rojo), Green (verde) y Blue (azul) que definen el color. Los niveles deben estar en el rango [0, 255]. Con la función FromArgb de color puede crear su propio color indicando los niveles apropiados. Con un objeto de la clase "System.Windows.Forms.ColorDialog" puede permitir al usuario final seleccionar el color visualmente.

tarea:
{
el objeto color es un "System.Drawing.Color"
copie color.Red en color
los objetos valor_opacidad, valor_rojo, valor_verde, valor_azul son cantidades

copie color.A en valor_opacidad
copie color.R en valor_rojo
copie color.G en valor_verde
copie color.B en valor_azul

muestre "La opacidad es ", valor_opacidad, "
La cantidad de rojo  es ", valor_rojo, "
La cantidad de verde es ", valor_verde, "
La cantidad de azul  es ", valor_azul

copie color.FromArgb(sale 255, sale 100, sale 150, sale 200) en color


copie color.A en valor_opacidad
copie color.R en valor_rojo
copie color.G en valor_verde
copie color.B en valor_azul

muestre "Ahora la opacidad es ", valor_opacidad, "
La cantidad de rojo  es ", valor_rojo, "
La cantidad de verde es ", valor_verde, "
La cantidad de azul  es ", valor_azul

el objeto dialogo_para_color es un "System.Windows.Forms.ColorDialog"
dialogo_para_color.ShowDialog
copie dialogo_para_color.Color en color


copie color.A en valor_opacidad
copie color.R en valor_rojo
copie color.G en valor_verde
copie color.B en valor_azul

muestre "En el color seleccionado:", "
la opacidad es ", valor_opacidad, "
la cantidad de rojo  es ", valor_rojo, "
la cantidad de verde es ", valor_verde, "
la cantidad de azul  es ", valor_azul
}



Dos puntos con recorridos diferentes

:
Se crean dos puntos y una línea con base en las definiciones existentes en el archivo fuente en Lexico riosur00.lx contenido en riosur00.zip Al punto1 se le ordena moverse 10 veces a la derecha y al punto2 se le ordena una vez moverse 10 pasos. (NO se usan las dobles comillas pues las definiciones están contenida en un archivo .lx (código fuente Lexico))
incluya "riosur00.lx"

tarea
{
el objeto punto1, punto2 son punto
el objeto segmento es una linea
los objetos vez, x1, y1, x2, y2 son cantidades
variando vez desde 1 hasta 10 haga:
         {
         punto1.muevase_der
         segmento.muevase_der(sale 1)
         }
punto2.muevase_der(sale 10)
punto1.deme_posición(entra x1, entra y1)
punto2.deme_posición(entra x2, entra y2)
es x1=x2  &  y1=y2 ? si: muestre "Están en el mismo sitio"
                               no: muestre "NO están en las mismas coordenadas"
}

Un recorrido hipotético al azar

:
usa riosur00.lx que puede descargar desde aquí

Para que la secuencia de números seudoaleatorios empice en un número diferente cada vez que se corra el programa puede cambiarse la semilla por un número que no dependa del programador(usted) sino de una situación aleatoria tal como el tiempo (o mejor, una parte del valor del relog del computador: las milésimas de segundo) en el momento de ejecutarse el programa.
incluya "riosur00.lx"

tarea:
{
los objetos vez, dirección, semilla son cantidades

el objeto hora es un "system.datetime"
copie hora.utcnow en hora
copie hora.millisecond en semilla
el objeto dado es un "System.Random"(sale semilla)
el objeto móvil es un punto(sale 200, sale 200)

variando vez desde 1 hasta 1000 haga:
  {
   copie dado.next(sale 1, sale 4) en dirección
   casos de dirección:
     caso 1: móvil.muevase_arr salte
     caso 2: móvil.muevase_der salte
     caso 3: móvil.muevase_aba salte
     caso 4: móvil.muevase_izq salte
     otros : muestre "salió por otros con ", dirección
   fin_casos
}
móvil.dele_posición
}

Generación de un sonido y uso de multimedia: mp3, wav, mid, avi, mpg, jpg, bmp, gif, wma, wmv ...


Use las clases Sonido y Reproductor existentes en el espacio de nombres Multimedia que se encuentra en la biblioteca (librería) riosur02.dll.

La clase Sonido "entiende" los mensajes (posee algoritmos para ello) Suene para sonar un sonido estandar y Suene(doy frecuencia, doy duración) para generar un sonido particular.

La clase Reproductor posee:
Métodos: Correr, parar, Cerrar.
Atributos públicos: DetenerContinuar, Repetir (que deben ser verdadero/falso), Duracion, Posicion (que son una cantidad), Estado (que son caracteres)
incluya "riosur02.dll"
tarea:
{
el objeto pito es un "Multimedia.Sonido"
pito.Suene

el objeto Sonido es un "Multimedia.Reproductor"
el objeto dialogo es un "System.Windows.Forms.OpenFileDialog"
dialogo.ShowDialog

Sonido.Abrir(sale dialogo.FileName)
Sonido.Correr

muestre "Estoy corriendo..."
}

Cómo hacer un modelo para objetos (clase de objetos) en Lexico ?

La clase cilindro tiene tres constructores para que el programador-usuario construya el objeto de una de tres formas posibles: sin aportar datos, aportando dos o aportando los tres. De cualquier forma el objeto ha de ser construido completamente por lo que la clase debe asumir los datos faltantes. La parte más interesante son las dos formas en que puede entregar el volumen. La primera es por medio del parámetro asociado al mensaje deme_su_volumen y la segunda es por medio de la función volumen que se comporta exteriormente como si fuera un objeto variable y por ello puede ser utilizada directamente en una expresión tal como cil2.volumen/2. Obsérvese que la función hay que declararla como tal y ser terminada con la instrucción retornar:

clase cilindro
privados:
los objetos radio, altura son cantidades
el objeto identificación son caracteres
mensajes:
cilindro
{
copie 0 en radio, altura
copie "N.N" en identificación
muestre "Soy ", identificación, " con radio= ", radio, " y altura= ", altura
}

cilindro(entra r, entra h)
{
copie r en radio
copie h en altura
copie "N.N." en identificación
muestre "Soy ", identificación, " con radio= ", radio, " y altura = ", altura
}

cilindro(entra r, entra h, entra nom)
{
copie r en radio
copie h en altura
copie nom en identificación
muestre "Soy ", identificación, " con radio = ", radio, " y altura = ", altura
}

deme_su_volumen(sale volumen) copie 3.1416*altura*radio*radio en volumen

volumen es_funcion cantidad
    {
     el objeto vol es una cantidad
     copie 3.1416*altura*radio*radio en vol
     retornar vol
    }

modifique_radio(entra r) copie r en radio
modifique_altura(entra h) copie h en altura
modifique_nombre(entra nom) copie nom en identificación
deme_radio(sale radio) nop
deme_altura(sale altura) nop
deme_identificación(sale identificación) nop

tarea:
{
el objeto cil2 es un cilindro(sale 10, sale 20)
el objeto cil3 es un cilindro(sale 100, sale 200, sale "cil#3")
el objeto cil1 es un cilindro

el objeto v es una cantidad
cil2.deme_su_volumen(entra v)
muestre v

muestre "La mitad del volumen es ", cil2.volumen/2

los objetos var1, var2 son cantidades
el objeto nombre son caracteres
cil2.deme_radio(entra var1)
cil2.deme_altura(entra var2)
cil2.deme_identificación(entra nombre)
muestre "Objeto: ", nombre, "
radio: ", var1, "
altura: ", var2
}

Aquí próximamente se colocarán más ejemplos de programación con el lenguaje Lexico (Abril.10.2005)
También puede encontrar ejemplos en:

Artículos

Programas de ejemplo

Trabajos de estudiantes

También se presentan ejemplos en los foros

 
Todos los derechos reservados :: Powered by Riosur :: Diseñado por EnDeT