Здравствуйте, Аноним, Вы писали:
А>Благодарю Leonidze,
А>Позвольте мне прокомментировать код, чтобы было видно что я правильно понял. Поправьте меня пожалуйста, если что не так
А>type
А> arr_i: array of integer; // Объявляем числовой массив arr_i
// не сам массив, его тип чтобы в функцию спокойно передавать
А>function binary_search(a:arr_i;value:integer):integer; //Создаем функцию двойного поиска и передаем ей 2 параметра, 1- объект a: числового массива arr_i, 2 - value искомое число
А>var
А> l,r,x:cardinal; // регистрируем локальные количественные переменные l - left, r- right,
// x - среднее значение
А>begin // начало выполнения сценария
А> result := -1; //??
А> l:=low(a);//передаем переменной l начальное значение массива = 1. Или это передается ключ начального значения, которым будет 0?
// нижний индекс массива. 0
А> r:=high(a);//передаем максимальное значение или ключ переменной r
// верхний индекс (последнего элемента)
А> while l<r do // запускаем цикл, до тех пор пока l<r
// тут очепятка, прошу прощения. д.б. l<=r
А> begin
А> x := (l+r) shr 1; // что делает shr ? == div 2, т.е. целочисленно делит пополам. (сдвиг вправо на 1 бит)
А> if a[x]=value then //тут условие, если зачение массива, к примеру a[6] равняется значению искомого числа value тогда выполняется следущее
// если медиана равна искомому, возвращаем индекс
А> begin
А> result := x; // переменной result передаем ключ x
А> break;
А> end
// если медиана больше искомого - дальше рассматриваем "левую" половину массива, иначе - "правую"
А> else if a[x]<value then l:=x+1; // если значение массива (к прим. a[6]) меньше искомого числа тогда, перезаписываем переменную l = 6+1
А> else r:=x-1; //или, перезаписываем переменную r = 6-1
А> end;
А> while (result>0) and (a[result-1]=value) do dec(result);// можно пояснить эту строку?
// это на случай массива вида 1,2,2,2,2,2,2,5 и поиска 2 - смещаемся влево, если не первый элемент (result>0) и предыдущий ключ равен текущему; т.е.
// для примера код без этой строки вернет индекс 3, хотя индекс первой "2" - это 1.
А>end;
А>Спасибо 
пожалуйста. этот, и еще многие алгоритмы можно найти у Кнута, Кормена и других гуру. рекомендуется к прочтению