15 - Estructura de datos tipo vector


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)

Problema 1:

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.

vector

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.

Programa:

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

Problema 2:

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.

Programa:

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

Importante:

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)

Problema 3:

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.

Programa:

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

Problemas propuestos

  1. Desarrollar un programa que permita ingresar un vector de 8 elementos, e informe:
    El valor acumulado de todos los elementos del vector.
    El valor acumulado de los elementos del vector que sean mayores a 36.
    Cantidad de valores mayores a 50.
  2. Realizar un programa que pida la carga de dos vectores numéricos enteros de 4 elementos. Obtener la suma de los dos vectores, dicho resultado guardarlo en un tercer vector del mismo tamaño. Sumar componente a componente.
  3. Se tienen las notas del primer parcial de los alumnos de dos cursos, el curso A y el curso B, cada curso cuenta con 5 alumnos.
    Realizar un programa que muestre el curso que obtuvo el mayor promedio general.
  4. Cargar un vector de 10 elementos y verificar posteriormente si el mismo está ordenado de menor a mayor.
Solución
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

Retornar