Está en la página 1de 33

Tipos de Datos

ARREGLOS (MATRICES)
EN VB.NET 2010
Adaptación de la presentación de cátedra
por Prof. Hugo Hernández
Septiembre 2016
Tipos de Datos en VB.Net
Byte
Enteros Integer
Long
•Numéricos
Single
Reales
Double

•Básicos o
Primitivos STRING
•Alfanuméricos
CHAR

•Lógico  BOOLEAN

Contenido heterogéneo Estructuras  Structure

•Compuestos Estáticos
Contenido homogéneo Matrices
Dinámicos
Clases

•Objetos
Tipo de datos: Arreglos

 La estructura tipo Arreglos (Matrices) ,es un tipo de dato compuesto


(Almacena más de un dato a la vez dentro de una variable), de
contenido tipo homogéneo, capaz de almacenar un conjunto finito
de valores, que quedan almacenados en posiciones de memoria
consecutiva, los cuales se accede a cada uno de sus elemento a
través de su índices.
Tipo de datos: Arreglos

 Los tipo de datos arreglo se clasifican según la


cantidad de índices necesarios para manipular su
contenido:
1. Unidimensionales: son los que utilizan un único
índice para indicar un elemento. También
conocido como Vectores
2. Bidimensionales: son los que utilizan dos
índices para indicar un elemento. Conocidos
como una Matriz
3. Multidimensionales: son los que utilizan tres o
más índices. Es decir, de R3 en adelante.
Ej. de Estructuras
Tipo Matrices
Arreglo Unidimensional o Arreglo Bidimensional o
Vector A Matriz B
Índices Contenidos Índices (0) (1) (2) (3)
(0) “perro” (0) 8 0 -1 2
(1) “loro” (1) 7 16 20 14
(2) “canario” (2) 97 -65 14 24
(3) “gato”
(4) “atun”

Se observa que los valores están acompañados de un número encerrado entre


paréntesis; este número representa el valor del índice o posición del elemento en
el arreglo. Por supuesto, un vector requiere de un solo índice, mientras que la
matriz, requiere de dos índices: uno para las filas y otros para las columnas, para
ubicar la posición de un dato en el arreglo.
Declaración de Arreglos
en VB.Net
 Declaración Estática: es un arreglo donde la cantidad de elemento reservados en
memoria, parten de un tamaño predeterminado.
Dim nombre(indexMax1, indexMax2, … ) As tipo

 Ejemplo:
Dim Vector1 (20) As Integer
Dim Matriz1 (10, 5) As Single
Dim Cubo1 (20, 20, 20) As Char
Para el primer caso se declaró un arreglo unidimensional capaz de
almacenar 21 elementos tipo Integer ubicados desde la posición 0 a la 20.
En el segundo ejemplo se declaró un arreglo bidimensional capaz de
almacenar en memoria una matriz Máximo 11 fila y 6 columnas, donde las
filas tendrán las posiciones del 0 al 10 y las columnas del 0 al 5.
En el último ejemplo se declaró un arreglo multidimensional
(Tridimensional), capaz de almacenar 21 posiciones en los ejes X, Y y Z,
entre las posiciones 0 al 20 cada uno de ellos.
Declaración de Arreglos
en VB.Net
 Declaración Dinámica: es un arreglo donde la cantidad de espacio reservado en memoria
se especifica en ejecución. Y este puede ser establecido o redefinido en cualquier
momento, empleando el comando REDIM.
Dim nombre ( ) As tipo

 Ejemplo:
Dim Vector1 ( ) As integer ‘ Unidimensional
Dim Matriz1 ( , ) As Single ‘ bidimensional
Dim Cubo1 ( , , ) As char ‘ Multidimensional
‘ Asignación del tamaño y todos arrancan desde la posición 0

ReDim vector1(20) ‘ Posee 21 elementos


ReDim matriz1(10 , 5) ‘ Tiene 11 filas y 6 Columnas
ReDim cubo1(20, 20, 20) ‘ Tiene 21 elementos por dimensión
Declaración de Arreglos
en VB.Net
Declaración Dinámica (Continuación)
Cabe destacar que el comando REDIM, una vez empleado una primera vez, sólo permite
redimensionar el tamaño del arreglo en su índice más alto, es decir, el más ubicado a la
derecha de la declaración.
Para los casos mostrados anteriormente:
ReDim vector1(20)
ReDim matriz1(10 , 5)
Si más adelante se requiere modificar su tamaño, en el caso del Vector se puede establecer sin
problemas
ReDim Vector1( 25 ) ‘ Aumento del tamaño en 5 elementos
Pero para el caso de la matriz sólo se puede modificar el tamaño de las columnas que posea
ReDim Matriz1( 10, 3 ) ‘ Disminución de 2 columnas
NOTA: En ambos casos, de poseer datos previamente almacenados en
estos arreglos, todos estos datos serán borrados
Declaración de Arreglos
en VB.Net
Declaración Dinámica (Continuación)

Por otro lado, si el arreglo al redimensionarlo se encuentra con datos ya almacenados, dichos
datos se perderían, para evitar ésta perdida de información, se cuenta en el comando adicional
PRESERVE, con él los datos previos almacenados no se pierden al cambiar su tamaño.

Realizando el redimensionamiento sin perdida de datos


ReDim Preserve Vector1( 25 )
ReDim Preserve Matriz1( 10, 3 ) ‘ Disminución de 2 columnas

Pero para el caso de la matriz por ser reducido el tamaño de las columnas que este posea, al
variable Matriz1 no perderá los datos ubicados en las columnas 0, 1 y 2, pero si los que se
encontraban guardados en las columnas 4 y 5
Acceso a las posiciones del arreglo
Arreglo Unidimensional o Arreglo Bidimensional o
Vector A Matriz B
Índices Contenidos Índices (0) (1) (2) (3)
(0) “perro” (0) 8 0 -1 2
(1) “loro” (1) 7 16 20 14
(2) “canario” (2) 97 -65 14 24
(3) “gato”
(4) “atún”

Para tener acceso a un valor almacenado en un arreglo se debe escribir el nombre


de la variable (Identificador), seguido del índice encerrado entre paréntesis,
por ejemplo:
A(1) = “caballo” ‘ Asignar en la posición 1 del vector A el valor “caballo”
A(m) = “anguila” ‘ Asignar en la posición m del vector A el valor “anguila”
Suma = B(1,0) + B(2,1) ‘ Asigna a Suma el resultado de la operación:
‘ 8 + (-65) = -57
B(f, c) = 2 * 15 ‘ Asignar en la posición en fila f y columna c de la matriz B
‘ el valor 30
Cantidad de contenidos
reservados y Tamaño del arreglo
El lenguaje VB.Net exige que se defina primero todo aquello que vaya a ser
usado, por esta razón, cuando trabajamos con los arreglos de manera
estática, existen dos conceptos asociados que son:
 La cantidad de contenidos reservados en la definición del tipo arreglo,
por ejemplo,
Dim A (6) As Single
‘ Define una variable capaz de almacenar 7 valores de tipo Single
A
(0) ?
(1) ?
(2) ?
(3) ?
(4) ?
(5) ?
(6) ?
Cantidad de contenidos
reservados y Tamaño del arreglo
 Los datos almacenados en el arreglo serán guardados a partir del primer
elemento, sin que necesariamente se utilicen todas las posiciones que
este posea, a la última posición utilizada se le conoce como el Tamaño
del arreglo.
 Por lo general se utiliza una o más variables adicionales de tipo entero
