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;
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.