310 likes | 770 Views
VBA – Arrays. Variables tipo arreglo (Arrays): Vectores Matrices. Repaso. En la primera parte del curso se estudió: La representación de algoritmos usando estructuras básicas: secuencia, selección lógica, iteración. Los tipos de datos
E N D
VBA – Arrays Variables tipo arreglo (Arrays): Vectores Matrices
Repaso • En la primera parte del curso se estudió: • La representación de algoritmos usando estructuras básicas: secuencia, selección lógica, iteración. • Los tipos de datos • El concepto de variable Almacenan un solo valor: numérico, cadena de caracteres, lógico, etc. Clase 8
A1 A2 A3 … Ai … An-1 An A0 Arreglos • Un arreglo (o array) es un conjunto de elementos que tienen el mismo tipo de dato y se identifican con un único nombre de variable. • Para referirse a un determinado elemento del arreglo se utiliza un índice, que especifica su posición relativa en el arreglo. • Los arreglos pueden ser de cualquier tipo de dato: numérico, alfanuméricos, lógicos, etc. A = Clase 8
A0,n … A0,1 A0,0 A0 A1,n … A1,0 A1,1 A1 … A2,n A2,1 A2,0 A2 … … … … … Am,n Am,0 An Am,1 … Clasificación de los arreglos • Los arreglos se clasifican de acuerdo al número de dimensiones que tienen: • Unidimensionales (Vectores) • Bidimensionales (Matrices o Tablas) • Multidimensionales (tres o más dimensiones) Clase 8
Dimensiones y Subíndices • El número de dimensiones especifican el tipo de arreglo (vector, matriz, etc.). • Cada dimensión tiene un tamaño y se utiliza un subíndice para hacer referencia a una posición en esa dimensión. • Los vectores utilizan un solo subíndice que especifica la posición del elemento en la dimensión: A(i) Clase 8
Dimensiones y Subíndices • Las matrices tienen dos dimensiones: a la primera dimensión se le llama Fila, a la segunda dimensión se le llama Columna • Las matrices utilizan dos subíndices: uno para las filas y otro para las columnas. A(i, j) Subíndice para filas (primera dimensión) Subíndice para columnas (segunda dimensión) Clase 8
Declaración de arreglos • Un arreglo se declara con la instrucción Dim: DimnombreArreglo(dimensiones) AstipoDato • nombreArreglo: es el nombre de una variable • tipoDato: Opcional. Es el tipo de dato del arreglo (Integer, Long, Double, Boolean, String, etc.). • dimensiones: Opcional. Es una lista (separada por coma) de las dimensiones del arreglo. VB acepta hasta 60 dimensiones. Cada dimensión es de la forma: límiteInferiorTolímiteSuperior
Declaración de arreglos límiteInferiorTolímiteSuperior • límiteInferior: Opcional. Es un entero (positivo o negativo) correspondiente al límite inferior del arreglo en esa dimensión. Si se omite, también se debe omitir la palabra clave To y su valor se asume cero. • límiteSuperior: Requerido. Es un entero (positivo o negativo) correspondiente al límite superior del arreglo en esa dimensión. límiteSuperior debe ser mayor o igual que límiteInferior. Clase 8
Declaración de arreglos • Ejemplos: Dim X(1 To 10) AsSingle, B() As Long Dim Y(20) AsInteger, W(10, 20) As Double Dim Z(-30 To 50) AsString Dim A(5, -4 To 10) As Boolean Dim C(5, 5, 5, 4) As Long • Observaciones: • Los paréntesis (después del nombre de la variable) indican que la variable es un arreglo • Cuántos elementos tiene X? y B? y A? y C? Clase 8
Tamaño de un arreglo • El tamaño de un arreglo se define como la multiplicación de cada uno de los tamaños de las dimensiones del arreglo. • El tamaño de una dimensión se calcula por la siguiente fórmula: Tamaño= límiteSuperior – límiteInferior + 1 • Por ejemplo, en la declaración: Dim Z(-30 To 50) AsString El tamaño del vector Z es 50 – (–30) + 1 = 81 elementos Clase 8
Arreglos Estáticos • Un arreglo estático es aquel que, en su declaración, se define el número de dimensiones y el tamaño de cada dimensión. Es decir, tiene un número constante de elementos. • Ejemplo: Dim B(9) AsInteger, A(7, 19) As Single • El vector B tendrá 10 elementos de tipo entero. • La matriz A tendrá 8 filas y 20 columnas, es decir, 160 elementos de tipo real simple. Clase 8
Arreglos Dinámicos • Un arreglo dinámico es aquel cuyo tamaño y número de dimensiones pueden cambiar. En la declaración se colocan los paréntesis vacíos. • Ejemplo: Dim X() AsLong, B() As String • Para poder hacer referencia a un elemento del arreglo dinámico, primero de debe redimensionar la variable utilizando la instrucción ReDim, especificando el número de dimensiones y el tamaño de cada dimensión. Clase 8
Arreglos Dinámicos • Sintaxis de la instrucción ReDim: ReDimnombreArreglo(dimensiones) • nombreArreglo: es el nombre de la variable a redimensionar. • dimensiones: Requerido. Es una lista (separada por coma) de las dimensiones del arreglo. Cada dimensión es de la forma: límiteInferiorTolímiteSuperior • límiteInferior es opcional. Si se omite se asume 0. límiteSuperior es requerido.
Arreglos Dinámicos • Ejemplo: Dim F() As Single ... ReDim F(50) ... F(2) = 10.52 ... ReDim F(1 To 5, 5) ... F(3, 0) = 4*F(1, 1) – 2.3 ReDim permite cambiar el número de elementos ó el número de dimensiones del arreglo pero NO su tipo de datos. Clase 8
Arreglos Dinámicos • ReDim inicializa cada elemento del arreglo a su valor por defecto (los numéricos a 0; String a “”; Boolean a False; etc.). • ReDim Preserve permite conservar los datos del arreglo. • Si utiliza la palabra clave Preserve sólo puede cambiar el tamaño de la última dimensión del arreglo y no es posible cambiar el número de dimensiones. En este caso, los elementos del arreglo no se inicializan a su valor por defecto. Clase 8
Arreglos Dinámicos • Ejemplo: Dim A() As Integer ReDim A(4) A(2) = 5 ReDim A(3) A(1) = -2 A(3) = 8 K = 6 ReDimPreserve A(K) A(K) = -1 A 0 A0 0 0 -2 A1 5 0 0 A2 A3 0 8 0 A4 0 A5 0 -1 A6 Memoria RAM
Ejemplo 1 • Para un vector x de n elementos reales, hallar la suma, el promedio () y la desviación estándar (). Clase 8
Ejemplo 1: Definición de variables • Datos de entrada: • N Tamaño del vector X • Xi Elemento i-ésimo del vector X • Datos de salida: • Suma Suma de los elementos del vector X • Prom Promedio de los elementos del vector • Desv Desviación Estándar de los elementos del vector. Clase 8
Ejemplo 1: Código fuente 'Declaración de variables Dim N As Integer, X() As Single, I As Integer Dim Suma As Single, Prom As Single, Desv As Single Dim Sum As Single 'Lectura de datos N = Val(InputBox("Ingrese el valor de N:")) ReDim X(1 To N) For I = 1 To N X(I) = Val(InputBox("X(" & I & ") =")) Next I Clase 8
Ejemplo 1: Código fuente 'Cálculo de la Suma y Promedio Suma = 0 For I = 1 To N Suma = Suma + X(I) Next I If N > 0 Then Prom = Suma / N 'Cálculo de la Desviación Estándar Sum = 0 For I = 1 To N Sum = Sum + (X(I) – Prom) ^ 2 Next I If N > 1 Then Desv = Sqr(Sum / (N – 1)) Clase 8
Ejemplo 1: Código fuente 'Mostrar resultados Text1.Text = "Vector Leído:" & vbCrLf For I = 1 To N Text1.Text = Text1.Text & "X(" & I & ")= " & _ X(I) & vbCrLf Next I Text1.Text = Text1.Text & "Suma = " & Suma & vbCrLf Text1.Text = Text1.Text & "Prom = " & Prom & vbCrLf Text1.Text = Text1.Text & "Desv = " & Desv & vbCrLf Clase 8
Ejemplo 2 • Realizar un algoritmo que permita sumar dos matrices de orden nxm. Clase 8
Ejemplo 2: Definición de variables • Datos de entrada: • N Número de filas • M Número de columnas • Ai,j Elementos de la matriz A • Bi,j Elementos de la matriz B • Datos de salida: • Ci,j Elementos de la matriz C Clase 8
Ejemplo 2: Algoritmo Inicio Leer N, M I = 1, N, 1 J = 1, M, 1 Leer Ai,j, Bi,j I = 1, N, 1 J = 1, M, 1 Ci,j = Ai,j+Bi,j Mostrar C Terminar Clase 8
Función LBound • Devuelve un tipo Long que contiene el subíndice más pequeño disponible para la dimensión indicada de un arreglo. • Sintaxis: LBound(nombreArreglo, dimension) • nombreArreglo: Requerido. Nombre del arreglo. • dimensión: Opcional. Número entero que indica a qué dimensión corresponde el límite inferior devuelto. Use 1 para la primera dimensión, 2 para la segunda y así sucesivamente. Si dimensión se omite, se supone que es 1. Clase 8
Función UBound • Devuelve un tipo Long que contiene el mayor subíndice disponible para la dimensión indicada de un arreglo. • Sintaxis: UBound(nombreArreglo, dimension) • nombreArreglo: Requerido. Nombre del arreglo. • dimensión: Opcional. Número entero que indica la dimensión cuyo límite superior se devolverá. Use 1 para la primera dimensión, 2 para la segunda y así sucesivamente. Si dimensión se omite, se supone que es 1. Clase 8
Ejemplos: Función LBound y UBound Dim A(1 To 100, 3, -3 To 4) As Integer Instrucción Valor devuelto LBound(A) LBound(A, 1) LBound(A, 2) LBound(A, 3) UBound(A) UBound(A, 1) UBound(A, 2) UBound(A, 3) UBound(A, 4) 1 1 0 -3 100 100 3 4 Error Clase 8
Instrucción Erase • La instrucción Erase vuelve a inicializar (a su valor por defecto) los elementos de los arreglos estáticos y elimina los arreglos dinámicos. • Sintaxis: Erase nombreArreglo • nombreArreglo: Requerido. Nombre del arreglo. • Antes de volver a utilizar un arreglo dinámico eliminado con la instrucción Erase, se debe volver a declarar las dimensiones del arreglo con la instrucción ReDim. Clase 8