Unidad II: Estructuras de datos (en Visual Basic)
Arreglos
Arreglos en Visual Basic Los Arreglos se utilizan para almacenar un conjunto de variables, que sean del mismo tipo de dato, y todas estas bajo un mismo nombre. Por ejemplo imaginemos que tenemos 20 variables de tipo String que almacenan nombres (nombre1, nombre2, etc..). si yo ahora quisiera pasar todas estas cadenas a minúsculas tendría que utilizar la función Lcase con cada variable: nombre1 = Lcase(nombre1), nombre2 = Lcase(nombre2), etc.. Con un arreglo la solución se simplifica a : Dim nombres(20) As String For x = 1 To 20 nombres(x) = LCase(nombres(x)) Next 3
Declaración de vectores Lo siguiente crea un arreglo de 15 elementos o datos de tipo integer Dim miarreglo (1 to 15) as integer Esto crea un arreglo de 11 elementos o datos de tipo String. Dim empleados (10) as String Recordar que: Los arreglos se dividen en 2 grupos, los vectores y las matrices. Los vectores son arreglos que contienen una sola dimensión y las matrices 2 o mas dimensiones. 4
Acceder a los datos de un vector Para acceder a los datos de un arreglo o vector, debemos hacerlo mediante el índice o número del elemento del mismo. Por ejemplo: Dim alumnos(1 To 4) As String alumnos(1) = "maria" alumnos(2) = "marcela" alumnos(3) = "ana" alumnos(4) = "doris" Otro ejemplo: Dim paises(2) As String paises(0) = "España" paises(1) = "Chile" paises(2) = "Brasil" For x = 0 To 2 MsgBox "Nombre del país : " & paises(x) Next x 5
Matrices Las matrices son arreglos de mas de una dimensión (2 o mas), a diferencia de los vectores que poseen una sola dimensión. Podemos imaginar una matriz bidimensional (2 dimensiones), como una cuadrícula con filas y columnas, donde las filas representarían las coordenadas x y las columnas las coordenadas y. Por ejemplo: Una matriz bidimensional de 6 x 8 (de 2 dimensiones). Dim personas (1 to 6, 1 to 8) as string Para acceder a los datos basta con referirnos a los subíndices Por ejemplo: personas (1, 1) = "Natalia" personas (2, 1) = ana" personas (1, 7) = "valeria" personas (1, 8) = "javiera" personas (2, 2) = "carolina" personas (4, 1) = "raquel" personas (6, 2) = pamela" personas (6, 5) = "maria" personas (6, 8) = "mariana" 6
Ejemplo de Matrices 7
Vectores dinámicos Hasta ahora habíamos visto sólo vectores o arreglos de tamaño fijo, pero qué pasa cuando no sabemos el tamaño o el largo de un vector y queremos que sea variable?. Visual basic posee una sentencia o función que nos permite cambiar el largo de un vector en tiempo de ejecución, dándonos así mas flexibilidad, y de esta manera no desperdiciar memoria y recursos de la pc creando vectores mas largos de lo que realmente necesitamos. Esta función se llama ReDim y ReDim Preserve. 8
Ejemplo: Vectores dinámicos Primero declaramos un vector de la forma tradicional con la diferencia de que en vez de colocar un tamaño declaramos el vector solo con los paréntesis : Dim alumnos () as string Ahora establecemos un tamaño, por ejemplo de 4 elementos y agregamos valores: ReDim alumnos(1 To 4) As String alumnos(1) = Maria" alumnos(2) = Ana" alumnos(3) = "Mariana" alumnos(4) = "Patricia" Ahora para redimensionar el tamaño del vector por ejemplo a 7 elementos, utilizamos la función ReDim Preserve, para preservar los 4 valores anteriores y le agregamos 3 valores mas: ReDim Preserve alumnos(1 To 7) alumnos(5) = "Karla" alumnos(6) = Katherine" alumnos(7) = "Romina" 9
For anidados
Código Visual Basic Para Recorrer Una Tabla Prepare una planilla con el siguiente contenido: 11
Código Visual Basic Para Recorrer Una Tabla Dim i, j As Integer For i = 2 To 7 For j = 1 To 5 MsgBox(Cells(i,j).Value) Next j Next i For anidados: Un for dentro de otro 12
Código Visual Basic Para Recorrer Una Tabla Cambiemos los datos de la planilla: 13
Ejemplo: Encontrar el alumno que tiene una nota 1 Dim i,j As Integer For i = 2 To 7 For j = 3 To 5 If Cells(i,j).Value = 1 Then MsgBox(cells(i,1).Value) Mostrando el nombre End if Next j Next i Por qué j comienza con el valor 3? 14
Recorrer una tabla completa Dim i, j, ultimafila, ultimacolumna As Integer ultimafila = Range("A65536").End(xlUp).Row ultimacolumna = Cells(1, Columns.Count).End(xlToLeft).Column For I = 2 to ultimafila For j = 1 to ultimacolumna if IsEmpty(cells(I,j).value) Then MsgBox ("celda vacia:" + Str(i) + "," + Str(j)) Cells(i, j).activate End if Next j Next i Para que sirve la función Str? Qué significa Cells(I,j).Activate? 15
Ejercicios: (No todos los ejercicios necesitan for anidados!) Cambiemos los datos de la planilla: 16
Ejercicios: (No todos los ejercicios necesitan for anidados!) (FÁCIL) Cuente todas las personas que tiene AFP COLMENA (FÁCIL) Sume los sueldos brutos de todas las personas que tienen Isapre PROVIDA (MEDIO) Cuente todas las celdas que no tienen valores (DÍFICIL) Cuente todas las personas cuyo sueldos líquidos sea menor a 620.000 y tengan Isapre PROVIDA 17