функции С и C++, библиотек C++Builder, API Windows________________899

В этом примере в функцию FindNearest передан массив из трех элементов,
значения которых берутся из окон редактирования Editi — Edit3.

Еще один пример. Функция Format, форматирующая список аргументов,
определена следующим образом:

System::AnsiString   fastcall Format(const System::AnsiString Format,

const System::TVarRec* Args, const int Args Size) ;

С помощью макроса OPENARRAY обращение к ней можно записать, напри-
мер, так:

Format("%d: %s", OPENARRAY(TVarRec, argi, arg2));

где argi и arg2 — форматируемые параметры.

Функции bsearch, Ifind, Isearch, qsort предназначены для поиска и сортиров-
ки в массивах (таблицах). Во всех этих функциях параметр base указывает на на-
чало массива, параметр nelem или num определяет число элементов, параметр
width определяет число байтов, занимаемых элементом, а параметр fcmp указыва-
ет на функцию сравнения, которую вы должны определить и которая сигнализи-
рует о результатах сравнения двух элементов, заданных своими указателями.

Функция bsearch осуществляет двоичный поиск (дихотомию) элемента, соот-
ветствующего ключу key. Подобный поиск самый быстрый, но он требует, чтобы
элементы массива были расположены в порядке возрастания критерия поиска.
Функция сравнения fcmp в данном случае получает как параметры два указателя:

*eleml и *е1ет2. Функция должна провести сравнение значений, на которые они
указывают, и вернуть результат сравнения:

< 0                                  при *eleml < *е1ет2
== 0                                при *е1ет1 == *е1ет2
> 0                                  при *е1ет1 > *е1ет2

Здесь знак < означает, что элемент *eleml расположен в массиве раньше эле-
мента *elem2, знак > означает, что элемент *eleml расположен в массиве после
элемента *elem2, а знак равенства означает, что элементы равны. Эта оговорка су-
щественна, поскольку элементами могут быть не только числа, но и объекты любо-
го типа, например, записи со множеством полей.

Функция qsort выполняет быструю сортировку массива по критерию, задан-
ному функцией сравнения. Сама функция сравнения используется такая же, как
описанная выше.

Ниже приведен пример использования функций qsort и bsearch. В примере
объявлен массив array неупорядоченных целых чисел. Функция fcmp — это фун-
кция сравнения, одинаковая для qsort и bsearch. При щелчке на кнопке Buttoni
массив сначала упорядочивается функцией qsort, а затем в нем ищется с помощью
bsearch элемент, соответствующий указанному пользователем в окне Editi.

«include <malloc.h>
ftinclude <stdlib.h>

int array[] = (800,123,512,627,933,145);

int fcmp (const void *pl, const void *p2)
{ return(*(int*)pi - *(int*)p2); )

void _fastcall TPormI::ButtonlCiick(TObject *Sender)
f
int key = StrToInt(Editl->Text) ;

29*