Codificación aprenderaprogramar.com: CU00312A
ARRAYS (ARREGLOS) MULTIDIMENSIONALES VISUAL BASIC
Tal y como explicamos en su momento, será posible crear arrays con más de una dimensión, pasando de la idea de lista, vector o matriz de una sola fila a la idea de matriz de m x n elementos, estructuras tridimensionales, tetradimensionales... La sintaxis será:
Dim [Nombre del array]([dimensión1, dimensión2, ...]) As [Tipo de variable]
|
Si no se declara el tipo de variable el array será tipo Variant u Object (según la versión de Visual Basic que utilicemos) por defecto. Conviene tener cuidado con esto y seguir las mismas pautas que hemos indicado para las variables. La declaración de una matriz tradicional de m x n elementos podría ser:
Dim A(3, 2) As Integer
|
El número de elementos declarados se calcula teniendo en cuenta que la numeración de los índices empieza en cero, aunque ya hemos comentado que en algunas versiones existe una cláusula denominada Option Base que permite fijar como primer índice de los arrays el uno. En las versiones más recientes de Visual Basic (o con Option Base fijado en cero) tendremos una fila cero y una columna cero para la matriz declarada, con lo que el número de elementos será de 4 x 3 = 12. Decimos que hay 4 filas que son 0, 1, 2, 3 y tres columnas que son 0, 1, y 2. Si la versión de Visual Basic lo permite y fijamos Option Base en uno, la matriz será de 3 filas (1, 2 y 3) y dos columnas (1 y 2) siendo por tanto el número de elementos 3 x 2 = 6
Vamos a definir una matriz, array o arreglo de dos dimensiones a modo de ejemplo: queremos almacenar en una matriz el número de alumnos con que cuenta una academia ordenados en función del nivel y del idioma que se estudia. Tendremos 3 filas que representarán Nivel básico, medio o de perfeccionamiento y 4 columnas que representarán los idiomas (1 = Inglés, 2 = Francés, 3 = Alemán y 4 = Ruso). La declaración de dicha matriz sería:
Dim Alumnosfxniveleidioma(3, 4)
|
Alumnosfxniveleidioma(1, 1) = 7 Alumnosfxniveleidioma(1, 2) = 14 Alumnosfxniveleidioma(1, 3) = 8 Alumnosfxniveleidioma(1, 4) = 3 Alumnosfxniveleidioma(2, 1) = 6 Alumnosfxniveleidioma(2, 2) = 19 Alumnosfxniveleidioma(2, 3) = 7 Alumnosfxniveleidioma(2, 4) = 2 Alumnosfxniveleidioma(3, 1) = 3 Alumnosfxniveleidioma(3, 2) = 13 Alumnosfxniveleidioma(3, 3) = 4 Alumnosfxniveleidioma(3, 4) = 1 |
Los elementos de índice cero no los estamos utilizando, aunque podríamos hacerlo si quisiéramos.
La representación gráfica que podríamos asociar a esta asignación de datos sería esta matriz:
La organización de la información en matrices nos generará importantes ventajas a la hora del tratamiento de datos en nuestros programas.
Para terminar en cuanto a multidimensionalidad, veamos casos de declaraciones con más de dos dimensiones. Para ello tomaremos como ejemplo el conteo del número de coches que pasan por una vía en un periodo de tiempo. La forma de declarar esos array sería la siguiente (hemos considerado que usamos el tipo de datos Integer para almacenar la información):
Duración del conteo
|
Tipo de array
|
Declaración con Visual Basic
(Nc es Númerodecoches)
|
Un día
|
Array de un localizador (hora)
|
Dim Nc(24) As Integer
|
Varios días
|
Array de dos localizadores (hora y día)
|
Dim Nc(24, 31) As Integer
|
Varios meses
|
Array de tres localizadores (hora, día y mes)
|
Dim Nc(24, 31, 12) As Integer
|
Varios años
|
Array de cuatro localizadores (hora, día, mes y año)
|
Dim Nc(24, 31, 12, 2999) As Integer
|
Varios siglos
|
Array de cinco localizadores (hora, día, mes, año y siglo)
|
Dim Nc(24, 31, 12, 2999, 21) As Integer
|
Nota: en este ejemplo estamos considerando que no vamos a usar los índices cero de los arrays, pero podríamos hacerlo, de hecho es habitual.
Veamos lo que sería un ejemplo de programa con array multidimensional, en este caso usando un tipo String.
Para versiones de VB menos recientes: Para versiones de VB más recientes:
Rem Curso Visual Basic aprenderaprogramar.com Option Explicit Dim Nombrealumno(5, 25) As String Private Sub Form_Load() Nombrealumno(3, 24) = "Pedro Hernández González" MsgBox ("El alumno número 24 del curso tercero se llama " & Nombrealumno(3, 24)) End Sub |
REM Curso Visual Basic aprenderaprogramar.com Option Explicit On Public Class Form1 Dim Nombrealumno(5, 25) As String Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Nombrealumno(3, 24) = "Pedro Hernández González" MsgBox("El alumno número 24 del curso tercero se llama " & Nombrealumno(3, 24)) End Sub End Class |
Ten en cuenta que puede haber pequeñas diferencias en cuanto a la sintaxis a emplear según la versión de Visual Basic que utilices. El resultado del programa es que se muestra el mensaje “El alumno número 24 del curso tercero se llama Pedro Hernández González”.