Está en la página 1de 11

Universidad Bicentenaria de Aragua

Escuela de Sistemas
Prof Eduardo Diaz
Asignatura: Programación IV
Estructuras de Datos en Visual Basic

Estructuras de datos Visual Basic. Uso, manejo y ventajas. Arreglos, vectores,


matrices y struct
Las estructuras de datos en Visual Basic son tipos de dato compuestos (no necesariamente
complejos). Las estructuras de datos permiten almacenar de manera ordenada una serie
de valores dados en una misma variable. Las estructuras de datos más comunes son
los vectores o arreglos y las matrices, aunque hay otras un poco más diferentes como son
el struct y las enumeraciones.

Arrays, arreglos, vectores y matrices en Visual Basic. Uso, declaración y sintaxis en


Visual Basic
Los arrays, arreglos o mejor conocidos como vectores (o matrices) que son conocidas por
algunos como vectores multidimensionales forman parte también de las cosas que
podíamos usar en VB6. Si bien la forma en que se almacenan en la memoria y la forma
en que podemos hacer algunas acciones con estas en Visual Basic 2010 ha cambiado un
poco, de igual manera la forma en que podemos usarlas es idéntica a VB6... o casi
idéntica.
En Visual Basic 2010 la declaración de un array, arreglo o vector la hacemos de la misma
forma que en Visual Basic 6 aunque como veremos un poco más adelante algunos detalles
cambiaron y es importante tenerlos en cuenta a la hora de declararlos. En el siguiente
ejemplo declaramos un array de tipo String llamado nombres:

Dim nombres() As String

Al igual que en VB6, podemos indicar el número de elementos que contendrá el


array:
Dim nombres(10) As String

Tal como ocurre en VB6, al realizar esta declaración lo que conseguimos es definir un
array de 11 elementos: desde cero hasta 10. Si bien, en VB6 tenemos la posibilidad de
indicar cual era el valor del índice inferior predeterminado de los arrays, podemos elegir
entre cero y uno mediante la instrucción Option Base indicando a continuación un 0 o un
1. En Visual Basic 2010 no existe esa instrucción, es más en Visual Basic 2010 todos los
arrays deben tener como índice inferior el valor cero.

Otra posibilidad que teníamos en VB6 era indicar el rango de índices que podíamos
asignar, esto lo lográbamos usando la cláusula To al definir un array, por ejemplo:
Dim nombres(10 To 25) As String

Lo que si podemos hacer en Visual Basic 2010 es usar To para indicar el valor máximo
del índice, aunque no tiene la misma "potencia" que en VB6, al menos de esta forma el
código resultará más legible:
Dim nombres(0 To 10) As String
Declarar e inicializar un array

Lo que no podemos hacer en VB6 era declarar un array y al mismo tiempo asignarle
valores.

En Visual Basic 2010 esto lo hacemos indicando los valores a asignar justo después de la
declaración y encerrándolos entre llaves:

Dim nombres() As String = {"Pepe", "Juan", "Luisa"}

Con el código anterior estamos creando un array de tipo String con tres valores cuyos
índices van de cero a dos.

Si el array es bidimensional (o con más dimensiones), también podemos inicializarlos al


declararlo, pero en este caso debemos usar doble juego de llaves:

Dim nombres(,) As String = {{"Juan", "Pepe"}, {"Ana", "Eva"}}

En este código tendríamos un array bidimensional con los siguientes valores:

 nombres(0,0)= Juan
 nombres(0,1)= Pepe
 nombres(1,0)= Ana
 nombres(1,1)= Eva

Cambiar el tamaño de un array

Para cambiar el tamaño de un array, al igual que en VB6, usaremos la instrucción ReDim,
pero a diferencia de VB6 no podemos usar ReDim para definir un array, en Visual Basic
2010 siempre hay que declarar previamente los arrays antes de cambiarles el tamaño.

Lo que también podemos hacer en Visual Basic 2010 es cambiar el tamaño de un array y
mantener los valores que tuviera anteriormente, para lograrlo debemos usar ReDim
Preserve.

Si bien tanto ReDim como ReDim Preserve se pueden usar en arrays de cualquier número
de dimensiones, en los arrays de más de una dimensión solamente podemos cambiar el
tamaño de la última dimensión.

Eliminar el contenido de un array

Una vez que hemos declarado un array y le hemos asignado valores, es posible que nos
interese eliminar esos valores de la memoria, para lograrlo, podemos hacerlo de tres
formas:

Redimensionando el array indicando que tiene cero elementos, aunque en el mejor de los
casos, si no estamos trabajando con arrays de más de una dimensión, tendríamos un array
de un elemento, ya que, como hemos comentado anteriormente, los arrays de .NET el
índice inferior es cero.
Usar la instrucción Erase. Al igual que en VB6, Erase elimina totalmente el array de la
memoria.

