Arrays en VB 6.0

pabloledezmamejia 3,335 views 53 slides Oct 15, 2013
Slide 1
Slide 1 of 53
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51
Slide 52
52
Slide 53
53

About This Presentation

Arreglos y mas en Visual Basic


Slide Content

Mayo 2013

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.. En cambio si utilizara un arreglo solucionaría mi problema solo a esto Dim nombres(30) As String For x = 0 To 30 nombres(x) = LCase (nombres(x)) Next   Para crear un arreglo se debe en primer lugar declararlo como cualquier otra variable, la única diferencia es que debemos indicar la cantidad de elementos que contendrá el arreglo, colocando el número de índice entre paréntesis. Por ejemplo : Lo siguiente crea un arreglo de 15 elementos o datos de tipo integer Dim miArreglo (1 to 15) as integer Dim empleados (10) as String

Importante : 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 . Acceder a los datos de un arreglo 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) = " juan " alumnos(2) = " micaela " alumnos(3) = "maría" alumnos(4) = " ignacio "

Dim paises (2) As String ' Llena el vector con datos Países(0) = "Argentina" países(1) = "Perú" países(2) = "Brasil" ' Recorre los elementos del vector For x = 0 To 2 MsgBox "Nombre del país : " & países(x) Next x 

Utilizar una estructura Type o UDT en un arreglo Como vimos, en un arreglo podemos almacenar datos de cualquier tipo pero no mezclarlos, es decir podemos crear arreglos de tipo string , de tipo Integer etc , pero sin duda que lo mas importante y de mas utilidad a la hora de programar es la utilización de datos definidos por nosotros mediante una estructura Type Por ejemplo: Option Explicit ' Estructura de dato para el vector Private Type agenda nombre As String apellido As String cpostal As Integer End Type ' Declaramos el vector Dim personas (1 To 3) As agenda

Private Sub Form_Load () ' Llenamos con datos para el elemento 1 del arreglo personas(1).nombre = " carlos " personas(1).apellido = "Martínez" personas(1). cpostal = 1900 ' Llenamos con datos para el elemento 2 del arreglo personas(2).nombre = "Héctor" personas(2).apellido = "rosales" personas(2). cpostal = 1898 ' Llenamos con datos para el elemento 3 del arreglo personas(3).nombre = "Albert" personas(3).apellido = "Einstein" personas(3). cpostal = 1324 End Sub 

Para utilizar una estructura definida por nosotros en vectores o matrices, se hace de la forma habitual, con la diferencia que debemos declarar el arreglo utilizando el tipo de dato Type que hayamos creado, en este caso Dim personas(1 to 3) as agenda Vectores dinámicos Hasta ahora habíamos visto solo 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 , y un ejemplo de como aplicarla sería de la siguiente manera: Dim alumnos () as string

ReDim alumnos(1 To 4) As String alumnos(1) = "Luciano" alumnos(2) = "Esteban" alumnos(3) = "Mariano" alumnos(4) = "Pedro“ 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) = "Karina alumnos(6) = "Raúl“ alumnos(7) = "Romina“ Nota : si utilizamos la sentencia ReDim , o mejor dicho si redimensionamos el vector sin utilizar la sentencia ReDim preserve , los valores que contenía el vector anteriormente se perderán

Eliminar o vaciar un vector Para eliminar un array , arreglo o vector, podemos utilizar Erase , por ejemplo: Erase Nombre_Del_Vector

ARRAYS O ARREGLOS MULTIDIMENSIONALES   Tal y como explicamos en su momento, será posible crear arrays con más de una dimensión, pasando de la idea de lista, vector o matriz de una sola fila a la idea de matriz de m x n elementos, estructuras tridimensionales, tetradimensionales , etc. La sintaxis será: Dim [Nombre del array ]([dimensión1, dimensión2, ...]) As [Tipo de variable] Si no se declara el tipo de variable el array será tipo Variant por defecto. Conviene tener cuidado con esto y seguir las mismas pautas que hemos indicado para las variables. La declaración de una matriz tradicional de m x n elementos podría ser:   Dim A(3, 2) As Integer El número de elementos declarados depende de cómo tengamos establecido Option Base. Si está fijado en uno, la matriz será de 3 filas (1, 2 y 3) y dos columnas (1 y 2) siendo por tanto el número de elementos 3 x 2 = 6 mientras que si está fijado en cero tendremos que el número de elementos será de 4 x 3 = 12.  

