Como declarar un array compuesto

01/08/2003 - 01:03 por Marco | Informe spam
Hola necesito declarar un array compuesto por

dim mi_gran_array(integer, array_de_integer_1(), array_de_integer_2())

si esto se puede hacer
como hago para redimensionar los array de adentro

redim array_de_integer_1() ???

y como hago para asignar un valor a

array_de_integer_1(1)

muchas gracias

Preguntas similare

Leer las respuestas

#1 Javier Balkenende
01/08/2003 - 02:16 | Informe spam
Me da la impresion como que confundes un poco las cosas ahi.

Una matriz tiene varias dimensiones, pero todos los elementos que contienen
son del mismo tipo, por ejemplo Integer.
En la declaracion, le pones todas las dimensiones que tengas, pero van
numeros, no otra cosa como un array.

Lo que me parece que quieres hacer es algo que una vez hice, necesitaba que
uno de los elementos de un array dimensionable fuera a la vez otro array
dimensionable, en tu caso al parecer necesitas dos.

Bueno, te digo como lo hice yo.

Public Type ElementosArrayGrande ' public o private, según sea
Dim Codigo as Integer
Dim array_de_integer_1() as Integer
Dim array_de_integer_2() as Integer
End Type

Dim dim mi_gran_array() as ElementosArrayGrande

Redim mi_gran_array (ValorQueSea1)
...

Redim mi_gran_array(0).array_de_integer_1(ValorQueSea2)
Redim mi_gran_array(0).array_de_integer_2(ValorQueSea3)
...
Redim mi_gran_array(n).array_de_integer_1(ValorQueSea2n)
Redim mi_gran_array(n).array_de_integer_2(ValorQueSea3n)

Ahi tienes un Array que contiene un elemento que es un Integer y otros dos
que son Arrays dimensionables.

En lugar de usar un registro tipo también podrías hacerlo con un módulo de
clases.

Saludos,
Javier
"Marco" escribió en el mensaje
news:


Hola necesito declarar un array compuesto por

dim mi_gran_array(integer, array_de_integer_1(), array_de_integer_2())

si esto se puede hacer
como hago para redimensionar los array de adentro

redim array_de_integer_1() ???

y como hago para asignar un valor a

array_de_integer_1(1)

muchas gracias



Respuesta Responder a este mensaje
#2 Marco
01/08/2003 - 03:14 | Informe spam
Gracias por contestar

la respuesta es la solucion que buscaba

sin embargo te queria consultar como seria eso de hacerlo con un módulo de
clases.
Respuesta Responder a este mensaje
#3 Norman A. Armas
01/08/2003 - 03:27 | Informe spam
Ejem
Solo queria aportar de que se puede crear un arreglo de tipos y por lo tanto
un tipo puede tener integer, string, boolean etc. al mismo tiempo en cada
uno de sus elementos dentro del array de una sola dimension.

Saludos,

Norman



"Javier Balkenende" wrote in message
news:
Me da la impresion como que confundes un poco las cosas ahi.

Una matriz tiene varias dimensiones, pero todos los elementos que


contienen
son del mismo tipo, por ejemplo Integer.
En la declaracion, le pones todas las dimensiones que tengas, pero van
numeros, no otra cosa como un array.

Lo que me parece que quieres hacer es algo que una vez hice, necesitaba


que
uno de los elementos de un array dimensionable fuera a la vez otro array
dimensionable, en tu caso al parecer necesitas dos.

Bueno, te digo como lo hice yo.

Public Type ElementosArrayGrande ' public o private, según sea
Dim Codigo as Integer
Dim array_de_integer_1() as Integer
Dim array_de_integer_2() as Integer
End Type

Dim dim mi_gran_array() as ElementosArrayGrande

Redim mi_gran_array (ValorQueSea1)
...

Redim mi_gran_array(0).array_de_integer_1(ValorQueSea2)
Redim mi_gran_array(0).array_de_integer_2(ValorQueSea3)
...
Redim mi_gran_array(n).array_de_integer_1(ValorQueSea2n)
Redim mi_gran_array(n).array_de_integer_2(ValorQueSea3n)

Ahi tienes un Array que contiene un elemento que es un Integer y otros dos
que son Arrays dimensionables.

En lugar de usar un registro tipo también podrías hacerlo con un módulo de
clases.

Saludos,
Javier
"Marco" escribió en el mensaje
news:
>
>
> Hola necesito declarar un array compuesto por
>
> dim mi_gran_array(integer, array_de_integer_1(), array_de_integer_2())
>
> si esto se puede hacer
> como hago para redimensionar los array de adentro
>
> redim array_de_integer_1() ???
>
> y como hago para asignar un valor a
>
> array_de_integer_1(1)
>
> muchas gracias
>
>
>


Respuesta Responder a este mensaje
#4 Javier Balkenende
01/08/2003 - 04:15 | Informe spam
Si, si, por supuesto. Yo en el ejemplo usé solo integer porque en la
explicación de lo que quería hacer eran todos integer, pero de esa manera
puedes hacer la estructura de datos que sea. Inclusive los arrays
"interiores", me refiero a los que están definidos en el registro tipo a su
vez podrían ser de un tipo de datos de otro registro tipo y a la vez
contener otros arrays dentro. Yo cuando lo usé no necesité hacerlo tan
complicado pero lógicamente tiene que andar.

Saludos,
Javier

"Norman A. Armas" escribió en el mensaje
news:
Ejem
Solo queria aportar de que se puede crear un arreglo de tipos y por lo


tanto
un tipo puede tener integer, string, boolean etc. al mismo tiempo en cada
uno de sus elementos dentro del array de una sola dimension.

Saludos,

Norman



