Поиск битовой подстроки

32-хfunction Pos (SubS: TStr_Bit; Nach, Shag : Integer ): Integer;
16-тиfunction Pos (SubS: PStr_bit; Nach, Shag : word ): word;

Nfch –   позиция бита в битовой строке, с которого начинается поиск заданной последовательности бит (0…длина битовой переменной);
Shag   - шаг смещения при поиске заданной последовательности бит (1…длина битовой переменной);
SubS   - задает последовательность бит для поиска.

Функция возвращает позицию бита, начиная с которого в текущей последовательности битов расположена последовательность, заданная переменной - SubS   (ее длина должна быть меньше длины текущей переменной). Поиск начинается с бита - Nach  , при этом все последующие сравнения битовых последовательностей выполняются со сдвигом битовой последовательности - SubS   относительно исходной строки с шагом - Shag   бит. Если разыскиваемая битовая последовательность не найдена, то функция возвращает значение - btNotFound.

Например, переменная BitStr   содержит битовую последовательность вида (11010000011100001100). После выполнения поиска последовательности бит SubS   (1000), (для примера, приведенного в таб.), выполняемого в цикле, будут найдены следующие позиции: 3, 11, btNotFound   (-1).

Внимание !   Для ускорения операций поиска определенных последовательностей бит можно задавать шаг сдвига больше единицы (например, в задаче поиска некоторой комбинации бит в синхронной передаче), однако в этом случае будут найдены не все совпадения. Если для примера, приведенного в таблице, задать шаг сдвига равным пяти, то не будет найдено ни одного совпадения
32-х Var BitStr, Isx : TStr_bit; {Объявление переменной}


Nach := 0; SubS.Init_sim('1000'); { поиск комбинации бит }
With BitStr do repeat { вида "1000" и pаспечатка}
Nach := Pos(SubS, Nach, 1); { найденых позиций }
ShowMessage (IntToStr(Nach));
if Nach <> btNotFound then inc(Nach)
until Nach = btNotFound;

16-ти

Var BitStr, SubS: PStr_bit; {Объявление переменной}


Nach := 0; SubS^.Init_sim('1000'); { поиск комбинации бит }
With BitStr^ do repeat { вида "1000" и pаспечатка}
Nach := Pos(SubS,Nach,1); { найденых позиций }
Write(Nach:10);
if Nach <> btNotFound then inc(Nach)
until Nach = btNotFound;