Wyszukiwanie binarne wartości istniejącej w bazie kilka razy

0

Co muszę zrobić, żeby przy wyszukiwaniu binarnym (dziel i zwyciężaj) działał mi poprawie jeśli moja poszukiwana wartość znajduje się w bazie więcej niż jeden raz? Wcześniej nie miałem z tym problemu jeśli szukałem po ID, bo zawsze miałem tylko jedną taką wartość.

 Pocz := 0; //index początku
  Kon := Length(tab)-1; // index końca
  x := StrToInt(edtIDBin.Text); //poszukiwana wartość
  index := 0; // pusty index
  i := 1;
  strngrd3.RowCount := 1;
  QueryPerformanceFrequency(Freq);
  QueryPerformanceCounter(TimeStart);
  while (Pocz <= Kon) do
  begin
    srodek := (Pocz + Kon) div 2;

    if (tab[srodek].ID = x) then
    begin
      index := srodek;
      strngrd3.RowCount := strngrd3.RowCount + 1;

      strngrd3.Cells[0,i] := IntToStr(tab[index].ID);
      strngrd3.Cells[1,i] := tab[index].Imie;
      strngrd3.Cells[2,i] := tab[index].Nazwisko;
      strngrd3.Cells[3,i] := DateToStr(tab[index].Data);
      strngrd3.Cells[4,i] := tab[index].Firma;
      strngrd3.Cells[5,i] := tab[index].Model;
      strngrd3.Cells[6,i] := FloatToStr(tab[index].Cena) + ' zł';
      strngrd3.Cells[7,i] := IntToStr(tab[index].Gwarancja);
      if (tab[index].Stan = True) then strngrd3.Cells[8,i] := 'Nowy'
      else strngrd3.Cells[8,i] := 'Uzywany';
      Inc(i);
      Break;
    end;
    if (tab[srodek].ID < x) then
      Pocz := srodek + 1
    else
      Kon := srodek - 1;
  end;

0

Nie wiem czy dobrze zrozumiałem Twój problem ale wydaje mi się, że sam musisz zdecydować czego szukasz. Jeśli dana wartość występuje więcej niż jeden raz to

  1. wszystkie wystąpienia i zapisujesz gdzieś (np w memo)
  2. wyszukujesz pierwszy z brzegu olewając pozostałe
  3. wyszykujesz ostatnie wystąpienie

1 użytkowników online, w tym zalogowanych: 0, gości: 1