program BinarySearch; const N = 10; var arr: array[1..N] of Integer; x, i, left, right, mid: Integer; begin // Заполнение массива writeln('Введите элементы массива:'); for i := 1 to N do readln(arr[i]); // Сортировка массива for i := 1 to N - 1 do for j := i + 1 to N do if arr[i] > arr[j] then begin arr[i] := arr[i] xor arr[j]; arr[j] := arr[i] xor arr[j]; arr[i] := arr[i] xor arr[j]; end; // Ввод числа X writeln('Введите число X:'); readln(x); // Бинарный поиск элементов равных X left := 1; right := N; while left <= right do begin mid := (left + right) div 2; if arr[mid] = x then begin // Поиск элементов равных X writeln('Элемент равный X найден в позиции ', mid); // Поиск дополнительных элементов равных X слева i := mid - 1; while (i >= 1) and (arr[i] = x) do begin writeln('Элемент равный X найден в позиции ', i); i := i - 1; end; // Поиск дополнительных элементов равных X справа i := mid + 1; while (i <= N) and (arr[i] = x) do begin writeln('Элемент равный X найден в позиции ', i); i := i + 1; end; break; end else if arr[mid] < x then left := mid + 1 else right := mid - 1; end; // Если элементов равных X не найдено if left > right then writeln('Элемент равный X не найден'); end.
В этом примере программа сначала запрашивает элементы массива у пользователя, затем сортирует массив, затем запрашивает число X и выполняет бинарный поиск элементов равных X в отсортированном массиве. Если элемент равный X найден, программа находит все элементы равные X в массиве.
Приведу пример реализации на языке Pascal:
program BinarySearch;const
N = 10;
var
arr: array[1..N] of Integer;
x, i, left, right, mid: Integer;
begin
// Заполнение массива
writeln('Введите элементы массива:');
for i := 1 to N do
readln(arr[i]);
// Сортировка массива
for i := 1 to N - 1 do
for j := i + 1 to N do
if arr[i] > arr[j] then
begin
arr[i] := arr[i] xor arr[j];
arr[j] := arr[i] xor arr[j];
arr[i] := arr[i] xor arr[j];
end;
// Ввод числа X
writeln('Введите число X:');
readln(x);
// Бинарный поиск элементов равных X
left := 1;
right := N;
while left <= right do
begin
mid := (left + right) div 2;
if arr[mid] = x then
begin
// Поиск элементов равных X
writeln('Элемент равный X найден в позиции ', mid);
// Поиск дополнительных элементов равных X слева
i := mid - 1;
while (i >= 1) and (arr[i] = x) do
begin
writeln('Элемент равный X найден в позиции ', i);
i := i - 1;
end;
// Поиск дополнительных элементов равных X справа
i := mid + 1;
while (i <= N) and (arr[i] = x) do
begin
writeln('Элемент равный X найден в позиции ', i);
i := i + 1;
end;
break;
end
else if arr[mid] < x then
left := mid + 1
else
right := mid - 1;
end;
// Если элементов равных X не найдено
if left > right then
writeln('Элемент равный X не найден');
end.
В этом примере программа сначала запрашивает элементы массива у пользователя, затем сортирует массив, затем запрашивает число X и выполняет бинарный поиск элементов равных X в отсортированном массиве. Если элемент равный X найден, программа находит все элементы равные X в массиве.