Ejemplo: queremos almacenar en una matriz el número de alumnos con que cuenta una academia ordenados en función del nivel y del idioma que se estudia. Tendremos 3 filas que representarán Nivel básico , medio o de perfeccionamiento y 4 columnas que representarán los idiomas ( 1 = Inglés, 2 = Francés, 3 = Alemán y 4 = Ruso ). La declaración de dicha matriz sería: Dim Alumnosfxniveleidioma (3, 4) Podríamos asignar contenidos de la siguiente manera:   Alumnosfxniveleidioma (1, 1) = 7 Alumnosfxniveleidioma (1, 2) = 14 Alumnosfxniveleidioma (1, 3) = 8 Alumnosfxniveleidioma (1, 4) = 3 Alumnosfxniveleidioma (2, 1) = 6 Alumnosfxniveleidioma (2, 2) = 19 Alumnosfxniveleidioma (2, 3) = 7 Alumnosfxniveleidioma (2, 4) = 2 Alumnosfxniveleidioma (3, 1) = 3 Alumnosfxniveleidioma (3, 2) = 13 Alumnosfxniveleidioma (3, 3) = 4 Alumnosfxniveleidioma (3, 4) = 1 7 14 8 3 6 19 7 2 3 13 4 1

La representación gráfica que podríamos asociar a esta asignación de datos sería esta matriz:

Funciones de VB para trabajar con Arreglos - LBound y UBound Estas funciones son ideales para trabajar con vectores y matrices que han sido declaradas dinámicamente Lbound y Ubound nos devuelve un número de tipo Long que nos permite saber el límite superior e inferior de un vector o una matriz .   Ejemplo de Ubound y Bound Private Sub Form_Load () 'Variables Para almacenar los límites superior e inferior Dim LimiteInferior As Long Dim LimiteSuperior As Long 'Declaramos 3 matrices, de una dimensión, _ de dos dimensiones y de 3 Dim UnVector (1 To 520) As Integer Dim UnaMatriz (20, 5 To 100) As String D im OtraMatriz (10, 20, 30) As Long

' Devuelve 1 LimiteInferior = LBound ( UnVector ) ' Devuelve 520 LimiteSuperior = UBound ( UnVector ) ' Devuelve 0 LimiteInferior = LBound ( UnaMatriz , 1) ' Devuelve 20 LimiteSuperior = UBound ( UnaMatriz , 1) ' Devuelve 5 LimiteInferior = LBound ( UnaMatriz , 2) ' Devuelve 100 LimiteSuperior = UBound ( UnaMatriz , 2) ' Devuelve 0 LimiteInferior = LBound ( OtraMatriz , 1) ' Devuelve 10 LimiteSuperior = UBound ( OtraMatriz , 1) ' Devuelve 0 LimiteInferior = LBound ( OtraMatriz , 2)

' Devuelve 20 LimiteSuperior = UBound ( OtraMatriz , 2) ' Devuelve 0 LimiteInferior = LBound ( OtraMatriz , 3) ' Devuelve 30 LimiteSuperior = UBound ( OtraMatriz , 3) End Sub   Ejercicio3: Realizar una aplicación que lea las notas correspondientes a los alumnos de un determinado curso, las almacene en una matriz y de cómo resultado las nota media del curso.

Ejemplo 2 de LBound y UBound :   For x = LBound (vector) To UBound (vector) MsgBox vector(x) Next i  Función Join , Split y Filter :   Estas funciones están relacionadas con el tratamiento de las cadenas de caracteres. Función Join Esta función se utiliza para unir en una sola variable el conjunto de subcadenas de un vector. Esta función tiene solo 2 parámetros y es muy fácil de usar. Ejemplo Dim micadena as string Dim vector (1 To 3) As String vector (1) = "Carlos“ vector (2) = "Pedro“ vector (3) = "Juan"

Ahora ejecutando Join , la variable micadena pasaría a valer "Carlos-Pedro-Juan“ micadena = join (vector, "-") Nota : En el primer parámetro de la función debemos indicar el vector en el cual trabajar, y en el segundo se debe indicar un delimitador de caracter para separar las cadenas. Si no especificamos ninguno, visual basic utilizará por defecto un espacio vacío o en blanco (" ") para separar cada subcadena . Función Split: Esta función hace el trabajo inverso de la función Join . Split se utiliza para rellenar un vector dinámico que contiene un número de subcadenas a partir de una cadena que le pasamos como parámetro a la función. Para aclarar un poco un ejemplo

  Private Sub Form_Load () 'Una variable para almacenar una cadena Dim Micadena As String 'Vector dinámico Dim Vector() As String 'Le damos un valor a la variable Micadena = " maria / natalia /romina" 'Ejecutamos la función Split Vector = Split( Micadena , "/") 'Ahora el vector dinámico pasaría a _ contener los siguientes valores: Vector(0) = "maría" Vector(1) = " natalia " Vector(2) = "Romina" End Sub Nota : una cosa importante es que en el vector anterior no se ha declarado un rango , ya que la función devuelve un vector cuya cantidad de elementos se ignora , es decir no se conoce.

