domingo, 24 de mayo de 2015

ARRAYS

Un array permite referirse a una serie de elementos del mismo tipo con un mismo nombre, y hace
referencia un único elemento de la serie utilizando uno o más índices, como un vector o una matriz
en Álgebra.
Visual Basic 6.0 permite definir arrays de variables de una o más dimensiones (hasta 60) y de
cualquier tipo de datos (tipos fundamentales y definidos por el usuario). Pero además Visual Basic
introduce una nueva clase de arrays, los arrays de controles (esto es, arrays de botones, de etiquetas,
de paneles, etc.) que permiten una programación más breve y clara. En este apartado sólo se tratarán
los arrays de variables.
Todos los elementos de un array deben ser del mismo tipo y están almacenados de forma
contigua en la memoria. Por supuesto, si el array es de tipo Variant cada elemento puede contener
un dato de tipo diferente, e incluso puede contener otro array.
Entre los arrays de variables cabe distinguir dos tipos fundamentales, dependiendo de que
número de elementos sea constante o pueda variar durante la ejecución del programa.
1. Arrays estáticos, cuya dimensión es siempre la misma.
2. Arrays dinámicos, cuya dimensión se puede modificar durante la ejecución del
programa.

Arrays estáticos

La declaración de un array estático dependerá de su ámbito.
· La declaración de un array público se hace en la sección de declaraciones de un módulo
utilizando la sentencia Public.
· La declaración de un array a nivel del módulo o del formulario se hace en la sección de
declaraciones del módulo o del formulario utilizando la sentencia Dim o Private.
· Para declarar un array local a un procedimiento, se utiliza la sentencia Dim, Private o Static
dentro del propio procedimiento.
A continuación se presentan algunos ejemplos:
Dim vector(19) As Double
Este ejemplo declara un array de una dimensión, llamado vector, con veinte elementos,
vector(0), vector(1), ... , vector(19), cada uno de los cuales permite almacenar un Double. Salvo que
se indique otra cosa, los índices se empiezan a contar en cero.
Dim matriz(3, 1 To 6) As Integer
Este ejemplo declara un array de dos dimensiones, llamado matriz, con 4x6 elementos,
matriz(0,1), ... matriz(3,6), de tipo entero.
Public cadena(1 To 12) As String
El ejemplo anterior declara un array de una dimensión, cadena, con doce elementos,
caract(1), ... , caract(12), cada uno de los cuáles permite almacenar una cadena de caracteres.
La declaración de los arrays estáticos es bastante cómoda. Se declaran una vez. Sin embargo
tienen el inconveniente que en la mayoría de los casos están sobredimensionados y utilizan más
memoria de la que realmente necesitan. Esto implica que se está malgastando memoria. Para
solucionar este problema se utilizan los arrays dinámicos.

Arrays dinámicos

El espacio necesario para un array estático se asigna al iniciarse el programa y permanece fijo
durante su ejecución. El espacio para un array dinámico se asigna durante la ejecución del programa. Un array dinámico, puede ser redimensionado en cualquier momento de la ejecución. La
forma mejor de redimensionar los arrays es mediante variables que contienen los valores adecuados.
Para crear un array dinámico primero hay que declararlo como si fuera una array estático, pero
sin darle dimensión. Es decir, se deja la lista -entre paréntesis- vacía sin ponerle ningún número.
Esto se hace con la sentencia Public si se quiere que sea global, con Dim o Private si se quiere a
nivel de módulo o con Static, Dim o Private si se quiere que sea local.
Para asignar el número actual de elementos del array se utiliza la sentencia ReDim. La
sentencia ReDim puede aparecer solamente en un procedimiento y permite cambiar el número de
elementos del array y sus límites inferior y superior, pero no el número de dimensiones. Esto quiere
decir que, por ejemplo, no se puede trasformar un vector en una matriz.
A continuación se presenta un ejemplo de cómo se declaran arrays dinámicos en Visual Basic.
Si se declara el array Matriz a nivel del formulario,
Dim Matriz( ) As Integer
y más tarde, un procedimiento Calculo puede asignar espacio para el array, como se indica a
continuación:
Sub Calculo( )
...
ReDim Matriz(F, C)
...
End Sub
Cada vez que se ejecuta la sentencia ReDim, todos los valores almacenados en el array se
pierden (si son Variant se ponen a Empty; si son numéricos a cero y si son cadenas de caracteres a
la cadena vacía). Cuando interese cambiar el tamaño del array conservando los valores del array,
hay que ejecutar ReDim con la palabra clave Preserve. Por ejemplo, supóngase un array A de dos
dimensiones. La sentencia,
ReDim Preserve A(D1, UBound(A, 2) + 2)
incrementa el tamaño del array en dos columnas más. Cuando se utiliza la palabra Preserve no
puede cambiarse el índice inferior del array (sí el superior). La función UBound utilizada en este
ejemplo es una función que devuelve el valor más alto de la segunda dimensión de la matriz (ver el
Help para más información).