Asignar un valor Nothing al array. Esto funciona en Visual Basic 2010 pero no en VB6,
debido a que en Visual Basic 2010 los arrays son tipos por referencia.

Los arrays son tipos por referencia

Como acabamos de ver, en Visual Basic 2010 los arrays son tipos por referencia, y tal
como comentamos anteriormente, los tipos por referencia realmente lo que contienen son
una referencia a los datos reales no los datos propiamente dichos.

¿Cuál es el problema?

Veámoslo con un ejemplo y así lo tendremos más claro.

Dim nombres() As String = {"Juan", "Pepe", "Ana", "Eva"}


Dim otros() As String
otros = nombres
nombres(0) = "Antonio"

En este ejemplo definimos el array nombres y le asignamos cuatro valores. A


continuación definimos otro array llamado otros y le asignamos lo que tiene nombres. Por
último asignamos un nuevo valor al elemento cero del array nombres.

Si mostramos el contenido de ambos arrays nos daremos cuenta de que realmente solo
existe una copia de los datos en la memoria, y tanto nombres(0) como otros(0) contienen
el nombre "Antonio". En VB6 cada array era independiente del otro y esa asignación a
nombres(0) no afectaba al valor contenido en otros(0).

Literales de arrays (o matrices)

Otra característica de Visual Basic 2010 es la aplicación de los denominados literales de


arrays o matrices.

La idea es que Visual Basic infiera por nosotros el tipo de dato de forma directa.

Esto representa una buena práctica aunque nos impide hacer cosas que antes podíamos
hacer sin complicaciones.

Por ejemplo, pensemos en el siguiente ejemplo de Visual Basic 2008:

Dim ejemploMatriz() = {2009, 2010, 2011, 2012}

En este ejemplo, habremos creado una matriz de 4 elementos. Sin embargo, podríamos
cambiar uno de sus elementos a otro valor de diferente tipo, como por ejemplo:

ejemploMatriz(1) = "s"
De esta manera, tendremos un resultado: 2009, "s", 2011, 2012.

Esto es así, porque la matriz ejemploMatriz es de tipo Object.

Sin embargo, esto ha cambiado. Ahora, podemos declarar literales de matrices, haciendo
que estas matrices se declaren de acuerdo al tipo de dato declarado, es decir, infiriendo el
tipo de dato en la declaración.

Un ejemplo de este uso es el siguiente:

Dim ejemploInteger = {2009, 2010, 2011, 2012}

En este ejemplo, si tratamos de hacer lo que antes intentábamos mediante la siguiente


instrucción:
ejemploInteger(1) = "s"

La aplicación nos devolverá un error en tiempo de ejecución, ya que la matriz estará


inferida por defecto como tipo Integer, y estaremos intentado asignar un valor String a
una matriz de tipo Integer.

Ejemplos Resueltos: ustedes están en capacidad de desarrollar el CommandButton

1.- Escribir un programa en Visual Basic que lea N números, calcule la media aritmética
de los mismos y muestre los números leídos que son mayores que la media calculada.

Se debe crear:
1 CommandButton
1 TextBox
5 Label
1 ListBox

Te debe quedar asi:


Private Sub Command1_Click()
'Declaramos el vector del 1 al 1000
Dim Numeros(1 To 1000) As Integer
'Atrapamos los numeros en un TextBox y luego lo pasamos a la variable N
N = Val(Text1)
'Contamos desde el numeros que ingresamos en TextBox
For K = 1 To N

Numeros(K) = InputBox("Numero " & K)


Suma = Suma + Numeros(K)
Next
Prom = Suma / N
LabelP = Prom
For K = 1 To N
If Numeros(K) > Prom Then
'En español es Agregar Elementos(AddItem) en el evento List1
List1.AddItem Numeros(K)
End If
Next

End Sub

2.- Escribir un programa en Visual Basic que lea 10 números que corresponden a los
elementos de un vector y determine y muestre el mayor y menor de ellos.
Se debe crear:

1 CommandButton
2 TextBox
2 Label

Te debe quedar así:


Private Sub Command1_Click()
'Declaramos el vector del 1 al 120
Dim Vector(1 To 20) As Integer
Dim Mayor As Integer
Dim Menor As Integer

For Indice = 1 To 10
Vector(Indice) = InputBox("Numero " & Indice)
Next

'Leemos el primer dato ingresado en la posicion '1' del indice


Mayor = Vector(1)

For Indice = 1 To 10
If Vector(Indice) > Mayor Then
Mayor = Vector(Indice)

End If

Next

Menor = Mayor

For Indice = 1 To 10
If Vector(Indice) < Menor Then
Menor = Vector(Indice)

End If

Next

Text1 = Mayor

Text2 = Menor

End Sub
3.- Escribir un programa en Visual Basic que permita cargar "N" números en un
vector "V" y luego muestre la cantidad de elementos de "V" que son números pares y la
cantidad de elementos de "V" que son mayores que 100

