arrays en vb 6.0

53
Mayo 2013

Upload: kurtz-ledezma

Post on 08-Jul-2015

396 views

Category:

Education


3 download

DESCRIPTION

Arreglos y mas en Visual Basic

TRANSCRIPT

Page 1: Arrays en VB 6.0

Mayo 2013

Page 2: Arrays en VB 6.0
Page 3: Arrays en VB 6.0
Page 4: Arrays en VB 6.0
Page 5: Arrays en VB 6.0

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úsculastendrí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 30nombres(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á elarreglo, 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

Page 6: Arrays en VB 6.0

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"

Page 7: Arrays en VB 6.0

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

Page 8: Arrays en VB 6.0

Utilizar una estructura Type o UDT en un arreglo

Como vimos, en un arreglo podemos almacenar datos de cualquier tipo pero nomezclarlos, es decir podemos crear arreglos de tipo string, de tipo Integer etc, pero sinduda que lo mas importante y de mas utilidad a la hora de programar es la utilización dedatos definidos por nosotros mediante una estructura Type

Por ejemplo:

Option Explicit' Estructura de dato para el vector

Private Type agenda

nombre As Stringapellido As Stringcpostal As Integer

End Type

' Declaramos el vectorDim personas(1 To 3) As agenda

Page 9: Arrays en VB 6.0

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 arreglopersonas(3).nombre = "Albert"personas(3).apellido = "Einstein"personas(3).cpostal = 1324

End Sub

Page 10: Arrays en VB 6.0

Para utilizar una estructura definida por nosotros en vectores o matrices, se hace de laforma habitual, con la diferencia que debemos declarar el arreglo utilizando el tipo dedato 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é pasacuando 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 vectoren tiempo de ejecución, dándonos así mas flexibilidad, y de esta manera no desperdiciarmemoria y recursos de la pc creando vectores mas largos de lo que realmentenecesitamos.

Esta función se llama ReDim y ReDim Preserve , y un ejemplo de como aplicarla sería dela siguiente manera:

Dim alumnos () as string

Page 11: Arrays en VB 6.0

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 lafunción ReDim Preserve, para preservar los 4 valores anteriores y le agregamos 3 valoresmas:

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 sinutilizar la sentencia ReDim preserve, los valores que contenía el vector anteriormente seperderán

Page 12: Arrays en VB 6.0

Eliminar o vaciar un vector

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

Erase Nombre_Del_Vector

Page 13: Arrays en VB 6.0

ARRAYS O ARREGLOS MULTIDIMENSIONALES

Tal y como explicamos en su momento, será posible crear arrays con más de unadimensión, pasando de la idea de lista, vector o matriz de una sola fila a la idea de matrizde 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 tenercuidado con esto y seguir las mismas pautas que hemos indicado para las variables. Ladeclaració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 portanto el número de elementos 3 x 2 = 6 mientras que si está fijado en cero tendremos queel número de elementos será de 4 x 3 = 12.

Page 14: Arrays en VB 6.0

Ejemplo: queremos almacenar en una matriz el número de alumnos con que cuenta unaacademia 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 4columnas que representarán los idiomas (1 = Inglés, 2 = Francés, 3 = Alemán y 4 = Ruso). Ladeclaración de dicha matriz sería:

Dim Alumnosfxniveleidioma(3, 4)

Podríamos asignar contenidos de la siguiente manera:

Alumnosfxniveleidioma(1, 1) = 7Alumnosfxniveleidioma(1, 2) = 14Alumnosfxniveleidioma(1, 3) = 8Alumnosfxniveleidioma(1, 4) = 3Alumnosfxniveleidioma(2, 1) = 6Alumnosfxniveleidioma(2, 2) = 19Alumnosfxniveleidioma(2, 3) = 7Alumnosfxniveleidioma(2, 4) = 2 Alumnosfxniveleidioma(3, 1) = 3Alumnosfxniveleidioma(3, 2) = 13Alumnosfxniveleidioma(3, 3) = 4Alumnosfxniveleidioma(3, 4) = 1

7 14 8 3

6 19 7 2

3 13 4 1

Page 15: Arrays en VB 6.0

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

Page 17: Arrays en VB 6.0

Funciones de VB para trabajar con Arreglos - LBound y UBound

Estas funciones son ideales para trabajar con vectores y matrices que han sido declaradasdinámicamente Lbound y Ubound nos devuelve un número de tipo Long que nos permitesaber 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 LongDim LimiteSuperior As Long

'Declaramos 3 matrices, de una dimensión, _ de dos dimensiones y de 3

Dim UnVector(1 To 520) As IntegerDim UnaMatriz(20, 5 To 100) As String Dim OtraMatriz(10, 20, 30) As Long

Page 18: Arrays en VB 6.0

' 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)

Page 19: Arrays en VB 6.0

' 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 deun determinado curso, las almacene en una matriz y de cómo resultado las notamedia del curso.

Page 20: Arrays en VB 6.0

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 decaracteres.

Función JoinEsta función se utiliza para unir en una sola variable el conjunto de subcadenas deun vector. Esta función tiene solo 2 parámetros y es muy fácil de usar. Ejemplo

Dim micadena as stringDim vector(1 To 3) As Stringvector(1) = "Carlos“vector(2) = "Pedro“vector(3) = "Juan"

Page 21: Arrays en VB 6.0

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, yen el segundo se debe indicar un delimitador de caracter para separar las cadenas. Si noespecificamos 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 apartir de una cadena que le pasamos como parámetro a la función.Para aclarar un poco un ejemplo

Page 22: Arrays en VB 6.0

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.

Page 23: Arrays en VB 6.0

Función Filter :

La función Filter se utiliza para filtrar subcadenas de un vector dependiendo de undeterminado 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 excluirla cadena)

