5. Contribution, implications and future research
5.3 Reflections and future research
Se conoce como arreglos escalonados (jagged arrays) a un arreglo que almacena arreglos. La sintaxis para su definición sería la siguiente.
DimArreglo()() AsTipoDato
Donde Arreglo es el identificador del arreglo; su denominación sigue las mismas reglas que las variables. Dependiendo el número de arreglos que se desee incluir, se deberán agregar pares de paréntesis después del nombre de variable. TipoDato es el tipo de dato que tienen los elementos en los arreglos. Por ejemplo:
Dim Numeros()() As Byte
En este caso se tiene un arreglo que almacenará dos arreglos, donde los elementos son de tipo Byte.
También es posible asignar valores al momento de declarar un arreglo. En ese caso, los va- lores son definiciones de arreglos.
DimArreglo()()AsTipoDato = {Arreglo1,Arreglo2}
Donde Arreglo es el nombre del arreglo, TipoDato es el tipo de dato de los elementos, y
Arreglo1 y Arreglo2 son arreglos con elementos que son TipoDato; los arreglos deberán es-
tar separados por comas. Por ejemplo:
Dim Numeros()() As Byte = { Byte(){10,15,12,11}, _ Byte() {40,50,60} }
En este caso,Numeros(0)(3)tendrá el valor de 11. Estaríamos extrayendo, del arreglo 0, el elemento 3. El primer subíndice indica el número de arreglo del que se trata, mientras que el segundo indica el o los subíndices del elemento que queremos extraer. Un arreglo escalonado puede contener arreglos unidimensionales o multidimensionales.
Los arreglos escalonados no son lo mismo que los arreglos multidimensionales; estos últi- mos pueden llegar a consumir cantidades muy grandes de memoria. Por ejemplo, si se quiere almacenar en un arreglo el número de identificación de 1000 empleados y 5 núme- ros de categorías de empleados, un arreglo multidimensional ocuparía 1000 5 posicio- nes de memoria, es decir, 5000; un arreglo escalonado, por el contrario, requeriría sólo 1000 5, es decir, 1005. Si el arreglo fuera de datos Long(8 bytes), la diferencia en con- sumo de memoria sería de 31,960, que podría implicar un ahorro muy importante. Algo que es importante tomar en cuenta es que los arreglos escalonados no forman parte de CLS, por lo que trabajarán adecuadamente sólo en implementaciones Microsoft, y no en otras plataformas que implementen considerando CLS como base.
En este ejercicio se comprobará la forma en que funcionan los alcances de variables en Vi- sual Basic y la forma en que podemos aprovechar su manejo para preservar valores en me- moria con eficiencia.
1. Abra la solución Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios(ar- chivo de extensión sln).
2. Agregue a su solución un proyecto Windows – Console Application, llamado Arreglos. 3. Edite el programa de tal forma que aparezca como sigue:
4
Ejercicio 4.4
Comprobación del uso de arreglos unidimensionales, multidimensionales y escalonados
1 Option Explicit On 2 Option Strict On 3 4 Module Module1 5 6 Sub Main() 7 Dim i As Integer 8 9 Console.WriteLine(“Arreglo unidimensional 1:”)
9 Dim Uni1() As Integer = {22, 49, 20, 40}
10 For Each i In Uni1
11 Console.WriteLine(i)
12 Next
13 Console.WriteLine(“Arreglo unidimensional 2:”)
14 Dim Uni2() As Integer = {55, 66, 77}
15
16 For Each i In Uni2
17 Console.WriteLine(i)
18 Next
19
20 Console.WriteLine(“Arreglo multidimensional:”)
21 Dim Multi(,) As Integer = {{92, 49}, {44, 20}, {10, 48}}
22 Console.WriteLine( _ 23 String.Format(“Fila 0: {0},{1} “, Multi(0, 0), Multi(0, 1))) 24 Console.WriteLine( _ 25 String.Format(“Fila 1: {0},{1} “, Multi(1, 0), Multi(1, 1))) 26 Console.WriteLine( _ 27 String.Format(“Fila 2: {0},{1} “, Multi(2, 0), Multi(2, 1))) 28 29 Console.WriteLine(“Arreglo escalonado:”) 30 Console.WriteLine(“Arreglo 1, posición 2”)
31 Dim Esca()() As Integer = {Uni1, Uni2}
32 Console.WriteLine(Esca(1)(2)) 33 34 Console.Write(“Presione INTRO”) 35 Console.ReadLine() 36 End Sub 37 38 End Module
4
Ejecución guiada deArreglos – Module1.vb
4. Construya la solución (Ctrl-Mayús-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realizado en la solución (Ctrl-Mayús-S). Inicie la depuración para comprobar el comportamiento de su progra- ma (oprima F5).
5. En la línea 10 se declara un arreglo unidimensional, llamado Uni1, y al mismo tiempo que se declara se le asignan valores a las posiciones de memoria del arreglo. Se trata de un arreglo de cuatro posiciones de memoria, por lo que sus subíndices irán de 0 a 3.
22 49 20 40
En la línea 11 se inicia una estructura For Eachque permitirá hacer una lectura de los valores almacenados en el arreglo. La estructura utilizará la variablei, que es de tipo
Integer, para trabajar cada uno de los elementos del arreglo Uni1. La estructura For Eachcomenzará una lectura secuencial de todos los elementos, desde el subíndice 0 has- ta el 3; iasumirá el valor del elemento que se esté leyendo en el momento, por lo que trabajar con ies como estar trabajando con el elemento del arreglo. La línea 12 provo- ca que se vea en la consola el contenido de cada una de las posiciones en memoria. La línea 16 declara un arreglo unidimensional de tres posiciones, llamado Uni2, que se- rá utilizado junto con Uni1más adelante. El proceso para el mostrado de contenido se repite con Uni2. Sus valores son los siguientes:
55 66 77
6. En la línea 22 se declara un arreglo multidimensional, llamado Multi, constituido por dos dimensiones. Se asignan valores al momento de la declaración, que nos indican que el arreglo será de dos columnas y tres filas. Vea cómo el número de series de valores de-
termina el número de filas, mientras que el número de elementos de cada serie de valo- res determina el número de columnas:
92 49
44 20
10 48
Las líneas de la 23 a la 28 se encargan de mostrar los valores que componen cada fila. Para ello nos apoyamos de la función String.Format, que hace una sustitución directa de parámetros. Vea cómo funciona:
String.Format(“Primer valor {0} segundo valor {1}”, 10, 20)
generaría como resultado:
“Primer valor 10 segundo valor 20”
Los parámetros se incluyen con base 0, y deberá proporcionarse una serie de valores se- parados por comas después del String que queremos construir. El primer valor de la serie toma la primera posición ({0}), el segundo la segunda ({1}), y así sucesivamente. Los subíndices en los arreglos indican la fila y la columna, considerando una base cero. 7. La línea 32 define un arreglo escalonado, llamado Esca, que almacena los arreglos Uni1
y Uni2:
22 55
49 66
20 77
40
La línea 33 muestra, del segundo arreglo almacenado (subíndice 1), el tercer elemento almacenado (subíndice 2). Entre los primeros paréntesis irá el subíndice del arreglo es- calonado; es decir, permite seleccionar al arreglo a inspeccionar. En los siguientes pa- réntesis se coloca el subíndice (o subíndices) del arreglo seleccionado.
A diferencia de un arreglo multidimensional, en donde todas las filas tienen igual nú- mero de columnas, en un arreglo escalonado la forma y dimensiones dependen de los arreglos almacenados.
Si todo ocurrió como se esperaba, la salida será la siguiente: Arreglo unidimensional 1: 22 49 20 40 Arreglo unidimensional 2: 55 66 77 Arreglo multidimensional: Fila 0: 92,49 Fila 1: 44,20 Fila 2: 10,48 Arreglo escalonado: Arreglo 1, posición 2 77 Presione INTRO
8. Vea el siguiente ejemplo y coloque las referencias que hacen falta.
a) Para utilizar Uni1 49 = Uni1(1)
b) Para utilizar Uni2 55 = _________________________
c) Para utilizar Multi 10 = _________________________
d) Para utilizar Esca 66 = _________________________