Se debe crear:
1 CommandButton
1 TextBox
3 Label

Te debe quedar así

Private Sub Command1_Click()


Dim Vector(1 To 1000) As Integer
Dim Pares, Mayores As Integer

N = Val(Text1)

For Indice = 1 To N
Vector(Indice) = InputBox("Dato " & Indice)

If Vector(Indice) Mod 2 = 0 Then


Pares = Pares + 1
End If

If Vector(Indice) > 100 Then


Mayores = Mayores + 1
End If
Next
Label2 = "Cantidad de pares " & Pares
Label3 = "Mayores que 100 " & Mayores

End Sub

4- Escribir un programa en Visual Basic que cree una matriz cuadrada de NxN y
verifique si la matriz es o no simétrica.
Te debe quedar así:

Dale doble click al CommandButton y escribe el siguiente código


Private Sub Command1_Click()
Dim Matriz(1 To 10, 1 To 10) As Integer
Do
N = InputBox("N = ")
Loop Until N > 0 And N < 11
For Fila = 1 To N
For Columna = 1 To N
Matriz(Fila, Columna) = InputBox("Dato ")
Next
Next

Paso = 0 'Es un Switch(Es Booleano 0 y 1), su funcion principal es que si cumple


la condición
'En este caso esta en cero porque no se ha cumplido una condición

For Fila = 1 To N
For Columna = 1 To N

If Matriz(Fila, Columna) <> Matriz(Columna, Fila) Then


Paso = 1 'Paso se le asigna 1 porque la condicion es verdadera
End If
Next
Next

If Paso = 1 Then
Label1 = "No es simétrica"
Else
'Si Paso es 0
Label1 = "Si es simétrica"
End If
End Sub
Ingrese lo siguiente para que te aparezca "Si es simétrica"

|0|6|1| 9|
|6|1|8|0|
|1|8|2|2|
|9|0|2|3|

5.- Escribir un programa en Visual Basic que cree una matriz de NxN y calcule y
muestre: A) La suma de los elementos que están por encima de la diagonal
principal. B) La suma de los elementos que están por debajo de la diagonal
principal. C) La suma de los elementos que están en la diagonal principal y D) La suma
de los elementos que están en la diagonal secundaria.

Se debe crear:
1 CommandButton
1 TextBox
5 Label (Con BoderStyle 1-Fixed Single)

Te debe quedar así:


Dale doble click al CommandButton y escribe el siguiente código
Private Sub Command1_Click()

Dim Matriz(1 To 100, 1 To 100)


Dim Suma1 As Integer
Dim Suma2 As Integer
Dim Suma3 As Integer
Dim Suma4 As Integer

N = Val(Text1)

For Fila = 1 To N
For Columna = 1 To N
Matriz(Fila, Columna) = InputBox("Dato")
If Fila = Columna Then
Suma1 = Suma1 + Matriz(Fila, Columna)
ElseIf Fila < Columna Then
Suma2 = Suma2 + Matriz(Fila, Columna)
Else
Suma3 = Suma3 + Matriz(Fila, Columna)
End If

If Fila + Columna = N + 1 Then


Suma4 = Suma4 + Matriz(Fila, Columna)
End If
Next
Next
'Respuestas
Label2 = "La suma de la diagonal principal " & Suma1
Label3 = "La suma que está por encima en la diagonal principal " & Suma2
Label4 = "La suma que está por debajo de la diagonal principal " & Suma3
Label5 = "La suma que está en la diagonal secundaria " & Suma4

End Sub

Ejercicios a Resolver:
1.- Hacer un programa en Visual Basic que lea dos vectores de "N" elementos cada uno
y cree y ordene ascendentemente un tercer vector cuyos elementos sean los elementos
de los 2 vectores leidos
2.- Se dispone de un vector "T" de 30 numeros reales distintos de cero. Escribir un
programa en Visual Basic para crear un Vector "Q" en los que todos sus elementos
resulten de dividir los elementos del vector "T" por el elemento T(k), siendo k un valor
dado.
3.- Escribir un programa en Visual Basic que cree un vector de 20 numeros enteros, los
ordene ascendentemente (de menor a mayor) y decida si un numero "N" se encuentra
entre la posicion "i" y la posicion "j" del vector ya ordenado. Los valores de "N", "i"
y "j"deben ser leidos por teclado.
4.- Escribir un programa en Visual Basic que permita llenar con "X" y "O" una
matriz 3x3 y luego inspeccione los valores de sus elementos y diga "GANARON LAS
'X'" si en cualquiera de sus filas, columnas o diagonales hay 3 "X", o "GANARON las
'O'" en caso de que los valores sean "O", o "EMPATE" sino se cumple ninguna de las
condiciones anteriores.

Este es el famoso juego llamado la VIEJA o como en otros lugares TIC TAC TOE

También podría gustarte