Unidad 34. Arrays en VB (IV)





34.5. Operaciones.

La existencia de las estructuras de datos, arrays o listas, tiene como fin el resolver problemas a la hora de desarrollar programas, por lo tanto su misión es la de almacenar datos u objetos, y la de localizarlos o acceder a ellos posteriormente.

Por lo tanto un array tiene distintos tipos de operaciones.

La principal acceder a los datos. Hay que recalcar que un vector o matriz permiten el acceso a sus datos de manera inmediata, sin necesidad de realizar búsquedas, lo cual es muy práctico en muchas ocasiones.

Pero no siempre es posible estructurar los datos de forma que se pueda acceder cómodamente y en algunas ocasiones hay que realizar búsquedas.

En otros momentos los datos en un array, no pueden guardarse de forma adecuada, y es necesario realizar operaciones de clasificación para obtenerlos en la forma adecuada o que nos interesa para el programa.

1    Acceso.

El acceso, si los datos están adecuadamente utilizados, es directo sin necesidad de realizar una búsqueda.

 

En el siguiente ejemplo, no es necesario buscar un elemento, delante del mes de Enero, hay un valor nulo, de forma que toma el índice cero y así Enero es el índice uno.

 

  Dim Meses() As String = {"Enero", "Febrero", "Marzo", "Abril", _

                           "Mayo", "Junio", "Julio", "Agosto", _

                           "Septiembre","Octubre", "Noviembre", "Diciembre"}

 

Sabemos que el mes de Enero es el número uno en el año, Febrero el dos, etc..

Por lo tanto podemos perfectamente, sin necesidad de buscar el dato, hacer lo siguiente.

 

 Console.Writeln(NomMeses(mes))

 

Siendo “mes” una variable que contiene el mes de la fecha con la que trabajamos.

Pero como siempre eso no es posible, a veces hay que buscar la información.

2    Copia.

Una de las acciones posibles es la copia del contenido de un vector sobre otro.

Para ello en VB disponemos del método Copy, que lo realiza con comodidad.

La sintaxis de éste método es la siguiente

 

  Meses.Copy(Meses, OtrosMeses, OtrosMeses.GetUpperBound(0))

 

Donde:

Meses                                                 Es el origen

OtrosMeses                                         Es el destino

OtrosMeses.GetUpperBound(0)            El número de elementos que deseamos copiar

 

OtrosMeses.GetUpperBound(0) lo utilizamos para indicar cuantos elementos deseamos copiar, ya que nos devuelve el número de elementos que tiene el vector de destino.

 

Existe otra alternativa que es Clone, a diferencia de Clone, Copy hace un duplicado del vector, solo del número de elementos que se indica en el argumento.

 

El programa podría quedar como sigue:

 

  Private Sub Copia()

    Dim Meses() As String = {"Enero", "Febrero", "Marzo", "Abril", _

                             "Mayo", "Junio", "Julio", "Agosto", _

                             "Septiembre","Octubre", "Noviembre", "Diciembre"}

    ' Le damos cinco elementos

    Dim OtrosMeses(5) As String

    Dim Valor As String

    Console.WriteLine("Visualizamos el contenido ")

    Console.WriteLine("Elementos del vector {0} ", Meses.Length)

 

    ' Visualizamos el vector

    For Each Valor In Meses

      Console.WriteLine(Valor)

    Next

 

    ' Copiamos el vector

    Meses.Copy(Meses, OtrosMeses, OtrosMeses.GetUpperBound(0))

 

    Console.WriteLine("Elementos vector {0} ", OtrosMeses.Length)

 

    Console.WriteLine("Visualizamos el contenido ")

 

    ' Visualizamos el vector

    For Each Valor In OtrosMeses

      Console.WriteLine(Valor)

    Next

    Console.ReadLine()

  End Sub

 

3    Clasificación.

Con las búsquedas sucede lo mismo, hay distintos tipos de algoritmos, unos más eficientes y otros menos, y como siempre depende del momento y lo que hay que hacer.

Como ejemplo exponemos un método de clasificación, el de la burbuja, el menos eficiente, pero el más fácil de recordar, a partir de ahí, a mejorar.

 

A la clase anterior le podemos añadir éste método, y podremos desde el main visualizar el vector ordenado.

 

  Public Sub OrdenaVectorAscendente()

    Dim Y As Integer

    Dim Fin As Integer = V.Length

    Dim Aux As Integer

    While Fin > 0

      Y = 0

      ' cada pasada se reduce en uno el

      ' número de elementos a comprobar

      Fin = Fin - 1

      ' el mayor, en cada pasada se lleva al final del vector.

      While (Y < Fin)

        ' comprobar si es mayor que el siguiente

        If (V(Y) > V(Y + 1)) Then

          ' intercambio, cuando es mayor

          Aux = V(Y)

          V(Y) = V(Y + 1)

          V(Y + 1) = Aux

        End If

        Y = Y + 1  ' incremento

      End While

    End While

  End Sub

 

En función de cómo guste más la clase, el inicio del método puede ser como se ha visto o como sigue,

 

public Sub  OrdenaVectorAscendente(ByRef V() as Integer)  ' se recibe el vector.

 

Todo depende de que método de inicialización se haya dejado. 

 

Y en el principal del programa queda

 

  Sub Main()           ' No hay ni generación ni envío del vector.

    Dim Objeto As New ClaseVector(10)

    Objeto.GeneraVector()   

    Objeto.VerVector()

    Objeto.OrdenaVectorAscendente()

    Objeto.VerVector()

    Console.ReadKey()

  End Sub

 

Pero si hemos usado la otra opción ...

 

  Sub Main()           ' Si que hay generación y envío del vector.

    Dim V(10) as Integer

    Dim Objeto As New ClaseVector()  

    Objeto.GeneraVector(V)

    Objeto.VerVector(V)

    Objeto.OrdenaVectorAscendente(V)

    Objeto.VerVector(V)

    Console.ReadKey()

  End Sub

 

Expliquemos las diferencias

 

 Sub Main()           ' No hay ni generación ni envío del vector.

    Dim Objeto As New ClaseVector(10)  ' Se crea en la clase, y está en la clase

    Objeto.GeneraVector()   

 

entre estas dos opciones de crear una clase en un programa.

 

  Sub Main()           ' Si que hay generación y envío del vector.

    Dim V(10) as Integer ' Se crea en el programa y se envía a la clase

    Dim Objeto As New ClaseVector()  

    Objeto.GeneraVector(V)     

 

Cuando hemos anulado la declaración del objeto con el envío del vector, la clase no tiene el vector en su poder, por decirlo de alguna forma, por lo que si queremos visualizar el vector, se lo hemos de enviar, la clase solo sabe del vector que recibe, por que no tiene ninguno.

Por lo tanto el método de ordenación, al igual que el de visualización, debe recibir el vector.

 

Octubre-2010
Pág. 34.4

Atrás  Inicio  Adelante






Página inicial  Cursos Informática Gratuitos

Síguenos en:   Facebook       Sobre aulaClic            Política de Cookies