16 - Vectores estáticos: búsqueda de elementos

Consiste en recorrer y comparar cada elemento de un vector con una variable auxiliar.
Ejemplo: Buscar los datos de una persona por su nombre, buscar el saldo de un cliente, buscar las nota de un alumno, etc.

Problema 1

Confeccionar un programa que permita cargar los nombres de 5 alumnos y sus notas respectivas. Luego de la carga pedir que se ingrese el nombre de un alumno, buscarlo en el vector y mostrar su nota.

búsqueda de elementos en un vector

Si se han cargado estos datos, al ingresar Maria debería aparecer en pantalla un mensaje que muestre que su nota es 7.

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 busqueda vectores pascal/delphi

En este problema debemos realizar inicialmente la carga de los dos vectores (Nombres y Notas).

Para realizar la búsqueda ingresamos por teclado una variable de tipo String con un nombre de alumno.

Otra variable importante es "posicion" que nos indica en qué lugar del vector se encuentra el nombre que queremos consultar.
La variable "posicion" se inicializa con -1 (dicho valor significa que el nombre no existe dentro del vector).

Dentro de la estructura repetitiva controlamos cada componente del vector Nombres con la variable auxiliar "nombreaux". En caso que coincidan, fijamos la variable "posicion" con la variable del for que representa el número de componente que estamos controlando.

Al salir de la estructura repetitiva si la variable "posicion" es distinta a -1 significa que se ha encontrado el nombre del alumno y que se encuentra en el lugar indicado por la variable "posicion".

Si la variable "posicion" continúa con el valor -1 significa que la condición planteada dentro del for nunca retornó verdadero, por lo tanto no se ha encontrado el nombre del alumno en la lista contenida en el vector Nombres.

Proyecto70

program Proyecto70;

{$APPTYPE CONSOLE}

type
  TNombres = array[1..5] of String;
  TNotas = array[1..5] of Integer;

var
  Nombres: TNombres;
  Notas: TNotas;
  f: Integer;
  nombreaux: String;
  posicion: Integer;

begin
 for f:=1 to 5 do
  begin
    Write('Ingrese nombre del alumno:');
    ReadLn(Nombres[f]);
    Write('Ingrese nota:');
    ReadLn(Notas[f]);
  end;
  Write('Ingrese el nombre del alumno que desea consultar:');
  ReadLn(nombreaux);
  posicion := -1;
  for f:=1 to 5 do
  begin
    if nombreaux = Nombres[f] then
    begin
      posicion := f;
    end;
  end;
  if posicion <> -1 then
  begin
    WriteLn('Nota:', Notas[Posicion]);
  end
  else
  begin
    WriteLn('No existe ese alumno');
  end;
  ReadLn;
end.

La variable nombreaux debe ser de tipo String igual que las componentes del vector Nombres.

"posicion" es un Integer, la debemos inicializar antes de entrar al for con un valor distinto a 1, 2, 3, 4 ó 5 que son las posiciones de las componentes dentro del vector. Si al salir del for la variable "posicion" continúa con el mismo valor que le asignamos antes de entrar al for significa que no ha sido localizada dentro del vector Nombres.

La carga de nombreaux se hace antes de la estructura repetitiva donde se busca.