15 - Vectores estáticos: búsqueda del mayor y menor elemento

Es una actividad común la búsqueda del mayor y menor elemento de un vector, lo mismo que su posición.

mayor y menor elemento de un vector

Problema 1

Confeccionar un programa que permita cargar los nombres de 5 operarios y sus sueldos respectivos. Mostrar el sueldo mayor y el nombre del operario.

diagrama flujo vectores paralelos pascal/delphi

Definir dos vectores paralelos para almacenar los nombres de los operarios y sus sueldos.

Si se cargan los valores indicados en el gráfico debería aparecer en pantalla que:

Luis tiene el mayor sueldo y es de 820 pesos.

Diagrama de flujo:

diagrama flujo vectores paralelos pascal/delphi

Proyecto68

program Proyecto68;

{$APPTYPE CONSOLE}

type
  TNombres = array[1..5] of String;
  TSueldos = array[1..5] of Double;

Var
  Nombres: TNombres;
  Sueldos: TSueldos;
  f: Integer;
  mayor: Double;
  posicion: Integer;

begin
  for f:=1 to 5 do
  begin
    Write('Ingrese Nombre:');
    ReadLn(Nombres[f]);
    Write('Ingrese Sueldo:');
    ReadLn(Sueldos[f]);
    WriteLn;
  end;
  mayor := Sueldos[1];
  posicion := 1;
  for f:=2 to 5 do
  begin
    if Sueldos[f] > mayor then
    begin
      mayor := sueldos[f];
      posicion := f;
    end;
  end;
  WriteLn('Mayor sueldo:', mayor:0:2);
  WriteLn('Operario    :', nombres[posicion]);
  ReadLn;
end.

La carga de los vectores se hace como hemos visto en los ejercicios anteriores.

Para obtener el mayor sueldo y el nombre del operario debemos realizar los siguientes pasos:

Inicializamos la variable "mayor" con la primer componente del vector Sueldos:

mayor := Sueldos[1];

Inicializamos una variable llamada "posición" con el valor 1, ya que decimos primeramente que el mayor es la primer componente del vector:

posicion := 1;

Recorremos las componentes del vector que faltan analizar, o sea, de la 2 a la 5:

for f:=2 to 5 do

Accedemos a cada componente para controlar si supera lo que tiene la variable "mayor":

if sueldos[f] > mayor then

En caso de ser verdadera la condición asignamos a la variable "mayor" este nuevo valor Sueldos[f]

mayor := Sueldos[f];

y a la variable "posicion" le cargamos la variable f que indica la componente que estamos analizando:

posicion := f

Cuando salimos de la estructura repetitiva imprimimos la variable "mayor" que contiene el mayor sueldo.

Para imprimir el nombre del operario conociendo la posición del mayor sueldo imprimimos el elemento que ocupa la posición que indica la variable "posicion" en el vector paralelo:

  WriteLn('Operario    :', nombres[posicion]);

Para obtener el menor elemento de un vector se realiza el mismo algoritmo, con excepción de la condición que la cambiamos por el operador <.

Problema propuesto

  • Definir un vector de 5 elementos enteros y proceder a su carga. Imprimir el menor y un mensaje si se repite dentro del vector.
Solución
program Proyecto69;

{$APPTYPE CONSOLE}

type
  TVector = array[1..5] of Integer;

var
  Vec: TVector;
  f: Integer;
  menor: Integer;
  repite: Integer;

begin
  for f:=1 to 5 do
  begin
    Write('Ingrese elemento:');
    ReadLn(Vec[f]);
  end;
  menor := Vec[1];
  for f:=2 to 5 do
  begin
    if Vec[f] < menor then
    begin
      menor := Vec[f];
    end;
  end;
  WriteLn('El elemento menor del vector es:', menor);
  repite := 0;
  for f:=1 to 5 do
  begin
    if menor = Vec[f] then
    begin
      repite := repite + 1;
    end;
  end;
  if repite > 1 then
  begin
    WriteLn('El menor se repite dentro del vector');
  end
  else
  begin
    WriteLn('El menor no se repite en el vector');
  end;
  ReadLn;
end.