"Javier Balkenende" wrote in message
news:
> Me da la impresion como que confundes un poco las cosas ahi.
>
> Una matriz tiene varias dimensiones, pero todos los elementos que
contienen
> son del mismo tipo, por ejemplo Integer.
> En la declaracion, le pones todas las dimensiones que tengas, pero van
> numeros, no otra cosa como un array.
>
> Lo que me parece que quieres hacer es algo que una vez hice, necesitaba
que
> uno de los elementos de un array dimensionable fuera a la vez otro array
> dimensionable, en tu caso al parecer necesitas dos.
>
> Bueno, te digo como lo hice yo.
>
> Public Type ElementosArrayGrande ' public o private, según sea
> Dim Codigo as Integer
> Dim array_de_integer_1() as Integer
> Dim array_de_integer_2() as Integer
> End Type
>
> Dim dim mi_gran_array() as ElementosArrayGrande
>
> Redim mi_gran_array (ValorQueSea1)
> ...
>
> Redim mi_gran_array(0).array_de_integer_1(ValorQueSea2)
> Redim mi_gran_array(0).array_de_integer_2(ValorQueSea3)
> ...
> Redim mi_gran_array(n).array_de_integer_1(ValorQueSea2n)
> Redim mi_gran_array(n).array_de_integer_2(ValorQueSea3n)
>
> Ahi tienes un Array que contiene un elemento que es un Integer y otros


dos
> que son Arrays dimensionables.
>
> En lugar de usar un registro tipo también podrías hacerlo con un módulo


de
> clases.
>
> Saludos,
> Javier
> "Marco" escribió en el mensaje
> news:
> >
> >
> > Hola necesito declarar un array compuesto por
> >
> > dim mi_gran_array(integer, array_de_integer_1(),


array_de_integer_2())
> >
> > si esto se puede hacer
> > como hago para redimensionar los array de adentro
> >
> > redim array_de_integer_1() ???
> >
> > y como hago para asignar un valor a
> >
> > array_de_integer_1(1)
> >
> > muchas gracias
> >
> >
> >
>
>


Respuesta Responder a este mensaje
#5 Javier Balkenende
01/08/2003 - 04:47 | Informe spam
Mira el ejemplo:
Agrega un módulo de clases.

Coloca un código equivalente a esto en un form:
*******************************
' redimensiono el array "grande",
' si luego hubiera que cambiar la dimension hay que usar Preserve
ReDim mi_gran_array(ValorQueSea1)

' Acá se crea el objeto Class1 que va a estar en el índice 0
' del array grande
Set mi_gran_array(0) = New Class1

' asigno lo que quiero en los arrays interiores
mi_gran_array(0).array_de_integer_1(Valor_Indice_QueSea2) = X
mi_gran_array(0).array_de_integer_2(Valor_Indice_QueSea3) = Y


' lo mismo para los otros items del array grande
Set mi_gran_array(n) = New Class1

mi_gran_array(n).array_de_integer_1(Valor_Indice_QueSea2n) = Xn
mi_gran_array(n).array_de_integer_2(Valor_Indice_QueSea3n) = Yn
*****************************************


En el módulo de clases que agregaste al proyecto pega este código:
*****************************************
Option Explicit
' Se almacenan las variables como privadas
' para luego accederlas a través de procedimientos de propiedad

Private m_Codigo As Integer
Private m_array_de_integer_1() As Integer
Private m_array_de_integer_2() As Integer

Private Sub Class_Initialize()
' inicializo los arrays para que no dé error luego al hacer Ubound
ReDim m_array_de_integer_1(0)
ReDim m_array_de_integer_2(0)
End Sub

' Acá vienen los procedimentos de propiedad
Public Property Get Codigo() As Integer
Codigo = m_Codigo
End Property

Public Property Let Codigo(nValor As Integer)
m_Codigo = nValor
End Property


Public Property Get array_de_integer_1(nIndice As Integer) As Integer
' se fija si el índice que viene está dentro del rango del array, sino
da error.
' Este procedimento podría ser reducido a:
' array_de_integer_1 = m_array_de_integer_1(nIndice)
' total igual va a dar un error

If nIndice >= LBound(m_array_de_integer_1) And nIndice <UBound(m_array_de_integer_1) Then
array_de_integer_1 = m_array_de_integer_1(nIndice)
Else
Err.Raise 123, "índice fuera del intervalo"
End If
End Property

Public Property Let array_de_integer_1(nIndice As Integer, nValor As
Integer)
' Redimensiona automáticamente el array si se quiere asignar
' un valor fuera del rango actual
If nIndice > UBound(m_array_de_integer_1) Then
ReDim Preserve m_array_de_integer_1(nIndice)
End If
' asigna el valor al array privado dentro de la clase
m_array_de_integer_1(nIndice) = nValor
End Property

' ... lo mismo
Public Property Get array_de_integer_2(nIndice As Integer) As Integer
If nIndice >= LBound(m_array_de_integer_2) And nIndice <UBound(m_array_de_integer_2) Then
array_de_integer_2 = m_array_de_integer_2(nIndice)
Else
Err.Raise 123, "índice fuera del intervalo"
End If
End Property

Public Property Let array_de_integer_2(nIndice As Integer, nValor As
Integer)
If nIndice > UBound(m_array_de_integer_2) Then
ReDim Preserve m_array_de_integer_2(nIndice)
End If
m_array_de_integer_2(nIndice) = nValor
End Property
*************************************************

Saludos,
Javier









"Marco" escribió en el mensaje
news:
Gracias por contestar

la respuesta es la solucion que buscaba

sin embargo te queria consultar como seria eso de hacerlo con un módulo de
clases.



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida