You are on page 1of 16

MATRICES EN VISUAL BASIC

23 de
diciembre
de 2013




UNIVERSIDAD TCNICA DE
AMBATO




FACULTAD DE INGENIERA CIVIL Y MECNICA

CARRERA DE INGENIERA MECNICA

PROGRAMACIN

MATRICES EN VISUAL BASIC

Nombre: Santiago Escobar

Semestre: Tercero

Paralelo: A



MATRICES EN VISUAL BASIC
23 de
diciembre
de 2013


Matrices en Visual Basic
Una matriz es un conjunto de valores relacionados lgicamente entre s, como el nmero de
estudiantes de cada curso en una escuela primaria.
Mediante una matriz, puede hacer referencia a estos valores relacionados con el mismo
nombre, y utiliza un nmero que se denomina un ndice o subndice para distinguirlos. Los
valores individuales se llaman elementos de la matriz. Contiguos desde el ndice 0 hasta el
valor de ndice superior.
A diferencia de una matriz, una variable que contiene un nico valor se llama variable
escalar.
En este tema
Elementos de la matriz en una matriz de Simple
Crear una matriz
Declarar una matriz
Almacenar valores en una matriz
Rellenar una matriz con valores iniciales
o Literales de matriz anidados
Itera a travs de una matriz
Matrices como valores devueltos y parmetros
Matrices escalonadas
Matrices de longitud cero
Tamao de una matriz
Tipos de matriz y otros tipos
Colecciones como alternativa a las matrices
Elementos de la matriz en una matriz de Simple
En el ejemplo siguiente se declara una variable de matriz para que contenga el nmero de
estudiantes de cada curso en una escuela primaria.
VB

Dim students(6) As Integer


La matriz students del ejemplo anterior contiene siete elementos. Los ndices de los
elementos van de 0 a 6. Tener esta matriz es ms fcil que declarar siete variables.
MATRICES EN VISUAL BASIC
23 de
diciembre
de 2013

En la siguiente ilustracin se muestra la matriz students. Para cada elemento de la matriz:
El ndice del elemento representa el curso (el ndice 0 representa el jardn de
infancia).
El valor contenido en el elemento representa el nmero de estudiantes en ese curso.
Elementos de la matriz "students"


En el ejemplo siguiente se muestra cmo hacer referencia al primer, segundo y ltimo
elemento de la matriz students.
VB

Dim kindergarten As Integer = students(0)
Dim firstGrade As Integer = students(1)
Dim sixthGrade As Integer = students(6)
MsgBox("Students in kindergarten = " & CStr(kindergarten))
MsgBox("Students in first grade = " & CStr(firstGrade))
MsgBox("Students in sixth grade = " & CStr(sixthGrade))

Puede hacer referencia a la matriz en conjunto utilizando simplemente el nombre de la
variable de la matriz sin ndices.
La matriz students en el ejemplo anterior utiliza un ndice y se unidimensional. Una matriz
que utiliza ms de un ndice o subndice se denomina multidimensional.
Crear una matriz
Puede definir el tamao de una matriz de varias maneras. Puede proporcionar el tamao
cuando se declara la matriz, como se muestra en el ejemplo siguiente.
VB

Dim cargoWeights(10) As Double
MATRICES EN VISUAL BASIC
23 de
diciembre
de 2013

Dim atmospherePressures(2, 2, 4, 10) As Short
Dim inquiriesByYearMonthDay(20)()() As Byte


Tambin puede utilizar una clusula de New para proporcionar el tamao de una matriz
cuando ha creado, como se muestra en el ejemplo siguiente.
VB

cargoWeights = New Double(10) {}
atmospherePressures = New Short(2, 2, 4, 10) {}
inquiriesByYearMonthDay = New Byte(20)()() {}


Si se tiene una matriz existente, se puede volver a definir su tamao utilizando la
instruccin Redim. Puede especificar que la instruccin de Redim debe mantener los
valores que estn en la matriz, o que cree una matriz vaca. En el ejemplo siguiente se
muestran usos diferentes de la instruccin Redim para modificar el tamao de una matriz
existente.
VB

' Assign a new array size and retain the current element values.
ReDim Preserve cargoWeights(20)
' Assign a new array size and retain only the first five element values.
ReDim Preserve cargoWeights(4)
' Assign a new array size and discard all current element values.
ReDim cargoWeights(15)


Declarar una matriz
Una variable de matriz se declara de la misma manera que cualquier otra variable mediante
la instruccin Dim. Sigue el tipo o el nombre de variable con uno o ms pares de parntesis
para indicar que contenga una matriz en lugar de un escalar, que es una variable que
contiene un nico valor.
Despus de declarar la matriz, puede definir su tamao utilizando Instruccin ReDim
(Visual Basic).
El ejemplo siguiente declara una variable de matriz unidimensional agregando un par de
parntesis despus del tipo. El ejemplo tambin se especifica las dimensiones de la matriz
utilizando Instruccin ReDim (Visual Basic).
MATRICES EN VISUAL BASIC
23 de
diciembre
de 2013

VB

' Declare a one-dimensional array.
Dim cargoWeights As Double()

' Dimension the array.
ReDim cargoWeights(15)

El ejemplo siguiente declara una variable de matriz multidimensional agregando un par de
parntesis despus del tipo y colocando comas entre parntesis para separar las
dimensiones. El ejemplo tambin se especifica las dimensiones de la matriz utilizando
Instruccin ReDim (Visual Basic).
VB

' Declare a multidimensional array.
Dim atmospherePressures As Short(,,,)

' Dimension the array.
ReDim atmospherePressures(1, 2, 3, 4)


Para declarar una variable de matriz escalonada, agregue un par de parntesis despus del
nombre de la variable para cada nivel de matriz anidados.
VB

Dim inquiriesByYearMonthDay()()() As Byte

Los ejemplos anteriores se declaran variables de matriz pero no se les asignan matrices.
Debe crear una matriz, inicializarla y asignarla a la variable.
Almacenar valores en una matriz
Se puede tener acceso a cada ubicacin en una matriz utilizando un ndice de tipo Integer.
Se pueden almacenar y recuperar valores en una matriz haciendo referencia a cada
ubicacin de la matriz utilizando su ndice entre parntesis. Los ndices de matrices
multidimensionales estn separados por comas (,). Se necesita un ndice para cada
dimensin de la matriz. El ejemplo siguiente muestra algunas instrucciones que almacenan
valores en matrices.

MATRICES EN VISUAL BASIC
23 de
diciembre
de 2013

VB

Dim i = 4
Dim j = 2

Dim numbers(10) As Integer
Dim matrix(5, 5) As Double

numbers(i + 1) = 0
matrix(3, j * 2) = j


El ejemplo siguiente muestra algunas instrucciones que reciben valores de las matrices.
VB

Dim v = 2
Dim i = 1
Dim j = 1
Dim k = 1
Dim wTotal As Double = 0.0
Dim sortedValues(5), rawValues(5), estimates(2, 2, 2) As Double
Dim lowestValue = sortedValues(0)
wTotal += (rawValues(v) ^ 2)
Dim firstGuess = estimates(i, j, k)


Rellenar una matriz con valores iniciales
Utilizando un literal de matriz, puede crear una matriz que contiene un conjunto inicial de
valores. Un literal de matriz est formado por una lista de valores separados por comas que
se encierran entre llaves ({}).
Cuando se crea una matriz utilizando un literal de matriz, se puede proporcionar el tipo de
la matriz o usar la inferencia de tipos para determinarlo. El cdigo siguiente muestra ambas
opciones.
VB

Dim numbers = New Integer() {1, 2, 4, 8}
Dim doubles = {1.5, 2, 9.9, 18}


MATRICES EN VISUAL BASIC
23 de
diciembre
de 2013

Cuando se utiliza la inferencia de tipos, el tipo dominante determina el tipo de matriz en la
lista de valores que se proporciona para el literal de matriz. El tipo dominante es un tipo
nico al que todos los dems tipos del literal de matriz se pueden ampliar. Si no se puede
determinar este tipo nico, el tipo dominante es el tipo nico al que los dems tipos de la
matriz se pueden restringir. Si no se puede determinar ninguno de estos tipos nicos, el tipo
dominante es Object. Por ejemplo, si la lista de valores que se proporciona al literal de
matriz contiene valores de Integer con tipo, de Long, y de Double, la matriz resultante es de
Double escrito. Integer y Long amplan slo a Double. Por consiguiente, Double es el tipo
dominante. Estas reglas de inferencia se aplican a los tipos que se infieren para las matrices
que son variables locales que se definen en un miembro de clase. Aunque puede utilizar
literales de matriz al crear variables de nivel de clase, no puede utilizar la inferencia de
tipos en el nivel de clase. Como resultado, los literales de matriz que se especifican en el
nivel de clase deducen los valores que se proporcionan para el literal de matriz como
Object escrito.
Puede especificar explcitamente el tipo de los elementos de una matriz que se crea
utilizando un literal de matriz. En este caso, los valores del literal de matriz se deben
ampliar al tipo de los elementos de la matriz. En el ejemplo de cdigo siguiente se crea una
matriz de tipo Double a partir de una lista de enteros.
VB

Dim values As Double() = {1, 2, 3, 4, 5, 6}

Literales de matriz anidados
Se puede crear una matriz multidimensional utilizando los literales de matriz anidados. Los
literales de matriz anidados deben tener una dimensin y un nmero de dimensiones, o
rango, que es coherente con la matriz resultante. En el ejemplo de cdigo siguiente se crea
una matriz bidimensional de enteros utilizando un literal de matriz.
VB

Dim grid = {{1, 2}, {3, 4}}
En el ejemplo anterior, se producira un error si no coincide con el nmero de elementos en
los literales de matriz anidados. Tambin se producira un error si se explcitamente que la
variable de matriz para estar distinto de bidimensional.
Nota
Para evitar que se produzca un error al proporcionar literales de matriz anidados de
dimensiones diferentes, se deben encerrar entre parntesis los literales de matriz internos.
Los parntesis fuerzan la expresin literal de matriz que se evaluar, y los valores
MATRICES EN VISUAL BASIC
23 de
diciembre
de 2013

resultantes se utilizan con el literal de matriz externo, como muestra el cdigo siguiente.
VB

Dim values = {({1, 2}), ({3, 4, 5})}
Cuando se crea una matriz multidimensional utilizando literales de matriz anidados, se
puede utilizar la inferencia de tipos. Cuando se utiliza la inferencia de tipos, el tipo
deducido es el tipo dominante para todos los valores de todos los literales de matriz en un
nivel de anidamiento. En el ejemplo de cdigo siguiente, se crea una matriz bidimensional
de tipo Double a partir de valores que son de tipo Integer y Double.

VB

Dim a = {{1, 2.0}, {3, 4}, {5, 6}, {7, 8}}


Cuando se recorre en iteracin una matriz, tiene acceso a cada elemento de la matriz de
ndice mnimo al ndice ms alto.
El ejemplo siguiente se recorre en iteracin una matriz unidimensional con Instruccin
For...Next (Visual Basic). El mtodo de GetUpperBound devuelve el valor mximo que
puede tener el ndice. El valor de ndice mnimo es siempre 0.
VB

Dim numbers = {10, 20, 30}

For index = 0 To numbers.GetUpperBound(0)
Debug.WriteLine(numbers(index))
Next
' Output:
' 10
' 20
' 30


El ejemplo siguiente se recorre en iteracin una matriz multidimensional utilizando una
instruccin de For...Next. El mtodo de GetUpperBound tiene un parmetro que especifica
la dimensin. GetUpperBound(0) devuelve el alto valor de ndice de la primera dimensin,
y GetUpperBound(1) devuelve el alto valor de ndice de la segunda dimensin.

MATRICES EN VISUAL BASIC
23 de
diciembre
de 2013

VB

Dim numbers = {{1, 2}, {3, 4}, {5, 6}}

For index0 = 0 To numbers.GetUpperBound(0)
For index1 = 0 To numbers.GetUpperBound(1)
Debug.Write(numbers(index0, index1).ToString & " ")
Next
Debug.WriteLine("")
Next
' Output
' 1 2
' 3 4
' 5 6

El ejemplo siguiente se recorre en iteracin una matriz unidimensional mediante
Instruccin For Each...Next (Visual Basic).
VB

