23 - Matrices y vectores paralelos


Dependiendo de la complejidad del problema podemos necesitar el empleo de vectores y matrices paralelos.

Problema 1:

Se tiene la siguiente información:
· Nombres de 4 empleados.
· Ingresos en concepto de sueldo, cobrado por cada empleado, en los últimos 3 meses.
Confeccionar un programa para:

a) Realizar la carga de la información mencionada.
b) Generar un vector que contenga el ingreso acumulado en sueldos en los últimos 3 meses para cada empleado.
c) Mostrar por pantalla el total pagado en sueldos a todos los empleados en los últimos 3 meses
d) Obtener el nombre del empleado que tuvo el mayor ingreso acumulado

vectores y matrices paralelos

Programa:

Module Module1

    Public Class Matriz9

        Private empleados(3) As String
        Private sueldos(3, 2) As Integer
        Private sueldostot(3) As Integer

        Public Sub Cargar()
            Dim f, c As Integer
            For f = 0 To empleados.GetUpperBound(0)
                Console.Write("Ingrese el nombre del empleado:")
                empleados(f) = Console.ReadLine()
                For c = 0 To sueldos.GetUpperBound(1)
                    Console.Write("Ingrese sueldo:")
                    sueldos(f, c) = Console.ReadLine()
                Next
            Next
        End Sub

        Public Sub CalcularSumaSueldos()
            Dim f, c As Integer
            For f = 0 To sueldos.GetUpperBound(0)
                Dim suma As Integer = 0
                For c = 0 To sueldos.GetUpperBound(1)
                    suma = suma + sueldos(f, c)
                Next
                sueldostot(f) = suma
            Next
        End Sub

        Public Sub ImprimirTotalPagado()
            Console.WriteLine("Total de sueldos pagados por empleado.")
            Dim f As Integer
            For f = 0 To sueldos.GetUpperBound(0)
                Console.WriteLine(empleados(f) & " - " & sueldostot(f))
            Next
        End Sub

        Public Sub EmpleadoMayorSueldo()
            Dim may As Integer = sueldostot(0)
            Dim nom As String = empleados(0)
            Dim f As Integer
            For f = 0 To sueldostot.GetUpperBound(0)
                If sueldostot(f) > may Then
                    may = sueldostot(f)
                    nom = empleados(f)
                End If
            Next
            Console.WriteLine("El empleado con mayor sueldo es " & nom & " que cobró en los últimos 3 meses " & may)
        End Sub

    End Class


    Sub Main()
        Dim ma As New Matriz9()
        ma.Cargar()
        ma.CalcularSumaSueldos()
        ma.ImprimirTotalPagado()
        ma.EmpleadoMayorSueldo()
        Console.ReadKey()
    End Sub

End Module

Para resolver este problema lo primero que hacemos es definir una matriz donde se almacenarán los sueldos mensuales de cada empleado, un vector de tipo String donde almacenaremos los nombre de cada empleado y finalmente definimos un vector paralelo a la matriz donde almacenaremos la suma de cada fila de la matriz:

        Private empleados(3) As String
        Private sueldos(3, 2) As Integer
        Private sueldostot(3) As Integer

En el método de cargar inicializamos el vector con los nombres de los empleados y la matriz paralela donde se almacenan los últimos tres sueldos :

        Public Sub Cargar()
            Dim f, c As Integer
            For f = 0 To empleados.GetUpperBound(0)
                Console.Write("Ingrese el nombre del empleado:")
                empleados(f) = Console.ReadLine()
                For c = 0 To sueldos.GetUpperBound(1)
                    Console.Write("Ingrese sueldo:")
                    sueldos(f, c) = Console.ReadLine()
                Next
            Next
        End Sub

El método sumar sueldos almacenamos en otro vector la suma de cada fila de la matriz. Mediante dos for recorremos toda la matriz y sumamos cada fila:

        Public Sub CalcularSumaSueldos()
            Dim f, c As Integer
            For f = 0 To sueldos.GetUpperBound(0)
                Dim suma As Integer = 0
                For c = 0 To sueldos.GetUpperBound(1)
                    suma = suma + sueldos(f, c)
                Next
                sueldostot(f) = suma
            Next
        End Sub

