Apúntate...


Consultas, desarrollo de programas y petición de presupuestos:

Mostrando entradas con la etiqueta listas. Mostrar todas las entradas
Mostrando entradas con la etiqueta listas. Mostrar todas las entradas

jueves, 20 de junio de 2013

Listas en Gambas3: variant[]

Listas en Gambas3: variant[]


LISTAS EN GAMBAS3: VARIANT[]

Gambas3 (al igual que Python) gestiona colecciones de valores llamadas variant[] (listas o arrays dinámicos).

A diferencia de los arrays o matrices en otros lenguajes de programación (no orientados a objetos), las listas poseen características más avanzadas y potentes, como la posibilidad de trabajar con diferentes tipos de datos, ordenar o invertir los datos, etc.




Descarga del proyecto de ejemplo: ejemplo

Otro ejemplo interesante: Listas dentro de otras listas
Public Sub Form_Open()
Dim valor As Variant[] = ["2.4", [3, 2.4], 3.2]
Print valor, valor[0], valor[1], valor[2]
Print valor[1][0], valor[1][1]
End

Que genera este resultado:
(Variant[] 0x2213f98)   2.4     (Float[] 0x22154a8)     3,2
3       2,4

Enlace a la documentación oficial:
http://gambaswiki.org/wiki/comp/gb/variant[]?l=es
http://gambaswiki.org/wiki/lang/array?nh


lunes, 15 de octubre de 2012

Lista de Poligonos: ejemplo de uso de clases

Este es un pequeño ejemplo de como usar clases contenidas en otras clases.

Este es un ejemplo de uso de clases que contienen array de otras clases.
Lo podéis usar, en problemas donde una lista contienen otra lista de objetos, y a su vez esa lista contienen otras listas.
 
Queremos generar el dibujo de una lista de polígonos. Esta lista de polígonos esta compuesta por polígonos que tienen una propiedad de color y una lista de vértices o coordenadas. Este número de vértices es aleatorio, pueden variar de 2 a 7. Y el color puede ser elegido por el usuario.

Podemos hacer el siguiente esquema:
  Siguiendo este esquema podemos desarrollar las clases, con sus propiedades y métodos.

Clases Coordenada:
-->
' Gambas class file

'un vertice del poligono
Property x0 As Integer
Private hx0 As Integer

Property y0 As Integer
Private hy0 As Integer

Private Function x0_Read() As Integer

Return hx0

End

Private Sub x0_Write(Value As Integer)

hx0 = value

End

Private Function y0_Read() As Integer

Return hy0

End

Private Sub y0_Write(Value As Integer)

hy0 = value

End

Clase Poligono:
-->

' Gambas class file

Property colores As Integer
Private hcolores As Integer

Property puntos As ClassCoordenada[]

Private hpuntos As New ClassCoordenada[]

Private Function puntos_Read() As ClassCoordenada[]

Return hpuntos

End

Private Sub puntos_Write(Value As ClassCoordenada[])

hpuntos = Value

End

Private Function colores_Read() As Integer

Return hcolores

End

Private Sub colores_Write(Value As Integer)

hcolores = Value

End

Public Sub dibuja(area As DrawingArea)

Dim a As Integer

Draw.Begin(area)
'dibujo la linea con el color del poligono
Draw.Foreground = hcolores
For a = 0 To hpuntos.Max - 1
Draw.Line(hpuntos[a].x0, hpuntos[a].y0, hpuntos[a + 1].x0, hpuntos[a + 1].y0)
Next

Draw.Line(hpuntos[hpuntos.max - 1].x0, hpuntos[hpuntos.max - 1].y0, hpuntos[hpuntos.max].x0, hpuntos[hpuntos.max].y0)

Draw.End

End

Clase Lista de Poligonos:
-->
' Gambas class file

Property pol As ClassPoligono[]
Private hpol As New ClassPoligono[]

Private Function pol_Read() As ClassPoligono[]

Return hpol

End

Private Sub pol_Write(Value As ClassPoligono[])

hpol = value

End

Public Sub dibujo(area As DrawingArea)

Dim p As ClassPoligono

'recorremos la lista...
 
For Each p In hpol
p.dibuja(area)
Next

End

Ahora vamos al formulario principal:



Y su código:
-->
' Gambas class file

Public poligonos As New ClassArrayPoligonos 'lista de poligonos..

Public Sub _new()

End

Public Sub Form_Open()

Randomize 'generador aleatorio iniciado...
Me.center

End

Public Sub ToggleButton1_Click()

Dialog.Color = ToggleButton1.background
If Dialog.SelectColor() Then Return
ToggleButton1.background = Dialog.Color

End

Public Sub ButtonCrea_Click()

Dim pol As New ClassPoligono
Dim pto As ClassCoordenada
Dim a As Integer
'creo un poligono, el color lo elige el usuario, y con N puntos aleatorias...

pol.colores = ToggleButton1.background
For a = 0 To Rnd(2, 8) ' de 2 puntos a 7 puntos...
pto = New ClassCoordenada
pto.x0 = Int(Rnd(0, DrawingArea1.w))

pto.y0 = Int(Rnd(0, DrawingArea1.h))

pol.puntos.Add(pto)
pto = Null
Next

'añado el poligono creado al array de poligonos...
poligonos.pol.Add(pol)
ButtonRedibuja_Click()

End

Public Sub ButtonRedibuja_Click()

'dibujo los poligonos...
poligonos.dibujo(DrawingArea1)
LabelNumero.text = poligonos.pol.Count

End

Public Sub ButtonOkBorrado_Click()

If ValueBox1.value <= poligonos.pol.max Then poligonos.pol.Delete(ValueBox1.value)

If poligonos.pol.count = 0 Then
DrawingArea1.Background = &HFFFFFF&
Else
DrawingArea1.Clear()
Endif

ButtonRedibuja_Click()
ValueBox1.value = 0

End

Video explicativo:
Código fuente del ejemplo: enlace
(realizado en gambas 3.3.90)

A falta de donativos... un poco de publicidad