Como hemos visto cuando se define un vector indicamos entre paréntesis un valor entero que nos indica cuantos elementos podemos almacenar, a dicho valor hay que sumarle uno ya que las componentes se enumeran a partir de cero:
Private sueldos(4) As Integer
En la línea anterior estamos definiendo un vector con 5 componentes de tipo entera.
Luego cuando tenemos que recorrer dicho vector disponemos una estructura repetitiva For:
Public Sub Cargar() Dim f As Integer For f = 0 To 4 Console.Write("Ingrese importe del sueldo:") sueldos(f) = Console.ReadLine() Next End Sub
Como vemos el For se repite mientras el contador f vale menos o igual a cuatro. Este estructura repetitiva es idéntica cada vez que recorremos el vector.
Que pasa ahora si cambiamos el tamaño del vector cuando lo definimos:
Private sueldos(7) As Integer
Con esto tenemos que cambiar todos los For que recorren dicho vector. Ahora veremos que un vector al ser un objeto tiene un método llamada GetUpperBound que retorna el valor del último índice del vector. Luego podemos modificar todos los For con la siguiente sintaxis:
Public Sub Cargar() Dim f As Integer For f = 0 To sueldos.GetUpperBound(0) Console.Write("Ingrese sueldo:") sueldos(f) = Console.ReadLine() Next End Sub
Cuando llamamos a GetUpperBound debemos pasar el valor cero (ya veremos más adelante con matrices y arreglos multidimensionales porque es este valor cero)
El problema completo utilizando el método GetUpperBound:
Module Module1 Public Class PruebaVector8 Private sueldos(4) As Integer Public Sub Cargar() Dim f As Integer For f = 0 To sueldos.GetUpperBound(0) Console.Write("Ingrese sueldo:") sueldos(f) = Console.ReadLine() Next End Sub Public Sub Imprimir() Dim f As Integer For f = 0 To sueldos.GetUpperBound(0) Console.WriteLine(sueldos(f)) Next Console.ReadKey() End Sub End Class Sub Main() Dim pv As New PruebaVector8() pv.Cargar() pv.Imprimir() End Sub End Module
También podemos pedir al usuario que indique el tamaño del vector en tiempo de ejecución, en estos casos se hace imprescindible el empleo del método GetUpperBound.
Se desea almacenar los sueldos de operarios. Cuando se ejecuta el programa se debe pedir la cantidad de sueldos a ingresar. Luego crear un vector con dicho tamaño.
Module Module1 Public Class PruebaVector8 Private sueldos() As Integer Public Sub Cargar() Dim tam As Integer Console.Write("Cuantos empleados hay?") tam = Console.ReadLine() ReDim sueldos(tam - 1) Dim f as Ingeger For f = 0 To sueldos.GetUpperBound(0) Console.Write("Ingrese sueldo:") sueldos(f) = Console.ReadLine() Next End Sub Public Sub Imprimir() Dim f as Integer For f = 0 To sueldos.GetUpperBound(0) Console.WriteLine(sueldos(f)) Next Console.ReadKey() End Sub End Class Sub Main() Dim pv As New PruebaVector8() pv.Cargar() pv.Imprimir() End Sub End Module
Cuando declaramos el vector no indicamos tamaño:
Private sueldos() As Integer
Luego para la creación del mismo ingresamos una variable entera y la utilizamos el comando Redim seguido del nombre del vector y entre paréntesis el índice final del vector a crear:
Dim tam As Integer Console.Write("Cuantos empleados hay?") tam = Console.ReadLine() ReDim sueldos(tam - 1)
Disponemos tam-1 ya que si el operador ingresa que la empresa tiene 5 empleados luego debemos crear el vector con 5 componentes.
Luego las estructuras repetitivas las acotamos accediendo al método GetUpperBound del vector:
For f = 0 To sueldos.GetUpperBound(0) Console.Write("Ingrese sueldo:") sueldos(f) = Console.ReadLine() Next
Module Module1 Public Class PruebaVector9 Private vec() As Integer Public Sub Cargar() Dim n As Integer Console.Write("Cuantos elementos tiene el vector:") n = Console.ReadLine() ReDim vec(n - 1) For f = 0 To vec.GetUpperBound(0) Console.Write("Ingrese elemento:") vec(f) = Console.ReadLine() Next End Sub Public Sub AcumularElementos() Dim suma As Integer = 0 Dim f As Integer For f = 0 To vec.GetUpperBound(0) suma = suma + vec(f) Next Console.WriteLine("La suma de los elementos es:" & suma) Console.ReadKey() End Sub End Class Sub Main() Dim pv As New PruebaVector9() pv.Cargar() pv.AcumularElementos() End Sub End Module