para almacenar el tamaño de un arreglo.
Ej. Para el arreglo A definido anteriormente, si solo se requiere grabar
cuatro datos, estos datos quedarían almacenados de la siguiente forma:
A N
(0) -2.36 4
(1) 4.56
(2) 0.28
(3) -8.25
(4) ?
(5) ?
(6) ?
Cantidad de contenidos reservados y
Tamaño del arreglo (Continuación)
Para el caso de los arreglos de ser trabajado de manera dinámicos el
contenido reservado en memoria es igual al tamaño que va poseer él
arreglo, ya que este se redimensiona a su tamaño.
Ej.
Dim A ( ) As Single
Dim N As Integer = 4
ReDim A(N - 1)
Adicionalmente, los arreglos disponen
A N de la propiedad Length, que guarda el
(0) -2.36 4 número de elementos almacenados en
(1) 4.56 el arreglo. Esto hace que no sea
(2) 0.28 necesario guardar su tamaño en una
variable aparte.
(3) -8.25
N = A.Length ‘ Retorna 4

Por otro lado, si lo que se quiere conocer es el tope máximo alcanzado en el


arreglo se cuenta con el procedimiento UBOUND.
Dim Tope As Integer = UBound(A ) ‘ Retorna 3
Cantidad de contenidos reservados y
Tamaño del arreglo (Continuación)
La Propiedad LENGTH al usarlo en los vectores nos dan todas los
elementos almacenados, pero para el caso de una matriz nos establece el
total de elementos guardados y no de una dimensión en particular.
Ej.
Dim M ( ) As Single M (0) (1) (2) (3)
ReDim M(2, 3) (0) -2.36 1.00 -3.00 1.00
Dim N As Integer (1) 4.56 2.35 2.98 5.04
(2) 0.28 0.00 2.50 0.12

N = M.Length ‘ Retorna 12 (3 filas X 4 Columnas)

Si lo que se desea es conocer el tope máximo alcanzado en las filas o


columnas de la matriz, se dispone del método GETUPPERBOUND, este
método requiere como parámetro establecer la dimensión a determinar
su tope, Siendo, 0 la fila o 1 si es la columna
Dim topeFila As Integer = M.GetUpperBound(0) ‘ Retorna 2
Dim topeColumna As Integer = M.GetUpperBound(1) ‘ Retorna 3
¿Cuántos contenidos se deben reservar en la
definición de un Arreglo en forma Estática?
 La respuesta esta directamente asociada al problema que
se desea resolver. Si el problema es almacenar dentro de un
vector las notas del primer parcial de los alumnos de
computación II de una sección cualquiera, se debe definir
una cantidad suficiente de elementos capaces de
almacenar dichos datos. Se descubre durante el análisis del
problema que las secciones tienen un máximo de 45
estudiantes, por lo que se definirá un tipo vector capaz de
almacenar máximo 45 valores numéricos (Entero o Real).
 Ahora bien, no todas las secciones tienen 45 estudiantes;
algunas tienen 30, otras 43, otras 25, etc. A esta cantidad de
estudiantes es la que se conoce como el TAMAÑO del
arreglo. El tamaño de un arreglo es importante ya que
establece con precisión que área del arreglo tienen valores
válidos para el programa.
¿Para qué me sirven los arreglos?
 Las variables tipo arreglo se utilizan cuando se requiere
manipular la misma información una cierta cantidad de
veces, a fin de alcanzar un objetivo. Un ejemplo clásico de
la necesidad de arreglos en la programación de, es el
cálculo de la desviación estándar de un conjunto finito N de
números. Siendo requerido previamente el calculo del
promedio para lograr obtener el valor de la desviación .

 X 
n
2
i X
 i 1
n 1
¿Para qué me sirven los arreglos?

 Es una condición indispensable que la información


que se utilice en el calculo del promedio y es de la
desviación en ambos procesos sea la misma.
 Una solución es almacenar toda la información