Ejemplo:

' VectorDim Alumnos(1 To 4) As String' Vector dinámico para almacenar el resultadoDim Resultado() As StringAlumnos(1) = "Luciano"Alumnos(2) = "Lucas"Alumnos(3) = "juan"Alumnos(4) = "Natalia"' Ejecutamos FilterResultado = Filter(Alumnos, "Lu", True)' Ahora el vector dinámico "resultado" pasa a contenerMsgBox Resultado(0), vbInformation ' LucianoMsgBox Resultado(1), vbInformation ' Lucas

Page 24: Arrays en VB 6.0

Arreglos de controles en visual basic

Hasta acá se vio los aspectos de los vectores y matrices como estructuras que nos permitenalmacenar datos y resolver problemas lógicos en nuestros programas. Ahora veremos los

Arreglos de controles o vectores de controlesUn arreglo de controles es un conjunto de controles, todos de la misma clase (todosTextBox, 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 conformandoentonces un vector de controles.

Por ejemplo en vez de tener 3 Command, llamados command1, command2 ycommand3, puedo crear un arreglo de 3 botones. Estos 3 botones comparten el mismonombre pero cada botón se distingue del resto por un número de índice, es decir si porejemplo nuestro botón de comando se llama cmd pasaría a tener un cmd(1), un cmd (2) yun cmd(3).

En un arreglo de controles todos los controles deben ser del mismo tipo y además no puedehaber un control dentro del arreglo que tenga el mismo número de índice, ya que seríaimposible identificarlo en el conjunto, además VB no lo permitiría y nos mostraría un error.

Page 25: Arrays en VB 6.0

Las ventajas principales que tenemos cuando trabajamos con un vector de controles son lassiguientes:

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 nodebemos escribir código de más en cada control.

Tener 20 cajas de texto, por ejemplo, consumen mucha mas memoria que utilizar un vectorde 20 cajas de texto.

Es posible crear controles en tiempo de ejecución, a partir de un arreglo de controles yacreado.

Es mas fácil manipular y establecer las propiedades en un vector de controles refiriendonosal subíndice de los mismos.

Page 26: Arrays en VB 6.0

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 visualbasic 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 primercontrol tendrá el índice 0 y el que pegamos el índice 1.

Si queremos seguir agregando mas controles cuando peguemos nuevamente otro controlvisual basic no nos preguntará nuevamente si deseamos crear una matriz del control ya queesta 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 enla propiedad index de los controles que forman el arreglo verás que estos tienen unnúmero de índice que antes no tenían al no formar parte de un arreglo de controles

Page 27: Arrays en VB 6.0
Page 28: Arrays en VB 6.0

Nota: cualquier control de visual basic que no tenga un arreglo creado, la propiedad indexde los mismos no tendrá ningún número o valor, ya que esta propiedad está reservada paralos 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 lapropiedad index del control del cual queremos crear un arreglo.

Page 29: Arrays en VB 6.0

En este formulario hemos definido 6 Labels denominadosLabel1(0), Label1(1), Label1(2), Label1(3), Label1(4) y Label1(5) así como 6 TextBoxdenominados 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". Sino 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"

Page 30: Arrays en VB 6.0

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 9a (I).text = "hola"Next

Page 31: Arrays en VB 6.0

Para los eventos aparecerá junto al nombre del objeto y el evento, un valor de Index, el cualnos indica sobre qué objeto se hizo click (se puede visualizar desde la ventana depropiedades 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) ThenForm1.BackColor = RGB(150, 0, 0)End If

If Cmd(4) ThenEndEnd IfEnd Sub

Page 32: Arrays en VB 6.0

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

Page 33: Arrays en VB 6.0

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).BackColorEnd Sub

