INTRODUCCION A LA PROGRAMACION

 

Lección 14: Arreglos

 

            14.1 Introducción a las Estructuras de Datos.

            14.2 Arreglos Unidimensionales: Vectores

            14.3 Vectores Estáticos en VB

            14.4 Vectores Dinámicos en VB

            14.5 Ordenando un Vector

            14.6 Ejercicios

 

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

 

Arriba

 

14.2 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

 

Arriba

 

14.3 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

 

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

 

------------------------------------------------------------------------

Implemente el ejemplo completándolo con la protección contra errores de entrada. Compruebe que funciona correctamente.

¿Resulta necesaria la utilización de un arreglo para resolver este problema?

 

Modifique el ejemplo para calcular también la desviación media. ¿Resulta necesaria la utilización de un arreglo para resolver este problema?

 

Arriba

 

14.4 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

-------------------------------------------------------------------------------

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

-------------------------------------------------------------------------------

Implemente el ejemplo completándolo con la protección contra errores de entrada. Compruebe que funciona correctamente.

 

El rango del vector puede cambiarse reiteradamente durante la corrida del programa.

 

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

 

 

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

-----------------------------------------------------------

 

Note como el vector es redimensionado cada vez que se introduce un nuevo número.

 

Implemente el ejemplo completándolo con la protección contra errores de entrada. Compruebe que funciona correctamente.

 

Arriba

 

14.5 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. El ejemplo 4 ilustra una aplicación que utiliza este algoritmo.

 

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

-----------------------------------------------------------

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

-----------------------------------------------------------

Arriba

 

14.6 Ejercicios

 

  • Modifique el ejemplo 3 para que determine e imprima el valor máximo y mínimo.
  • Implemente una aplicación que entre las coordenadas x, y de 10 puntos y ajuste (calcular la pendiente e intercepto) la mejor recta utilizando el método de los mínimos cuadrados.
  • Modifique el ejercicio anterior para que además represente gráficamente la recta.
  • Modifique el ejemplo 4 para que ordene los números descendentemente.
  • Modifique el ejemplo 4 para que el usuario entre el rango del vector durante la corrida del programa.
  • Estudiar el algoritmo de ordenación por burbuja y modificar el ejemplo 4 según dicho algoritmo.
  • Estudiar el algoritmo de ordenación por inserción y modificar el ejemplo 4 según dicho algoritmo.

 

Arriba