Wyszukiwanie w tablicy

Adam Boduch

Poniższe algorytmy wyszukiwania powinny działać zarówno
w Delphi jak i z drobną modyfikacją w Pascal'u.

Pierwszy algorytm wyszukiwania polega na wyszukiwaniu
wartości w tablicy. Załóżmy, że masz tablicę 10-elementową typu
String i chcesz w tej tablicy wyszukać jakiś element ( poznać jej
indeks ). Oto procedura przeszukująca:

type
  TSearch = String; // nowy typ bazujacy na typie String
  TTable = array[0..10] of TSearch;

function Find(Table : TTable; Data : TSearch; var Found : Integer) : Integer;
begin
{
  Ta procedura porownuje szukany element ( Data ) z kazdym elementem
  tablicy. Jezeli procedura znajdzie w tablicy element Data to zwraca
  rezultad w postaci numeru elementu.
}
  Found := 0;
  while (Found < High(Table)) and (Table[Found] <> Data) do Inc(Found);
    if Table[Found] <> Data then
      Result := -1 else Result := Found;
end;

Oto procedura wykorzystująca powyższy algorytm:

procedure TForm1.Button2Click(Sender: TObject);
var
  Tablica : TTable;
  Found : Integer;
begin
{ Wypelnienie tabliocy wartosciami }
  Tablica[0] := 'Jan';
  Tablica[1] := 'Adam';
  Tablica[2] := 'Aneta';
  Tablica[3] := 'Sylwia';
  Tablica[4] := 'Marta';
  Tablica[5] := 'Monika';
  Tablica[6] := 'Agata';
  Tablica[7] := 'Ewelina';
  Tablica[8] := 'Joanna';
  Tablica[9] := 'Krzysiek';
  Tablica[10] := 'Adrian';

  if Find(Tablica, 'Aneta', Found) > 0 then
    ShowMessage('Znelziono pod indeksem: ' + IntToStr(Found));
end;

A oto inny sposób zapisu tej procedury ( wyszukiwania ):

<delphi>
function Find(Table : TTable; Data : TSearch; var Found : Integer) : Integer;
begin
  Found := 0;
  repeat
    Inc(Found);
  until Table[Found] = Data;
  if Table[Found] <> Data then Result := -1  else Result := Found;
end;

3 komentarzy

w przypadku "inny sposob zapisu tej procedury" wystapi blad gdy found>high(table).

funkcja dziala rowniez dla tablic dynamicznych, wystarczy zmodyfikowac deklaracje typu.

Dobre bo polskie :)

Ten gotowiec bardzo dobrze wyszukuje w tablicach statycznych, a co z dynamicznymi? Jak w.g. mnie 6 się należy.