Función Filter : La función Filter se utiliza para filtrar subcadenas de un vector dependiendo de un determinado criterio de búsqueda. Los parámetros que lleva la función son los siguientes: Filter ( vector donde buscar , cadena a buscar , valor booleano que indica si incluir o excluir la cadena ) Ejemplo: ' Vector Dim Alumnos(1 To 4) As String ' Vector dinámico para almacenar el resultado Dim Resultado() As String Alumnos(1) = "Luciano" Alumnos(2) = "Lucas" Alumnos(3) = " juan " Alumnos(4) = "Natalia" ' Ejecutamos Filter Resultado = Filter ( Alumnos , "Lu", True) ' Ahora el vector dinámico " resultado " pasa a contener MsgBox Resultado(0), vbInformation ' Luciano MsgBox Resultado(1), vbInformation ' Lucas  

Arreglos de controles en visual basic Hasta acá se vio los aspectos de los vectores y matrices como estructuras que nos permiten almacenar datos y resolver problemas lógicos en nuestros programas. Ahora veremos los Arreglos de controles o vectores de controles Un arreglo de controles es un conjunto de controles, todos de la misma clase (todos TextBox , todos Label , etc...) que poseen un mismo nombre y cada uno posee un número de índice que los identifica y los hace únicos con respecto a los demás, y conformando entonces un vector de controles. Por ejemplo en vez de tener 3 Command , llamados command1, command2 y command3, puedo crear un arreglo de 3 botones. Estos 3 botones comparten el mismo nombre pero cada botón se distingue del resto por un número de índice, es decir si por ejemplo nuestro botón de comando se llama cmd pasaría a tener un cmd (1), un cmd (2) y un cmd (3). En un arreglo de controles todos los controles deben ser del mismo tipo y además no puede haber un control dentro del arreglo que tenga el mismo número de índice , ya que sería imposible identificarlo en el conjunto, además VB no lo permitiría y nos mostraría un error.

Las ventajas principales que tenemos cuando trabajamos con un vector de controles son las siguientes: Todos los controles que forman el arreglo comparten el mismo procedimiento de código, con lo cual si tenemos muchos controles que tienen que ejecutar la misma instrucción no debemos escribir código de más en cada control. Tener 20 cajas de texto, por ejemplo, consumen mucha mas memoria que utilizar un vector de 20 cajas de texto. Es posible crear controles en tiempo de ejecución, a partir de un arreglo de controles ya creado. Es mas fácil manipular y establecer las propiedades en un vector de controles refiriendonos al subíndice de los mismos.

para crear un arreglo de controles Para crear un arreglo de controles podemos hacerlo de 2 maneras. La primera opción es copiar un control ya dibujado y pegarlo en el formulario . Luego visual basic nos mostrará un diálogo preguntándonos si queremos crear una matriz de controles . Al contestar que si, ya se ha creado un arreglo con 2 controles, en este caso el primer control tendrá el índice 0 y el que pegamos el índice 1. Si queremos seguir agregando mas controles cuando peguemos nuevamente otro control visual basic no nos preguntará nuevamente si deseamos crear una matriz del control ya que esta ya está creada , y por lo tanto agregará un nuevo control y le agregará el número de índice correspondiente para diferenciarlo del resto , en este caso el 2. Ahora si observas en la propiedad index de los controles que forman el arreglo verás que estos tienen un número de índice que antes no tenían al no formar parte de un arreglo de controles

Nota : cualquier control de visual basic que no tenga un arreglo creado, la propiedad index de los mismos no tendrá ningún número o valor, ya que esta propiedad está reservada para los controles que formen parte de un vector o arreglo. La otra opción para crear un arreglo, es ingresar directamente el número de índice en la propiedad index del control del cual queremos crear un arreglo.

En este formulario hemos definido 6 Labels denominados Label1(0), Label1(1), Label1(2), Label1(3), Label1(4) y Label1(5) así como 6 TextBox denominados Text1(0), Text1(1), Text1(2), Text1(3), Text1(4) y Text1(5). Supongamos que tenemos 9 cajas de texto en las que debemos escribir el texto "hola". Si no utilizaramos un arreglo deberíamos escribir: txt1.text = "hola" txt2.text = "hola" txt9.text = "hola" El mismo código mediante un arreglo cuyo nombre es a: a (0). text = "hola" a (1). text = "hola“ a (8). text = "hola"

