Ejercicios de Visual Basic Prof.: Lic. Toledo Marcelo Alejandro e-mail: [email protected] Arreglos Introducción a las Estructuras de Datos. Arreglos Unidimensionales: Vectores Vectores Estáticos en VB Vectores Dinámicos en VB Ordenando un Vector Introducción a las Estructuras de Datos. Una estructura de datos es una colección de datos que pueden ser caracterizados por su organización y las operaciones que se definen en ella. Los tipos de datos más frecuentemente utilizados son: I. Datos Simples a. Estándar i. Entero ii. Real iii. Carácter iv. Lógico b. No estándar (definido por el programador) i. Subrango ii. Enumerativo II. Datos Estructurados a. Estáticos i. Arreglos (array) ii. Registro iii. Archivo (fichero) iv. Cadena b. Dinámicos i. Lista (pila/cola) ii. Lista enlazada iii. Árbol iv. Grafo Las estructuras de datos estáticas son aquellas en las que el tamaño ocupado en la memoria se define antes de que el programa se ejecute y no puede modificarse durante la corrida. Las estructuras de datos dinámicas no tienen las limitaciones y restricciones en el tamaño de memoria que son propias de las estructuras estáticas. Mediante el uso de un tipo de datos específico, denominado puntero, es posible construir estructuras de datos dinámicas soportadas por la mayoría de los lenguajes de programación. Cuando un lenguaje de programación no soporta un tipo dado de estructura de datos eventualmente puede ser simulada mediante el algoritmo apropiado. Una característica importante que diferencia a los datos simples de los estructurados es que para los datos simples cada variable representa un elemento, mientras que en los datos estructurados cada un identificador (nombre) representa múltiples datos individuales, pudiendo cada una de ellos ser referenciados individualmente. 1 Ejercicios de Visual Basic Prof.: Lic. Toledo Marcelo Alejandro e-mail: [email protected] Arreglos Unidimensionales: Vectores Un arreglo es un conjunto finito y ordenado de elementos homogéneos. La propiedad ordenado significa que el primer elemento, el segundo, el tercero,..., el enésimo puede ser identificado. La homogeneidad implica que todos los elementos del arreglo son datos del mismo tipo. Un vector o arreglo unidimensional consta de n elementos que pueden representarse como: A [1] A[2] A[3] ... A[i] ... A[n} Nótese que todos los elementos comparten el mismo identificador (A en este caso) mientras que el subíndice identifica a cada elemento individual. Al número de elementos de un vector se le denomina rango del vector. Los vectores se almacenan en la memoria central del computador en un orden adyacente de posiciones de memoria sucesivas. Cada elemento de un vector se puede procesar como si fuera una variable simple que ocupa una posición de memoria dada, de manera tal que cada elemento del vector es accesible directamente. Por ejemplo: el vector X[6] está compuesto por seis elementos. Su identificador (nombre del vector) es X y cada elemento se individualiza por su subíndice. X(1) X(2) X(3) X(4) X(5) X(6) 30 33 28 30 31 29 Vectores Estáticos en VB Para poder utilizar un vector en VB primero hay que declararlo, es decir, especificar su identificador, rango y tipo. Esto puede hacerse mediante la instrucción Dim, cuya sintaxis general es: Dim identificador(rango) As tipo Ejemplos: Dim N(12) As Double Dim Monto(2 to 14) as Long Dim T(-272 to 372) as Integer Dim Nombre(100) As String 2 Ejercicios de Visual Basic Prof.: Lic. Toledo Marcelo Alejandro e-mail: [email protected] Ejemplo 1 Implementar una aplicación VB que lea 10 números y calcule e imprima su promedio. GUI Codificación Básica ------------------------------------------------------------------------------General Dim C As Integer Dim Suma As Double Dim X(10) As Double ------------------------------------------------------------------------------Private Sub txtNumero_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then C=C+1 X(C) = Val(txtNumero.Text) Suma = Suma + X(C) lblCantidad = C txtNumero.Text = "" End If If C = 10 Then lblPromedio.Caption = Str$(Suma / 10) txtNumero.Enabled = False End If End Sub 3 Ejercicios de Visual Basic Prof.: Lic. Toledo Marcelo Alejandro e-mail: [email protected] Vectores Dinámicos en VB Visual Basic permite cambiar el rango de un vector durante la ejecución del programa, pero para ello debe declararse este como vector dinámico. Dim identificador( ) As tipo Nótese que se ha dejado vacío el espacio entre paréntesis reservado para fijar el rango del vector. El rango del vector se puede entonces determinar y/o ajustar durante la corrida del programa utilizando la instrucción ReDim, cuya sintaxis general es: ReDim identificador(N ) As tipo Donde N es una variable numérica entera cuyo valor se ha determinado previamente. Ejemplo 2 Implementar una aplicación VB que lea la cantidad de números a promediar y los números, y calcule e imprima su promedio. GUI Codificación Básica ------------------------------------------------------------------------------General Dim C As Integer Dim N As Integer Dim Suma As Double Dim X() As Double 4 Ejercicios de Visual Basic Prof.: Lic. Toledo Marcelo Alejandro e-mail: [email protected] Private Sub txtCantidad_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then N = Val(txtCantidad.Text) txtNumero.Enabled = True txtCantidad.Enabled = False End If End Sub Private Sub txtNumero_KeyPress(KeyAscii As Integer) ReDim X(N) As Double If KeyAscii = 13 Then C=C+1 X(C) = Val(txtNumero.Text) Suma = Suma + X(C) lblCantidad = C txtNumero.Text = "" End If If C = N Then lblPromedio.Caption = Str$(Suma / N) txtNumero.Enabled = False End If End Sub Ejemplo 3 Implementar una aplicación VB que lea una lista de números que termina con la palabra FIN, y calcule e imprima su promedio. GUI 5 Ejercicios de Visual Basic Prof.: Lic. Toledo Marcelo Alejandro e-mail: [email protected] Codificación Básica ----------------------------------------------------------General Dim C As Integer Dim Suma As Double Dim X() As Double ----------------------------------------------------------Private Sub txtNumero_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then If UCase(txtNumero.Text) = "FIN" Then lblPromedio.Caption = Str$(Suma / C) txtNumero.Enabled = False Else C=C+1 ReDim X(C) As Double X(C) = Val(txtNumero.Text) Suma = Suma + X(C) lblCantidad = C txtNumero.Text = "" End If End If End Sub Ordenando un Vector Muchas aplicaciones requieren que se ordenen ascendentemente o descendentemente los elementos de un vector. Existen muchos algoritmos que permiten ejecutar esta tarea, diferenciándose por su complejidad y eficiencia. Uno de los algoritmos de ordenamiento de vectores más simple (aunque no muy eficiente) es el de ordenación por selección. Para ordenar ascendentemente un vector numérico el algoritmo de ordenación por selección utiliza dos bucles anidados, de manera tal que se realizan recorridos sucesivos por el arreglo para localizar el elemento mayor y colocarlo en el lugar que le corresponde en la lista ordenada. 6 Ejercicios de Visual Basic Prof.: Lic. Toledo Marcelo Alejandro e-mail: [email protected] GUI Codificación Básica ----------------------------------------------------------General Dim i As Integer Dim j As Integer Dim c As Integer Dim temp As Double Dim x(1 To 10) As Double ----------------------------------------------------------Private Sub txtNumero_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then c = c+1 x( c ) = val(txtNumero.Text) Picture1.Print x ( c ) If c = 10 Then txtNumero.Enabled =false End If End If End Sub ----------------------------------------------------------- 7 Ejercicios de Visual Basic Prof.: Lic. Toledo Marcelo Alejandro e-mail: [email protected] Private Sub cmdOrdenar_Click() For i = 10 To 1 Step -1 maxIndex = 1 ‘Se determina el indice del elemento mayor en el conjunto x(1) – x(i) For j = 1 To i If x(j) > x(maxIndex) Then maxIndex = j End If Next j ‘Se intercambian los valores de x(i) y el maximo encontrado en el recorrido de arriba temp = x(i) x(i) = x(maxIndex) x(maxIndex) = temp Next i lblNumerosOrdenados.Visible = true Picture1.Cls For i = 1 To 10 Picture1.Print x(i) Next End Sub 8