Dim numbers = {10, 20, 30}

For Each number In numbers
Debug.WriteLine(number)
Next
' Output:
' 10
' 20
' 30

El ejemplo siguiente se recorre en iteracin una matriz multidimensional utilizando una
instruccin de For Each...Next. Sin embargo, tiene ms control sobre los elementos de una
matriz multidimensional si utiliza una instruccin anidada de ForNext, como en un
ejemplo anterior, en lugar de una instruccin de For EachNext.
VB

Dim numbers = {{1, 2}, {3, 4}, {5, 6}}

For Each number In numbers
Debug.WriteLine(number)
Next
' Output:
MATRICES EN VISUAL BASIC
23 de
diciembre
de 2013

' 1
' 2
' 3
' 4
' 5
' 6


Matrices como valores devueltos y parmetros
Para devolver una matriz de un procedimiento de Function, especifique el tipo de datos de
la matriz y el nmero de dimensiones como tipo de valor devuelto de Function (Instruccin,
Visual Basic). Dentro de la funcin, declare una variable de matriz local con el mismo tipo
de datos y dimensiones. En Return (Instruccin, Visual Basic), incluya la variable de matriz
local sin parntesis.
Para especificar una matriz como parmetro a un procedimiento de Sub o de Function,
defina el parmetro como matriz con un tipo de datos y un nmero especificado de
dimensiones. En la llamada al procedimiento, enve una variable de matriz con el mismo
tipo de datos y dimensiones.
En el ejemplo siguiente, la funcin de GetNumbers devuelve Integer(). Este tipo de matriz
es una matriz unidimensional de Integer escrito. El procedimiento de ShowNumbers acepta
un argumento de Integer().
VB

Public Sub Process()
Dim numbers As Integer() = GetNumbers()
ShowNumbers(numbers)
End Sub

Private Function GetNumbers() As Integer()
Dim numbers As Integer() = {10, 20, 30}
Return numbers
End Function

Private Sub ShowNumbers(numbers As Integer())
For index = 0 To numbers.GetUpperBound(0)
Debug.WriteLine(numbers(index) & " ")
Next
End Sub

' Output:
' 10
MATRICES EN VISUAL BASIC
23 de
diciembre
de 2013

' 20
' 30


En el ejemplo siguiente, la funcin de GetNumbersMultiDim devuelve Integer(,). Este tipo
de matriz es una matriz bidimensional de Integer escrito. El procedimiento de
ShowNumbersMultiDim acepta un argumento de Integer(,).
VB

Public Sub ProcessMultidim()
Dim numbers As Integer(,) = GetNumbersMultidim()
ShowNumbersMultidim(numbers)
End Sub

Private Function GetNumbersMultidim() As Integer(,)
Dim numbers As Integer(,) = {{1, 2}, {3, 4}, {5, 6}}
Return numbers
End Function

Private Sub ShowNumbersMultidim(numbers As Integer(,))
For index0 = 0 To numbers.GetUpperBound(0)
For index1 = 0 To numbers.GetUpperBound(1)
Debug.Write(numbers(index0, index1).ToString & " ")
Next
Debug.WriteLine("")
Next
End Sub

' Output
' 1 2
' 3 4
' 5 6


Matrices escalonadas
Una matriz que contiene otras matrices mientras que los elementos se conocen como una
matriz de matrices o una matriz escalonada. Una matriz escalonada y cada elemento de una
matriz escalonada pueden tener una o ms dimensiones. En algunas ocasiones, la estructura
de datos de la aplicacin es bidimensional pero no rectangular.
El ejemplo siguiente tiene una matriz de meses, cada elemento cuyo es una matriz de das.
Dado que los distintos meses tienen un nmero de das, los elementos no forman una matriz
MATRICES EN VISUAL BASIC
23 de
diciembre
de 2013

bidimensional rectangular. Por consiguiente, una matriz escalonada se utiliza en lugar de
una matriz multidimensional.
VB

' Declare the jagged array.
' The New clause sets the array variable to a 12-element
' array. Each element is an array of Double elements.
Dim sales()() As Double = New Double(11)() {}