En los dos casos anteriores debíamos escribir código para los 9 cuadros de texto. En cambio podemos simplificar utilizando un ciclo For : For I = 0 to 9 a (I). text = "hola" Next

Para los eventos aparecerá junto al nombre del objeto y el evento, un valor de Index , el cual nos indica sobre qué objeto se hizo click (se puede visualizar desde la ventana de propiedades buscando el valor de Index ). Veamos un ejemplo utilizando index : Private Sub Cmd_Click ( Index As Integer ) 'Evento click que acturá solo 'sobre el botón Rojo ( Cmd (3)) y sobre botón Salir ( Cmd (4)) If Cmd (3) Then Form1.BackColor = RGB(150, 0, 0) End If If Cmd (4) Then End End If End Sub

Private Sub Form_Load () 'El número entre paréntesis 'indica el subíndice Cmd (3). Caption = "Rojo" Cmd (4). Caption = "Salir" 'Los tres primeros botones 'tendrán el nombre de "botón" For I = 0 To 2 Cmd (I). Caption = "botón" Next End Sub

Ejercicio : Hay ocho Picture Box (caja de imagen) conformando una matriz de control llamada P. Luego de creada la matriz agregamos en la ventana de propiedades un color distinto para cada caja de imagen. También habrá una caja de imagen llamada I ( picture box) que deberá tomar el color de la Caja de Imagen seleccionada. Private Sub P _ Click ( Index As Integer ) I.BackColor = P( Index ). BackColor End Sub

En el siguiente ejemplo mediante un arreglo de cajas de texto llamadas Tb, en sucesivos click del botón Cmdcambiar el valor de cada Tb irá aumentando. El valor de Tb(0) ha sido colocado en 0 en el propio formulario y por este motivo, ese será el valor que tendrá en el inicio. Con sucesivos click el valor indicado irá cambiando. Para no crear confusión se ha utilizado Forecolor con el color blanco, de esta forma el número acumulado no se ve. Private Sub Cmdcambiar_Click () Tb(1). Text = Tb(0). Text + 1 Tb(2). Text = Tb(1). Text + 1 Tb(3). Text = Tb(2). Text + 1 Tb(0). Text = Tb(3). Text + 1 Tb(0). ForeColor = RGB(255, 255, 255) End Sub Private Sub Form_Load () Tb(0).Text = 0 End Sub

Dim cubo (1 to 3, 1 to 3, 1 to 3) as integer para acceder a los datos sería exactamente de la misma manera pero debemos utilizar un índice mas. Ejemplo: cubo (1, 1 , 1) = 50 cubo (1, 1 , 2) = 50 cubo (1, 1 , 3) = 50 cubo (1, 2 , 1) = 50 cubo (1, 2 , 2) = 50 cubo (1, 2 , 3) = 50 cubo (1, 3 , 1) = 50 cubo (1, 3 , 2) = 50

cubo (1, 3 , 3) = 50 cubo (2, 1 , 1) = 50 cubo (2, 1 , 2) = 50 cubo (2, 1 , 3) = 50 cubo (2, 2 , 1) = 50 cubo (2, 2 , 2) = 50 cubo (2, 2 , 3) = 50 cubo (2, 3 , 1) = 50 cubo (2, 3 , 2) = 50 cubo (2, 3 , 3) = 50 cubo (3, 1 , 1) = 50 cubo (3, 1 , 2) = 50 cubo (3, 1 , 3) = 50 cubo (3, 2 , 1) = 50 cubo (3, 2 , 2) = 50 cubo (3, 2 , 3) = 50 cubo (3, 3 , 1) = 50 cubo (3, 3 , 2) = 50 cubo (3, 3 , 3) = 50

En estos ciclos, (también llamados bucles) " While - Wend " la cantidad de veces que se repiten las sentencias dentro del ciclo dependen exclusivamente de que se verifique como válida la condición de ese ciclo. A esto se lo llama condición del ciclo y se estructura de la siguiente manera: While (condición) --------- --------- Wend Veamos un ejercicio simple

Private Sub ej_1_Click() a = 1 While a < 5 Print a a = a + 1 Wend End Sub Private Sub ej_2_Click() a = 4 While a > 0 Print a a = a - 1 Wend End Sub

Private Sub ej_1_Click() For a = 1 To 4 Print a Next End Sub Private Sub ej_2_Click() For a = 4 To 1 Step -1 Print a Next End Sub

Teniendo $1.000 se desean comprar productos que valen $7 cada uno ¿Cuantos productos puedo comprar? Private Sub btnejercicio_Click () While Total < 1000 - 6 Total = Total + 7 Cantidad = Cantidad + 1 Wend Print Total, Cantidad End Sub