Algorytmy wyszukiwania
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 ):
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;
Nie sprawdzalem w delphi ale kilka uwag:
Procka z gory ekranu
Pozatym jak dla mnie indentacja mocno mi C++ smierdzi a procki sa pisane na kolanie, bez nalezytego przetestowania
Dlaczego "inny sposób" jest błędny?
-----------------------------------------------------------------------------------------------------[ Xitami ]------
Spoko, akurat tego szukalem