Академический Документы
Профессиональный Документы
Культура Документы
Matrices (II)
En la entrega anterior, se hacía una introducción a cómo podíamos almacenar información en
una serie de vectores o matrices, pero la vida real nos hace comprender que no siempre esta
introducción es fructífera.
Redimensión
El estudio de las matrices entra en las primeras asignaturas de la carrera de informática y, tras
realizar miles y miles de ejercicios, el alumno sabe trabajar de mil maneras con los arrays, pero
siempre de un modo similar al siguiente (al igual que hicimos con la primera entrega):
Option Explicit
Option Base 0
Sub Ejemplo()
Dim Tabla(MAX_ELEMENTOS) As String
' ... Resto del código
End Sub
Eso sí, cuando entramos en el “mundo real”, lo primero que necesitamos es disponer de más
elementos de una manera dinámica, es decir, en tiempo de ejecución de la aplicación.
Dicho de otra manera, es más que probable que no sepamos de antemano el número de
elementos que tenemos que almacenar en un array.
Option Explicit
Option Base 0
Sub Ejemplo()
Dim i As Integer
Call ImprimeArray(Tabla())
End Sub
Cualquiera que vea el código anterior puede pensar ¿qué estamos ganando, en vez de usar un
línea para dimensionar un array, ahora estamos usando dos?. La respuesta puede quedar más
clara si añadimos un poco de código adicional al ejemplo anterior, de tal manera que exista una
segunda “redimensión”.
Option Explicit
Option Base 0
Sub Ejemplo()
Dim i As Integer
Call ImprimeArray(Tabla())
End Sub
Matrices multidimensionales
Aunque hasta el momento siempre se ha hablado de una matriz como un vector de datos,
debemos tener en cuenta que no siempre tenemos que limitarnos a esto, puesto que podemos
hacer que un array tenga, por ejemplo, dos dimensiones, al igual que una hoja de cálculo.
Así, si por ejemplo tuviésemos la necesidad de almacenar las notas de 10 alumnos de, digamos
tres exámenes, utilizaríamos la instrucción siguiente:
Dim notas(9, 2)
Con esta instrucción habremos conseguido crear un espacio en memoria similar al de la figura:
0 1 2
0
1
2
3
4
5
6
7
8
9
Y un ejemplo de cómo utilizar este tipo de matrices sería algo así como:
Option Explicit
Option Base 0
Dim notas(9, 2)
Sub Main()
Dim alumno As Integer
For alumno = 0 To 9
notas(alumno, 0) = Int(Rnd() * 10)
notas(alumno, 1) = Int(Rnd() * 10)
notas(alumno, 2) = Int(Rnd() * 10)
Next alumno
End Sub
A partir de este punto, trabajar con matrices se convierte en una tarea más o menos repetitiva
(no pensemos que monótona, que las matrices tienen muchas sorpresas) en la que la velocidad
y el ahorro de memoria tienen un gran peso.
¿Qué ocurre si, además de las notas, quiero almacenar el nombre del alumno?
¿Qué ocurre si, por ejemplo, quisiese ordenar los datos de un array?.