El método ImprimirTotalPagado tiene por objetivo mostrar los dos vectores (el de nombre de los empleados y el que almacena la suma de cada fila de la matriz):

        Public Sub ImprimirTotalPagado()
            Console.WriteLine("Total de sueldos pagados por empleado.")
            Dim f As Integer
            For f = 0 To sueldos.GetUpperBound(0)
                Console.WriteLine(empleados(f) & " - " & sueldostot(f))
            Next
        End Sub

Por último para obtener el nombre del empleado con mayor sueldo acumulado debemos inicializar dos variables auxiliares con el primer elemento del vector de empleados y en otra auxiliar guardamos la primer componente del vector sueldostot:

        Public Sub EmpleadoMayorSueldo()
            Dim may As Integer = sueldostot(0)
            Dim nom As String = empleados(0)
            Dim f As Integer
            For f = 0 To sueldostot.GetUpperBound(0)
                If sueldostot(f) > may Then
                    may = sueldostot(f)
                    nom = empleados(f)
                End If
            Next
            Console.WriteLine("El empleado con mayor sueldo es " & nom & " que cobró en los últimos 3 meses " & may)
        End Sub

Problema propuesto

  1. Se desea saber la temperatura media trimestral de cuatro paises. Para ello se tiene como dato las temperaturas medias mensuales de dichos paises.
    Se debe ingresar el nombre del país y seguidamente las tres temperaturas medias mensuales.
    Seleccionar las estructuras de datos adecuadas para el almacenamiento de los datos en memoria.
    a - Cargar por teclado los nombres de los paises y las temperaturas medias mensuales.
    b - Imprimir los nombres de las paises y las temperaturas medias mensuales de las mismas.
    c - Calcular la temperatura media trimestral de cada país.
    c - Imprimr los nombres de las provincias y las temperaturas medias trimestrales.
    b - Imprimir el nombre de la provincia con la temperatura media trimestral mayor.
Solución
Module Module1
    Public Class Matriz10

        Private paises(3) As String
        Private tempmen(3, 2) As Integer
        Private temptri(3) As Integer

        Public Sub Cargar()
            Dim f, c As Integer
            For f = 0 To paises.GetUpperBound(0)
                Console.Write("Ingrese el nombre del país:")
                paises(f) = Console.ReadLine()
                For c = 0 To tempmen.GetUpperBound(1)
                    Console.Write("Ingrese temperatura mensual:")
                    tempmen(f, c) = Console.ReadLine()
                Next
            Next
        End Sub

        Public Sub ImprimirTempMensuales()
            Dim f, c As Integer
            For f = 0 To paises.GetUpperBound(0)
                Console.Write("Pais:" & paises(f) & ":")
                For c = 0 To tempmen.GetUpperBound(1)
                    Console.Write(tempmen(f, c) & " ")
                Next
                Console.WriteLine()
            Next
        End Sub

        Public Sub CalcularTemperaturaTri()
            Dim f, c As Integer
            For f = 0 To tempmen.GetUpperBound(0)
                Dim suma As Integer = 0
                For c = 0 To tempmen.GetUpperBound(1)
                    suma = suma + tempmen(f, c)
                    temptri(f) = suma / 3
                Next
            Next
        End Sub

        Public Sub ImprimirTempTrimestrales()
            Console.WriteLine("Temperaturas trimestrales.")
            Dim f, c As Integer
            For f = 0 To paises.GetUpperBound(0)
                Console.WriteLine(paises(f) & " " & temptri(f))
            Next
        End Sub

        Public Sub PaisMayorTemperaturaTri()
            Dim may As Integer = temptri(0)
            Dim nom As String = paises(0)
            Dim f As Integer
            For f = 0 To paises.GetUpperBound(0)
                If temptri(f) > may Then
                    may = temptri(f)
                    nom = paises(f)
                End If
            Next
            Console.WriteLine("Pais con temperatura trimestral mayor es " & nom & " que tiene una temperatura de " & may)
        End Sub

    End Class


    Sub Main()
        Dim ma As New Matriz10()
        ma.Cargar()
        ma.ImprimirTempMensuales()
        ma.CalcularTemperaturaTri()
        ma.ImprimirTempTrimestrales()
        ma.PaisMayorTemperaturaTri()
        Console.ReadKey()
    End Sub

End Module

Retornar