Hemos empleado variables de distinto tipo para el almacenamiento de datos (variables Integer, Single, String) En esta sección veremos otros tipos de variables que permiten almacenar un conjunto de datos en una única variable.
Un vector es una estructura de datos que permite almacenar un CONJUNTO de datos del MISMO tipo.
Con un único nombre se define un vector y por medio de un subíndice hacemos referencia a cada elemento del mismo (componente)
Se desea guardar los sueldos de 5 operarios.
Según lo conocido deberíamos definir 5 variables si queremos tener en un cierto momento los 5 sueldos almacenados en memoria.
Empleando un vector solo se requiere definir un único nombre y accedemos a cada elemento por medio del subíndice.
Para definir una propiedad de una clase de tipo vector utilizamos la siguiente sintaxis:
Private sueldos(4) As Integer
Estamos definiendo un vector llamado sueldos que puede almacenar 5 componentes (esto debido a que las componentes comienzan a numerarse en cero).
Los elementos o componentes del vector sueldos solo pueden almacenar valores enteros. No podemos tener componentes de distinto tipo.
Module Module1 Public Class PruebaVector1 Private sueldos(4) As Integer 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 Public Sub Imprimir() Dim f As Integer For f = 0 To 4 Console.WriteLine(sueldos(f)) Next Console.ReadKey() End Sub End Class Sub Main() Dim pv As New PruebaVector1() pv.Cargar() pv.Imprimir() End Sub End Module
Como atributo de la clase declaramos el vector:
Private sueldos(4) As Integer
Lo definimos como atributo de la clase ya que lo utilizaremos en los dos métodos.
Para cargar cada componente debemos indicar entre paréntesis que elemento del vector estamos accediendo, es común utilizar un ciclo For para indicar el índice de la componente:
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
Cuando f vale cero estamos accediendo a la primer componente del vector (en nuestro caso sería):
sueldos(f) = Console.ReadLine()
Lo mas común es utilizar una estructura repetitiva For para recorrer cada componente del vector.
Utilizar el For nos reduce la cantidad de código, si no utilizo un For debería en forma secuencial implementar el siguiente código:
Console.Write("Ingrese importe del sueldo:") sueldos(0) = Console.ReadLine() Console.Write("Ingrese importe del sueldo:") sueldos(1) = Console.ReadLine() Console.Write("Ingrese importe del sueldo:") sueldos(2) = Console.ReadLine() Console.Write("Ingrese importe del sueldo:") sueldos(3) = Console.ReadLine() Console.Write("Ingrese importe del sueldo:") sueldos(4) = Console.ReadLine()
La impresión de las componentes del vector lo hacemos en el otro método y también utilizamos un For para reducir el código a programar:
Public Sub Imprimir() Dim f As Integer For f = 0 To 4 Console.WriteLine(sueldos(f)) Next Console.ReadKey() End Sub
Siempre que queremos acceder a una componente del vector debemos indicar entre paréntesis la componente, dicho valor comienza a numerarse en cero y continua hasta el valor que indicamos al definir el vector, en nuestro caso creamos el vector indicando un 4, es decir tiene 5 elementos:
Private sueldos(4) As Integer
Por último en este programa creamos un objeto en la Main y llamamos a lo métodos de Cargar e Imprimir el vector:
Sub Main() Dim pv As New PruebaVector1() pv.Cargar() pv.Imprimir() End Sub
Definir un vector de 5 componentes de tipo Single que representen las alturas de 5 personas.
Obtener el promedio de las mismas. Contar cuántas personas son más altas que el promedio y cuántas más bajas.
Module Module1 Public Class PruebaVector2 Private alturas(4) As Single Private promedio As Single Public Sub Cargar() Dim f As Integer For f = 0 To 4 Console.Write("Ingrese la altura de la persona:") alturas(f) = Console.ReadLine() Next End Sub Public Sub CalcularPromedio() Dim suma As Single suma = 0 Dim f As Integer For f = 0 To 4 suma = suma + alturas(f) Next promedio = suma / 5 Console.WriteLine("Promedio de alturas:" & promedio) End Sub Public Sub MayoresMenores() Dim may, men As Integer may = 0 men = 0 Dim f As Integer For f = 0 To 4 If alturas(f) > promedio Then may = may + 1 Else If alturas(f) < promedio Then men = men + 1 End If End If Next Console.WriteLine("Cantidad de personas mayores al promedio:" & may) Console.WriteLine("Cantidad de personas menores al promedio:" & men) Console.ReadKey() End Sub End Class Sub Main() Dim pv2 As New PruebaVector2() pv2.Cargar() pv2.CalcularPromedio() pv2.MayoresMenores() End Sub End Module
Definimos como atributo un vector donde almacenaremos las alturas. También definimos un atributo "promedio" ya que se lo calculará en un método y lo consultará en otro:
Private alturas(4) As Single Private promedio As Single
Procedemos seguidamente a cargar todos sus elementos en el método Cargar:
Public Sub Cargar() Dim f As Integer For f = 0 To 4 Console.Write("Ingrese la altura de la persona:") alturas(f) = Console.ReadLine() Next End Sub
En otro método procedemos a sumar todas sus componentes y obtener el promedio. El promedio lo almacenamos en un atributo de la clase ya que lo necesitamos en otro método:
Public Sub CalcularPromedio() Dim suma As Single suma = 0 Dim f As Integer For f = 0 To 4 suma = suma + alturas(f) Next promedio = suma / 5 Console.WriteLine("Promedio de alturas:" & promedio) End Sub
Por último en un tercer método comparamos cada componente del vector con el atributo promedio, si el valor almacenado supera al promedio incrementamos un contador en caso que sea menor al promedio incrementamos otro contador:
Public Sub MayoresMenores() Dim may, men As Integer may = 0 men = 0 Dim f As Integer For f = 0 To 4 If alturas(f) > promedio Then may = may + 1 Else If alturas(f) < promedio Then men = men + 1 End If End If Next Console.WriteLine("Cantidad de personas mayores al promedio:" & may) Console.WriteLine("Cantidad de personas menores al promedio:" & men) Console.ReadKey() End Sub
En este problema podemos observar una ventaja de tener almacenadas todas las alturas de las personas. Si no conociéramos los vectores tenemos que cargar otra vez las alturas por teclado para compararlas con el promedio.
Mientras el programa está en ejecución tenemos el vector alturas a nuestra disposición. Es importante tener en cuenta que cuando finaliza la ejecución del programa se pierde el contenido de todas las variables (simples y vectores)
Una empresa tiene dos turnos (mañana y tarde) en los que trabajan 8 empleados (4 por la mañana y 4 por la tarde)
Confeccionar un programa que permita almacenar los sueldos de los empleados agrupados por turno.
Imprimir los gastos en sueldos de cada turno.
Module Module1 Public Class PruebaVector3 Private turnoMan(3) As Single Private turnoTar(3) As Single Public Sub Cargar() Console.WriteLine("Sueldos de empleados del turno de la mañana.") Dim f As Integer For f = 0 To 3 Console.Write("Ingrese sueldo:") turnoMan(f) = Console.ReadLine() Next Console.WriteLine("Sueldos de empleados del turno de la tarde.") For f = 0 To 3 Console.Write("Ingrese sueldo:") turnoTar(f) = Console.ReadLine() Next End Sub Public Sub CalcularGastos() Dim man As Single = 0 Dim tar As Single = 0 Dim f As Integer For f = 0 To 3 man = man + turnoMan(f) tar = tar + turnoTar(f) Next Console.WriteLine("Total de gastos del turno de la mañana:" & man) Console.WriteLine("Total de gastos del turno de la tarde:" & tar) Console.ReadKey() End Sub End Class Sub Main() Dim pv3 As New PruebaVector3() pv3.Cargar() pv3.CalcularGastos() End Sub End Module
Definimos dos atributos de tipo vector donde almacenaremos los sueldos de los empleados de cada turno:
Private turnoMan(3) As Single Private turnoTar(3) As Single
Mediante dos estructuras repetitivas procedemos a cargar cada vector:
Public Sub Cargar() Console.WriteLine("Sueldos de empleados del turno de la mañana.") Dim f As Integer For f = 0 To 3 Console.Write("Ingrese sueldo:") turnoMan(f) = Console.ReadLine() Next Console.WriteLine("Sueldos de empleados del turno de la tarde.") For f = 0 To 3 Console.Write("Ingrese sueldo:") turnoTar(f) = Console.ReadLine() Next End Sub
En otro método procedemos a sumar las componentes de cada vector y mostrar dichos acumuladores:
Public Sub CalcularGastos() Dim man As Single = 0 Dim tar As Single = 0 Dim f As Integer For f = 0 To 3 man = man + turnoMan(f) tar = tar + turnoTar(f) Next Console.WriteLine("Total de gastos del turno de la mañana:" & man) Console.WriteLine("Total de gastos del turno de la tarde:" & tar) Console.ReadKey() End Sub
En la Main creamos un objeto de la clase PruebaVector3 y llamamos a sus dos métodos:
Sub Main() Dim pv3 As New PruebaVector3() pv3.Cargar() pv3.CalcularGastos() End Sub
Module Module1 Public Class PruebaVector4 Private vec(7) As Integer Public Sub Cargar() Dim f As Integer For f = 0 To 7 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 7 suma = suma + vec(f) Next Console.WriteLine("La suma de los 8 elementos es:" & suma) End Sub Public Sub AcumularMayores36() Dim suma As Integer = 0 Dim f As Integer For f = 0 To 7 If vec(f) > 36 Then suma = suma + vec(f) End If Next Console.WriteLine("La suma de los elementos mayores a 36 es:" & suma) End Sub Public Sub CantidadMayores50() Dim cant As Integer = 0 Dim f As Integer For f = 0 To 7 If vec(f) > 50 Then cant = cant + 1 End If Next Console.WriteLine("La cantidad de valores mayores a 50 es:" & cant) Console.ReadKey() End Sub End Class Sub Main() Dim pv4 As New PruebaVector4() pv4.Cargar() pv4.AcumularElementos() pv4.AcumularMayores36() pv4.CantidadMayores50() End Sub End Module Module Module1 Public Class PruebaVector5 Private vec1(3) As Integer Private vec2(3) As Integer Private vecSuma(3) As Integer Public Sub Cargar() Console.WriteLine("Carga del primer vector.") Dim f As Integer For f = 0 To 3 Console.Write("Ingrese elemento:") vec1(f) = Console.ReadLine() Next Console.WriteLine("Carga del segundo vector.") For f = 0 To 3 Console.Write("Ingrese elemento:") vec2(f) = Console.ReadLine() Next End Sub Public Sub SumarizarVectores() Dim f As Integer For f = 0 To 3 vecSuma(f) = vec1(f) + vec2(f) Next Console.WriteLine("Vector resultante.") For f = 0 To 3 Console.WriteLine(vecSuma(f)) Next Console.ReadKey() End Sub End Class Sub Main() Dim pv5 As New PruebaVector5() pv5.Cargar() pv5.SumarizarVectores() End Sub End Module Module Module1 Public Class PruebaVector6 Private cursoa(4) As Integer Private cursob(4) As Integer Public Sub Cargar() Console.WriteLine("Carga de notas del curso A") Dim f As Integer For f = 0 To 4 Console.Write("Ingrese nota:") cursoa(f) = Console.ReadLine() Next Console.WriteLine("Carga del notas del curso B") For f = 0 To 4 Console.Write("Ingrese nota:") cursob(f) = Console.ReadLine() Next End Sub Public Sub CalcularPromedios() Dim suma1 As Integer = 0 Dim suma2 As Integer = 0 Dim f As Integer For f = 0 To 4 suma1 = suma1 + cursoa(f) suma2 = suma2 + cursob(f) Next Dim promedioa As Integer = suma1 / 5 Dim promediob As Integer = suma2 / 5 If promedioa > promediob Then Console.WriteLine("El curso A tiene un promedio mayor.") Else Console.WriteLine("El curso B tiene un promedio mayor.") End If Console.ReadKey() End Sub End Class Sub Main() Dim pv As New PruebaVector6() pv.Cargar() pv.CalcularPromedios() End Sub End Module Module Module1 Public Class PruebaVector7 Private vec(9) As Integer Public Sub Cargar() Dim f As Integer For f = 0 To 9 Console.Write("Ingrese elemento:") vec(f) = Console.ReadLine() Next End Sub Public Sub VerificarOrdenado() Dim orden As Integer = 1 Dim f As Integer For f = 0 To 8 If vec(f + 1) < vec(f) Then orden = 0 End If Next If orden = 1 Then Console.WriteLine("Esta ordenado de menor a mayor") Else Console.WriteLine("No esta ordenado de menor a mayor") End If Console.ReadKey() End Sub End Class Sub Main() Dim pv As New PruebaVector7() pv.Cargar() pv.VerificarOrdenado() End Sub End Module