ESTRUCTURAS: SENTENCIA TYPE

Una estructura (según la nomenclatura típica del lenguaje C) es un nuevo tipo de datos, un tipo
definido por el usuario, que puede ser manipulado de la misma forma que los tipos predefinidos
(Int, Double, String, ...). Una estructura puede definirse como una colección o agrupación de datos
de diferentes tipos evidentemente relacionados entre sí.
Para crear una estructura con Visual Basic 6.0 hay que utilizar la sentencia Type ... End Type.
Esta sentencia solamente puede aparecer en la sección General o de declaraciones de un módulo.
Pueden crearse como Public o como Private en un módulo estándar o de clase y sólo como Private
en un formulario. Dim equivale a Public. Véase el siguiente ejemplo,
Public Type Alumno
Nombre As String
Direccion As String *40
Telefono As Long
DNI As Long
End Type
Este ejemplo declara un tipo de datos denominado Alumno que consta de cuatro miembros o
campos, denominados Nombre, Direccion, Telefono y DNI.
Una vez definido un nuevo tipo de datos, en un módulo estándar o de clase se pueden declarar
variables Public o Private de ese tipo (en un formulario sólo Private), como por ejemplo:
Public Mikel as Alumno
Para referirse a un determinado miembro de una estructura se utiliza la notación
variable.miembro. Por ejemplo,
Mikel.DNI = 34103315
A su vez, un miembro de una estructura puede ser otra estructura, es decir un tipo definido por
el usuario. Por ejemplo,
Type Fecha
Dia As Integer
Mes As Integer
Anio As Integer
End Type
Type Alumno
Alta As Fecha
Nombre As String
Direccion As String * 40
Telefono AS Long
DNI As Long
End Type
Dentro de una estructura puede haber arrays tanto estáticos como dinámicos.
En Visual Basic 6.0 se pueden definir arrays de estructuras. La declaración de un array de
estructuras se hará con la palabra Public, Private o Static, dependiendo de su ámbito. La forma de
hacerlo es la siguiente:
Public grupoA (1 To 100) As Alumno
Private grupoB (1 To 100) As Alumno
Static grupoC (1 To 100) As Alumno
En Visual Basic 6.0, a la hora de declarar arrays de estructuras, sucede lo mismo que al
declarar arrays de cualquier tipo de variables. Con GrupoA(1 To 100), se crea un vector de
estructuras de 100 elementos de tipo Alumno (grupoA(1), grupoA(2), ..., grupoA(100)). Con
grupoB(100), se crearía un vector de estructuras de 101 elementos (grupoB(0), grupoB(1), ...
grupoB(100)).
Es posible asignar una estructura a otra del mismo tipo. En este caso se realiza una copia
miembro a miembro. Véase el siguiente ejemplo:
GrupoA(1) = delegado
Las estructuras pueden ser también argumentos en las llamadas a funciones y procedimientos
Sub. Siempre son pasados por referencia, lo cual implica que pueden ser modificados dentro del
procedimiento y esas modificaciones permenecen en el entorno de llamada al procedimiento. En el
caso de las funciones, las estructuras pueden ser también valores de retorno.


No hay comentarios.:

Publicar un comentario