dentro de un vector, del cual se puede obtener sus
valores guardados todas las veces que sea
necesario, garantizando que la información
almacenada en él no se altere durante el proceso
de obtención de los datos contenidos en él.
Recorrido de un Arreglo
Lo primero que se debe conocer es como obtener los valores
almacenados en un arreglo en forma secuencial. A esta operación
se le conoce con el nombre de recorrido del arreglo.
El recorrido de un arreglo puede tener los siguientes fines:
1. Entrada de datos: lectura de datos por teclado o por archivo.
2. Salida de datos: impresión en pantalla o en archivo de los
datos almacenados en un arreglo.
3. Y otros, tales como: calculo de promedio, calculo de
máximos y mínimos, búsqueda de datos, ordenamiento, etc.
Dependiendo del número de dimensiones que posee el arreglo,
se realizará el recorrido de éste empleando la misma cantidad de
ciclos, para pasar por cada posición que se desee acceder.
Recorrido de un Arreglo (Continuación)

Es decir, para un vector, se requiere un ciclo que


sea el encargado de pasar por todas sus posiciones
a utilizar.
De ser una matriz se requerirá de Dos ciclos si hay
que desplazarse tanto por las filas de la matriz
como sus columnas, ahora si el desplazamiento es
por solo una de sus dimensiones, se utilizará un
ciclo que pase por las posiciones de la dimensión
opuesta de está.
Recorrido de un Arreglo (Continuación)

Normalmente al recorrer un arreglo, se conoce o la


cantidad de elementos a desplazarse o su rango de
posiciones a procesar. Esto hace que comúnmente el
ciclo a implementar ser FOR y el contador del ciclo es
el que indica, al arreglo que posición es la que se esta
procesando en ese momento.
En caso de no conocerse cuantos datos o posiciones
se tienen que procesar, se utilizará el ciclo WHILE o
DO – LOOP y hay que implementar el contador que
indique la posición que se esté procesando en ese
momento.
Operaciones con Arreglo

Antes que todo hay que entender que al definir un


arreglo, el identificador de esta variable, sin
importar el tipo de dato que tendrá el conjunto de
valores a almacenar en él, guarda realmente una
posición de memoria.
Donde la posición de memoria que guarda es
donde se encuentra el primer elemento del
arreglo.
Operaciones con Arreglo (Continuación)
Si se definen los siguientes arreglos
Dim A (6) As Single
Dim B (4) As Single
Dim Na As Integer = 4
Dim Nb As Integer = 0
A B
(0) -2.36
(1) 4.56
(0) ? En este momento ambos
(1) ?
(2) 0.28 (2) ?
arreglos se encuentran
(3) -8.25 (3) ? utilizando posiciones de
(4) ?
memoria diferentes
(5) ?
(6) ?
Operaciones con Arreglo (Continuación)

La única operación permitida con los arreglos es la


operación de asignación.
Entendiendo que esta operación lo que hace es que ambos
arreglos pasaran a ocupar la misma posición de memoria.
Ej. si se realiza la siguiente operación
A, B B=A
(0) -2.36
Nb = Na
(1) 4.56
(2) 0.28 Luego de la operación Tanto el
(3) -8.25 vector A como B ocupan el mismo
(4) ? lugar de memoria, lo que implica
(5) ?
(6) ?
que modificar los datos de uno de
ellos, dicho cambio afecta al otro.
Operaciones con Arreglo (Continuación)
Es decir, si se establece que:
B( 3) = 17,25
A, B
(0) -2.36
Y luego se manda a imprimir el
(1) 4.56 valor de A(3), nos encontraremos
(2) 0.28 que saldrá el valor que se estableció
(3) 17.25
(4) ?
en la asignación de B
(5) ? Console.WriteLine(“Valor = ” & A(3))
(6) ?
Salida mostrada por pantalla:
Valor=17.25
Operaciones con Arreglo (Continuación)

Esto significa que de querer crear una copia de un


