20 - Matrices y Vectores estáticos: 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 en Delphi/Pascal

Proyecto81

program Proyecto81;

{$APPTYPE CONSOLE}

type
  TEmpleados = array[1..4] of String;
  TSueldos = array[1..4,1..3] of Double;
  TSueldosTot = array[1..4] of Double;

var
  Empleados: TEmpleados;
  Sueldos: TSueldos;
  SueldosTot: TSueldosTot;
  f, c: Integer;
  suma: Double;
  may: Double;
  nom: String;

begin
  for f:=1 to 4 do
  begin
    Write('Ingrese el nombre del empleado:');
    ReadLn(Empleados[f]);
    for c:=1 to 3 do
    begin
      Write('Ingrese sueldo:');
      ReadLn(Sueldos[f,c]);
    end;
  end;

  for f:=1 to 4 do
  begin
    suma := 0;
    for c:=1 to 3 do
    begin
      suma := suma + sueldos[f,c];
    end;
    SueldosTot[f] := suma;
  end;

  WriteLn('Total de sueldos pagados por empleado.');
  for f:=1 to 4 do
  begin
    WriteLn(Empleados[f], ' ', SueldosTot[f]:0:2);
  end;

  may := SueldosTot[1];
  nom := Empleados[1];
  for f:= 2 to 4 do
  begin
    if SueldosTot[f] > may then
    begin
      may := SueldosTot[f];
      nom := Empleados[f];
    end;
  end;
  WriteLn('El empleado con mayor sueldo es ', nom, ' que tiene un sueldo de ',may:0:2);
  ReadLn;
end.

Para resolver este problema lo primero que hacemos es declarar y 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:

type
  TEmpleados = array[1..4] of String;
  TSueldos = array[1..4,1..3] of Double;
  TSueldosTot = array[1..4] of Double;

var
  Empleados: TEmpleados;
  Sueldos: TSueldos;
  SueldosTot: TSueldosTot;

En la carga de datos procedemos a ingresar el nombre de un empleado y luego mediante un for anidado cargamos los tres sueldos de dicho empleado:

  for f:=1 to 4 do
  begin
    Write('Ingrese el nombre del empleado:');
    ReadLn(Empleados[f]);
    for c:=1 to 3 do
    begin
      Write('Ingrese sueldo:');
      ReadLn(Sueldos[f,c]);
    end;
  end;

El algoritmo para sumar los sueldos de cada empleado y su posterior almacenamiento en un vector paralelo:

  for f:=1 to 4 do
  begin
    suma := 0;
    for c:=1 to 3 do
    begin
      suma := suma + sueldos[f,c];
    end;
    SueldosTot[f] := suma;
  end;

Mostramos seguidamente el nombre de cada empleado y el total de sueldos ganados en los últimos tres meses:

  WriteLn('Total de sueldos pagados por empleado.');
  for f:=1 to 4 do
  begin
    WriteLn(Empleados[f], ' ', SueldosTot[f]:0:2);
  end;

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:

  may := SueldosTot[1];
  nom := Empleados[1];
  for f:= 2 to 4 do
  begin
    if SueldosTot[f] > may then
    begin
      may := SueldosTot[f];
      nom := Empleados[f];
    end;
  end;
  WriteLn('El empleado con mayor sueldo es ', nom, ' que tiene un sueldo de ',may:0:2);

Problema propuesto

  • 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
program Proyecto82;

{$APPTYPE CONSOLE}

type
  TPaises = array [1..4] of String;
  TTempMensual = array[1..4,1..3] of Integer;
  TTempTrimestral = array[1..4] of Integer;

var
  Paises: TPaises;
  TempMensual: TTempMensual;
  TempTrimestral: TTempTrimestral;
  f, c: Integer;
  suma: Integer;
  may: Integer;
  nom: String;

begin
  for f:=1 to 4 do
  begin
    Write('Ingrese el nombre del país:');
    ReadLn(Paises[f]);
    for c:=1 to 3 do
    begin
      Write('Ingrese temperatura mensual:');
      ReadLn(TempMensual[f,c]);
    end;
  end;

  WriteLn('Listado de templeraturas mensuales');
  for f:=1 to 4 do
  begin
    Write('Pais:', Paises[f], ' ');
    for c:=1 to 3 do
    begin
      Write(TempMensual[f,c], ' ');
    end;
    WriteLn;
  end;

  for f:=1 to 4 do
  begin
    suma := 0;
    for c:=1 to 3 do
    begin
      suma := suma + TempMensual[f,c];
    end;
    TempTrimestral[f] := suma div 3;
  end;

  WriteLn('Temperaturas trimestrales');
  for f:=1 to 4 do
  begin
    WriteLn(Paises[f],' ', TempTrimestral[f]);
  end;

  may := TempTrimestral[1];
  nom := paises[1];
  for f:=2 to 4 do
  begin
    if TempTrimestral[f] > may then
    begin
      may := TempTrimestral[f];
      nom := Paises[f];
    end;
  end;
  Writeln('País con temperatura trimestral mayor es ', nom, ' que tiene una temperatura de ', may);
  ReadLn;
end.