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 el 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:

Ver video

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Matriz9
{
    class Matriz9
    {
        private string[] empleados;
        private int[,] sueldos;
        private int[] sueldostot;

        public void Cargar() 
        {
            empleados=new String[4];
            sueldos=new int[4,3];
            for(int f = 0; f < empleados.Length; f++)
            {
                Console.Write("Ingrese el nombre del empleado:");
                empleados[f]=Console.ReadLine();
                for(int c = 0; c < sueldos.GetLength(1); c++) 
                {
                    Console.Write("Ingrese sueldo:");
                    string linea;
                    linea = Console.ReadLine();
                    sueldos[f,c]=int.Parse(linea);
                }
            }
        }

        public void CalcularSumaSueldos()
        {
            sueldostot = new int[4];
            for (int f = 0; f < sueldos.GetLength(0); f++)
            {
                int suma = 0;
                for (int c = 0; c < sueldos.GetLength(1); c++)
                {
                    suma = suma + sueldos[f,c];
                }
                sueldostot[f] = suma;
            }
        }

        public void ImprimirTotalPagado() 
        {
    	    Console.WriteLine("Total de sueldos pagados por empleado.");
            for(int f = 0; f < sueldostot.Length; f++) 
            {
                Console.WriteLine(empleados[f]+" - "+sueldostot[f]);
            }
        }

        public void EmpleadoMayorSueldo() 
        {
            int may=sueldostot[0];
            string nom=empleados[0];
            for(int f = 0; f < sueldostot.Length; f++) 
            {
                if (sueldostot[f] > may) 
                {
                    may=sueldostot[f];
                    nom=empleados[f];
                }
            }
            Console.WriteLine("El empleado con mayor sueldo es "+ nom + " que tiene un sueldo de "+may);
        }

        static void Main(string[] args)
        {
            Matriz9 ma = new Matriz9();
            ma.Cargar();
            ma.CalcularSumaSueldos();
            ma.ImprimirTotalPagado();
            ma.EmpleadoMayorSueldo();
            Console.ReadKey();
        }
    }
}

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 string[] empleados;
        private int[,] sueldos;
        private int[] sueldostot;

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 (previo a cargar procedemos a crear el vector y la matriz):

            empleados=new String[4];
            sueldos=new int[4,3];
            for(int f = 0; f < empleados.Length; f++)
            {
                Console.Write("Ingrese el nombre del empleado:");
                empleados[f]=Console.ReadLine();
                for(int c = 0; c < sueldos.GetLength(1); c++) 
                {
                    Console.Write("Ingrese sueldo:");
                    string linea;
                    linea = Console.ReadLine();
                    sueldos[f,c]=int.Parse(linea);
                }
            }

El método sumar sueldos crea el vector donde se almacenará la suma de cada fila de la matriz. Mediante dos for recorremos toda la matriz y sumamos cada fila:

            sueldostot = new int[4];
            for (int f = 0; f < sueldos.GetLength(0); f++)
            {
                int suma = 0;
                for (int c = 0; c < sueldos.GetLength(1); c++)
                {
                    suma = suma + sueldos[f,c];
                }
                sueldostot[f] = suma;
            }

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):

    	    Console.WriteLine("Total de sueldos pagados por empleado.");
            for(int f = 0; f < sueldostot.Length; f++) 
            {
                Console.WriteLine(empleados[f]+" - "+sueldostot[f]);
            }

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:

            int may=sueldostot[0];
            string nom=empleados[0];
            for(int f = 0; f < sueldostot.Length; f++) 
            {
                if (sueldostot[f] > may) 
                {
                    may=sueldostot[f];
                    nom=empleados[f];
                }
            }
            Console.WriteLine("El empleado con mayor sueldo es "+ nom + " que tiene un sueldo de "+may);

Problemas propuestos

  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.
    d - Imprimir los nombres de los paises y las temperaturas medias trimestrales.
    e - Imprimir el nombre del país con la temperatura media trimestral mayor.

    Ver video

Solución
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Matriz10
{
    class Matriz10
    {
        private string[] paises;
        private int[,] tempmen;
        private int[] temptri;

        public void Cargar() 
        {
            paises=new String[4];
            tempmen=new int[4,3];
            for(int f = 0; f < paises.Length; f++)
            {
                Console.Write("Ingrese el nombre del país:");
                paises[f]=Console.ReadLine();
                for(int c = 0; c < tempmen.GetLength(1); c++) 
                {
                    Console.Write("Ingrese temperatura mensual:");
                    string linea = Console.ReadLine();
                    tempmen[f,c]=int.Parse(linea);
                }
            }
        }

        public void ImprimirTempMensuales() 
        {
            for(int f = 0; f < paises.Length; f++)
            {
        	    Console.Write("Pais:" + paises[f]+":");
                for(int c = 0; c < tempmen.GetLength(1); c++)
                {
                    Console.Write(tempmen[f,c]+" ");
                }
                Console.WriteLine();
            }    
        }

        public void CalcularTemperaturaTri()
        {
            temptri = new int[4];
            for (int f = 0; f < tempmen.GetLength(0); f++)
            {
                int suma = 0;
                for (int c = 0; c < tempmen.GetLength(1); c++)
                {
                    suma = suma + tempmen[f,c];
                }
                temptri[f] = suma / 3;
            }
        }

        public void ImprimirTempTrimestrales()
        {
            Console.WriteLine("Temperaturas trimestrales.");
            for(int f = 0; f < paises.Length; f++)
            {
                Console.WriteLine(paises[f]+" "+temptri[f]);
            }
        }

        public void PaisMayorTemperaturaTri() 
        {
            int may=temptri[0];
            string nom=paises[0];
            for(int f = 0; f < paises.Length; f++)
            {
                if (temptri[f] > may) 
                {
                    may=temptri[f];
                    nom=paises[f];
                }
            }
            Console.WriteLine("Pais con temperatura trimestral mayor es "+ nom + " que tiene una temperatura de "+may);        
        }

        static void Main(string[] args)
        {
            Matriz10 ma = new Matriz10();
            ma.Cargar();
            ma.ImprimirTempMensuales();
            ma.CalcularTemperaturaTri();
            ma.ImprimirTempTrimestrales();
            ma.PaisMayorTemperaturaTri();
            Console.ReadKey();
        }
    }
}

Retornar