18 - Vectores estáticos: ordenamiento con vectores paralelos

Cuando se tienen vectores paralelos y se ordena uno de ellos hay que tener la precaución de intercambiar los elementos de los vectores paralelos.

Problema 1

Confeccionar un programa que permita cargar los nombres de 5 alumnos y sus notas respectivas. Luego ordenar las notas de mayor a menor. Imprimir las notas y los nombres de los alumnos.

ordenamiento de vectores paralelos

Lo primero es realizar la carga de los dos vectores. Al ser vectores paralelos lo más conveniente es cargar el nombre del alumno y seguidamente su nota.

El ordenamiento al ser de MAYOR a MENOR la condición deberá ser

 
Notas[f] < Notas[f+1]

debemos hacer que la nota menor se ubique al final del vector (en la última componente).

Otra actividad importante es cuando hacemos el intercambio de componentes debemos hacerlo en los dos vectores para que los nombres de los alumnos queden con las notas respectivas, esto se logra:

auxbotas := Notas[f];
Notas[f] := Notas[f+1];
Notas[f+1] := auxnotas;
auxalumnos := Alumnos[f];
Alumnos[f] := Alumnos[f+1];
Alumnos[f+1] := auxalumnos;

Se intercambia las notas y se intercambia los nombres.

La condición es respecto al vector que queremos ordenar, en este ejemplo estamos ordenando las notas de mayor a menor. Si deseamos ordenar alfabéticamente la condición dependerá del vector Alumnos.

Proyecto73

program Proyecto73;

{$APPTYPE CONSOLE}

Type
  TAlumnos = array[1..5] of String;
  TNotas = array[1..5] of Integer;

var
  Alumnos: TAlumnos;
  Notas: TNotas;
  f, k: Integer;
  auxnotas: Integer;
  auxalumnos: String;

begin
  for f:=1 to 5 do
  begin
    Write('Ingrese nombre del alumno:');
    ReadLn(Alumnos[f]);
    Write('Ingrese nota:');
    ReadLn(Notas[f]);
    WriteLn;
  end;
  for k:=1 to 4 do
  begin
    for f:=1 to 5-k do
    begin
      if Notas[f] < Notas[f+1] then
      begin
        auxnotas := Notas[f];
        Notas[f] := Notas[f+1];
        Notas[f+1] := auxnotas;
        auxalumnos := Alumnos[f];
        Alumnos[f] := Alumnos[f+1];
        Alumnos[f+1] := auxalumnos;
      end;
    end;
  end;
  WriteLn('Ordenado por notas de mayor a menor');
  for f:=1 to 5 do
  begin
    WriteLn(Alumnos[f], ' ', Notas[f]);
  end;
  ReadLn;
end.

Problema propuesto

  • Cargar en un vector los nombres de 5 paises y en otro vector paralelo la cantidad de habitantes del mismo. Ordenar alfabéticamente e imprimir los resultados. Por último ordenar con respecto a la cantidad de habitantes (de mayor a menor) e imprimir nuevamente.
Solución
program Proyecto74;

{$APPTYPE CONSOLE}

type
  TPaises = array[1..5] of String;
  THabitantes = array[1..5] of Integer;

var
  Paises: TPaises;
  Habitantes: THabitantes;
  k, f: Integer;
  auxpais: String;
  auxhabitante: Integer;
begin
  WriteLn('Carga de paises y habitantes');
  for f:=1 to 5 do
  begin
    Write('Ingese el nombre del pais:');
    ReadLn(Paises[f]);
    Write('Ingrese la cantidad de habitantes:');
    ReadLn(Habitantes[f]);
  end;
  for k:=1 to 4 do
  begin
    for f:=1 to 5-k do
    begin
      if paises[f] > paises[f+1] then
      begin
        auxpais := paises[f];
        paises[f] := paises[f+1];
        paises[f+1] := auxpais;
        auxhabitante := habitantes[f];
        habitantes[f] := habitantes[f+1];
        habitantes[f+1] := auxhabitante;
      end;
    end;
  end;
  WriteLn('Orden alfabético');
  for f:=1 to 5 do
  begin
    WriteLn(paises[f], ' ', habitantes[f]);
  end;
  WriteLn;
  for k:=1 to 4 do
  begin
    for f:=1 to 5-k do
    begin
      if habitantes[f] < habitantes[f+1] then
      begin
        auxpais := paises[f];
        paises[f] := paises[f+1];
        paises[f+1] := auxpais;
        auxhabitante := habitantes[f];
        habitantes[f] := habitantes[f+1];
        habitantes[f+1] := auxhabitante;
      end;
    end;
  end;
  WriteLn('Ordenado por cantidad de habitantes');
  for f:=1 to 5 do
  begin
    WriteLn(paises[f], ' ', habitantes[f]);
  end;
  ReadLn;
end.