' Set each element of the sales array to a Double
' array of the appropriate size.
For month As Integer = 0 To 11
Dim days As Integer =
DateTime.DaysInMonth(Year(Now), month + 1)
sales(month) = New Double(days - 1) {}
Next month

' Store values in each element.
For month As Integer = 0 To 11
Dim upper = sales(month).GetUpperBound(0)
For day = 0 To upper
sales(month)(day) = (month * 100) + day
Next
Next


Matrices de longitud cero
Una matriz que no contiene ningn elemento tambin se denomina matriz de la cero-
longitud. Una variable que contiene una matriz de la cero- longitud no tiene el valor
Nothing. Para crear una matriz que no tenga elementos, declare una de las dimensiones de
la matriz sea -1, como se muestra en el ejemplo siguiente.
VB

Dim twoDimensionalStrings(-1, 3) As String


Podra necesitar crear una matriz de longitud cero en las circunstancias siguientes:
Sin arriesgar una excepcin de NullReferenceException, el cdigo debe tener
acceso a los miembros de la clase de Array, como Length o Rank, o llame a una
funcin de Visual Basic como UBound.
MATRICES EN VISUAL BASIC
23 de
diciembre
de 2013

Desea que el cdigo utilizado sea ms sencillo sin tener que comprobar Nothing
como caso especial.
El cdigo interacta con una interfaz de programacin de aplicaciones (API) que
exijan pasar una matriz de la cero- longitud a uno o ms procedimientos o devuelve
una matriz de la cero- longitud de uno o ms procedimientos.

Tamao de una matriz
El tamao de una matriz es el producto de las longitudes de todas sus dimensiones.
Representa el nmero total de elementos contenido actualmente en la matriz.
A continuacin, se muestra un ejemplo de declaracin de una matriz tridimensional.
Dim prices(3, 4, 5) As Long
El tamao total de la matriz en la variable prices es (3 + 1) x (4 + 1) x (5 + 1) = 120.
Se puede buscar el tamao de una matriz utilizando la propiedad Length. Se puede
encontrar la longitud de cada dimensin de una matriz multidimensional utilizando el
mtodo GetLength.
Se puede cambiar el tamao de una variable de matriz asignndole un nuevo objeto de
matriz o utilizando la instruccin ReDim.
Se deben tener presentes varias cosas cuando se trata con el tamao de una matriz.
Longitud de
la dimensin
El ndice de cada dimensin est basado en 0, lo que significa que va desde 0
hasta su lmite superior. Por consiguiente, la longitud de una dimensin
determinada supera en 1 al lmite superior declarado para esa dimensin.
Lmites de
longitud
La longitud de cada dimensin de una matriz est limitada al valor mximo
del tipo de datos Integer que es (2 ^ 31) - 1. No obstante, la memoria
disponible en el sistema limita tambin el tamao total de una matriz. Si
intenta inicializar una matriz que supera la cantidad de memoria RAM
disponible, Common Language Runtime produce una excepcin
OutOfMemoryException.
Tamao y
tamao de
elementos
El tamao de una matriz es independiente del tipo de datos de sus elementos.
El tamao siempre representa el nmero total de elementos, no el nmero de
bytes que utilizan en el almacenamiento.
Consumo de
memoria
No es seguro dar nada por supuesto en lo que respecta al modo de almacenar
una matriz en la memoria. El almacenamiento vara en funcin de las
plataformas de diferentes anchos de datos, por lo que la misma matriz puede
utilizar ms memoria en un sistema de 64 bits que en un sistema de 32 bits.
MATRICES EN VISUAL BASIC
23 de
diciembre
de 2013

Segn la configuracin del sistema cuando inicializa una matriz, Common
Language Runtime (CLR) puede asignar el almacenamiento para empaquetar
los elementos tan juntos como sea posible o para alinearlos todos en los
lmites naturales del hardware. Asimismo, una matriz requiere una
sobrecarga de almacenamiento para obtener su informacin de control y esta
sobrecarga aumenta con cada dimensin agregada.