Page 34: Arrays en VB 6.0

En el siguiente ejemplo mediante un arreglo de cajas de texto llamadas Tb, en sucesivosclick del botón Cmdcambiar el valor de cada Tb irá aumentando. El valor de Tb(0) ha sidocolocado en 0 en el propio formulario y por este motivo, ese será el valor que tendrá en elinicio. Con sucesivos click el valor indicado irá cambiando. Para no crear confusión se hautilizado 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 + 1Tb(2).Text = Tb(1).Text + 1Tb(3).Text = Tb(2).Text + 1Tb(0).Text = Tb(3).Text + 1Tb(0).ForeColor = RGB(255, 255, 255)End Sub

Private Sub Form_Load()Tb(0).Text = 0End Sub

Page 35: Arrays en VB 6.0
Page 36: Arrays en VB 6.0
Page 37: Arrays en VB 6.0
Page 38: Arrays en VB 6.0
Page 39: Arrays en VB 6.0
Page 40: Arrays en VB 6.0
Page 41: Arrays en VB 6.0
Page 42: Arrays en VB 6.0
Page 43: Arrays en VB 6.0

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) = 50cubo (1, 1 , 2) = 50cubo (1, 1 , 3) = 50cubo (1, 2 , 1) = 50cubo (1, 2 , 2) = 50cubo (1, 2 , 3) = 50cubo (1, 3 , 1) = 50cubo (1, 3 , 2) = 50

Page 44: Arrays en VB 6.0
Page 45: Arrays en VB 6.0

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

Page 46: Arrays en VB 6.0
Page 47: Arrays en VB 6.0
Page 48: Arrays en VB 6.0
Page 49: Arrays en VB 6.0

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)------------------WendVeamos un ejercicio simple

Page 50: Arrays en VB 6.0
Page 51: Arrays en VB 6.0

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

Page 52: Arrays en VB 6.0

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

Page 53: Arrays en VB 6.0

Teniendo $1.000 se desean comprar productos que valen $7 cada uno ¿Cuantos productos puedo comprar?

Private Sub btnejercicio_Click()While Total < 1000 - 6Total = Total + 7Cantidad = Cantidad + 1WendPrint Total, CantidadEnd Sub