arreglo en otro arreglo, se debe asignar cada
posición del arreglo a copiar con el valor
almacenado en el arreglo original
‘ Código a seguir para crear una copia de un vector
Nb = Na ‘ No se requiere ya que tendrán el mismo tamaño
For I=0 To Na – 1 NOTA:
B(I) = A(I) Si El tamaño definido del arreglo B
es lo suficiente grande para albergar
Next los datos de A, el código no
presentará ningún problema
Arreglo como parámetros de un
subprograma
Si se desea crear un Subprograma capaz de
determinar el promedio de los valores almacenados
en un vector de elementos tipo Single. Dicho
subprograma podría ser desarrollado tanto como una
función o como un procedimiento, ya tendría como
entrada, el arreglo con su tamaño o tope y su salida es
el promedio como tal.
Si lo desarrollamos como una función, tendrá dos
parámetros del tipo por valor (El arreglo y su tamaño).
Cuando se define un arreglo como parámetro formal
de un subprograma, este se realiza de la misma
manera que con variables simple o tipo estructura
Arreglo como parámetros de un subprograma
(Continuación)

Es decir, se indica la manera de trabajar el


parámetro por valor o por referencia, pero al
momento de especificar el hecho que es un arreglo
se establece de la misma manera como se definen
de manera dinámica.
Ej. Pasando como parámetro el Nro de
elementos del arreglo
‘ Cabecera del subprograma a diseñar
Function Promedio(ByVal V() As Single, ByVal N As Integer) As Single
Arreglo como parámetros de un subprograma
(Continuación)
Para determinar un promedio se conoce que hay que
sumar todos los datos y dividirlo entre el Nro de datos
sumados, ya que los datos están almacenados en el
arreglo, se requiere es recorrer dicho arreglo.
Function Promedio(ByVal V() As Single, ByVal N As Integer) As Single
Dim Suma As Single = 0
For I = 0 to N - 1
Suma += V( I )
Next
Promedio = Suma / N
End Function
Arreglo como parámetros de un subprograma
(Continuación)

Ahora al momento de necesitar invocar el


subprograma Promedio, su llamado se establecerá
de la siguiente forma:
Dim Vector(19) As Single
Dim N As Integer
Dim Prom As Single

NOTA:
Un arreglo como parámetro
Prom = Promedio(Vector, N ) actual se establece solo
Variable tipo Vector colocando el identificador de
de Single dicha arreglo a implementar
Arreglo como parámetros de un subprograma
(Continuación)

NOTA:
En el paso de parámetros de un arreglo, hay que
tener en cuenta que al establecer éste por valor o
por referencia, lo que se está estableciendo es la
posibilidad de cambiar o no la dirección de
memoria que esta apuntando el arreglo y no el
contenido que posea como tal.
Arreglo como parámetros de un subprograma
(Continuación)

Es decir, si se construye un subprograma que lee


del archivo de datos “DATOS.TXT”, la información
de una matriz de elementos tipo Single y se
trabaja con cualquiera de las dos cabeceras
siguientes.
Sub Leer1(ByRef M(,) As Single, ByRef Nf As Integer , ByRef Nc As Integer)
Sub Leer2(ByVal M(,) As Single, ByRef Nf As Integer , ByRef Nc As Integer)

En ambos casos, la matriz se llena y sus valores


salen en el parámetro actual implementado en su
llamado.
Arreglo como parámetros de un subprograma
(Continuación)
Leer1(Matriz, Nf , Nc)
ó
Leer2(Matriz, Nf , Nc)

Sin embargo, seguiremos definiendo el parámetro


como por referencia para especificar que se
quieren modificar los datos internos del arreglo.
Pero siempre teniendo en cuanta que de modificar
algún valor del arreglo así de defina por Valor,
dicho cambio sale en el parámetro actual
implementado.
Arreglo como parámetros de un subprograma
(Continuación)
‘ Código completo del subprograma de lectura
Sub Leer1(ByRef M(,) As Single, ByRef Nf As Integer , ByRef Nc As Integer)
FileOpen(1, “Datos.Txt”, OpenMode.Input)
Input(1, Nf)
Input(1, Nc)
For I = 0 To Nf – 1
For J = 0 To Nc – 1
Input(1, M(I, J))
Next
Next
FileClose(1)
End Sub