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.
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.
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
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.
Síguenos en: Facebook Sobre aulaClic Política de Cookies