Tipos de matriz y otros tipos
Cada matriz tiene un tipo de datos, pero difiere del tipo de datos de sus elementos. No
existe ningn tipo de datos para todas las matrices. En su lugar, el tipo de datos de una
matriz lo determina el nmero de dimensiones, o rango, de la matriz y el tipo de datos de
los elementos de la matriz. Se considera que dos variables de matriz son del mismo tipo de
datos slo cuando tienen el mismo rango y sus elementos tienen el mismo tipo de datos.
Las longitudes de las dimensiones de una matriz no influyen en el tipo de datos de la
matriz.
Cada matriz hereda de la clase System.Array y puede declarar una variable que sea de tipo
Array pero no puede crear una matriz de tipo Array. Asimismo, Instruccin ReDim (Visual
Basic) no puede funcionar en una variable declarada de tipo Array. Por estas razones y para
mayor seguridad del tipo, es aconsejable declarar cada matriz como un tipo especfico,
como por ejemplo Integer en el ejemplo anterior.
Puede averiguar el tipo de datos de una matriz o de sus elementos de varias maneras.
Llame al mtodo Object.GetType en la variable a fin de recibir un objeto Type para
el tipo en tiempo de ejecucin de la variable. El objeto Type contiene amplia
informacin en sus propiedades y mtodos.
Pase la variable a la funcin TypeName para recibir un objeto String que contenga
el nombre del tipo en tiempo de ejecucin.
Pase la variable a la funcin VarType para recibir un valor VariantType que
represente la clasificacin de tipo de la variable.
En el ejemplo siguiente se llama a la funcin TypeName para determinar el tipo de la
matriz y el tipo de los elementos de la matriz. El tipo de la matriz es Integer(,) y el tipo de
los elementos de la matriz es Integer.
VB

Dim thisTwoDimArray(,) As Integer = New Integer(9, 9) {}
MsgBox("Type of thisTwoDimArray is " & TypeName(thisTwoDimArray))
MsgBox("Type of thisTwoDimArray(0, 0) is " & TypeName(thisTwoDimArray(0, 0)))


MATRICES EN VISUAL BASIC
23 de
diciembre
de 2013

Colecciones como alternativa a las matrices
Las matrices son muy tiles para crear y trabajar con un nmero fijo de objetos fuertemente
tipados. Las colecciones proporcionan un mtodo ms flexible para trabajar con grupos de
objetos. A diferencia de las matrices, el grupo de objetos que trabaje con puede crece y
reducirse dinmicamente a medida que cambian las necesidades de la aplicacin.
Si necesita cambiar el tamao de una matriz, debe utilizar Instruccin ReDim (Visual
Basic). Si hace esto, Visual Basic crea una nueva matriz y libera la matriz anterior para su
eliminacin. Esto requiere tiempo de ejecucin. Por consiguiente, si el nmero de
elementos con los que trabaja cambia a menudo o no puede predecir el nmero mximo de
elementos que necesita, puede obtener un mejor rendimiento utilizando una coleccin.
Para algunas colecciones, puede asignar una clave a cualquier objeto que incluya en la
coleccin para que pueda recuperar rpidamente el objeto con la clave asignada.
Si su coleccin se limita a elementos de slo un tipo de datos, puede utilizar una de las
clases en el espacio de nombres System.Collections.Generic. Una coleccin genrica
cumple la seguridad de tipos para que ningn otro tipo de datos se pueda agregar a ella.
Cuando recupera un elemento de una coleccin genrica, no tiene que determinar su tipo de
datos ni convertirlo.
Ejemplo
En el ejemplo siguiente se utiliza la clase genrica System.Collections.Generic.List<T> de
.NET Framework para crear una coleccin de listas de objetos Customer.
VB

' Define the class for a customer.
Public Class Customer
Public Property Name As String
' Insert code for other members of customer structure.
End Class

' Create a module-level collection that can hold 200 elements.
Public CustomerList As New List(Of Customer)(200)

' Add a specified customer to the collection.
Private Sub AddNewCustomer(ByVal newCust As Customer)
' Insert code to perform validity check on newCust.
CustomerList.Add(newCust)
End Sub

' Display the list of customers in the Debug window.
MATRICES EN VISUAL BASIC
23 de
diciembre
de 2013

Private Sub PrintCustomers()
For Each cust As Customer In CustomerList
Debug.WriteLine(cust)
Next cust
End Sub