Вопрос задан 21.07.2026 в 20:46. Предмет Информатика. Спрашивает Тучинський Назар.

Найти все элементы массива, равные Х, используя бинарный поиск. Х вводится с клавиатуры. Написать программу на Паскале методом «Поиск элементов в одномерном массиве». Решить с использованием процедуры.

Перейти к ответам

Ответы на вопрос

Отвечает Краснощекова Алеся.

Для решения задачи необходимо найти все элементы одномерного массива, равные заданному числу X, используя бинарный поиск. Бинарный поиск работает только в отсортированном массиве, поэтому перед поиском массив необходимо упорядочить по возрастанию.

Алгоритм работы программы:

  1. Ввести размер массива.

  2. Ввести элементы массива.

  3. Отсортировать массив.

  4. Ввести число X.

  5. С помощью процедуры выполнить бинарный поиск:

    • найти один элемент, равный X;

    • если элемент найден, проверить соседние элементы слева и справа, так как одинаковых значений может быть несколько;

    • вывести все позиции найденных элементов.

  6. Если число отсутствует, вывести соответствующее сообщение.

Программа на Pascal с использованием процедуры:

pascal
program PoiskElementov;

const
Nmax = 100;

type
Massiv = array[1..Nmax] of integer;

var
a: Massiv;
n, x, i, j, temp: integer;

procedure BinarySearchAll(a: Massiv; n, x: integer);
var
left, right, mid: integer;
first, last, i: integer;
found: boolean;
begin
left := 1;
right := n;
found := false;

while left <= right do
begin
mid := (left + right) div 2;

if a[mid] = x then
begin
found := true;
break;
end
else
if a[mid] < x then
left := mid + 1
else
right := mid - 1;
end;

if found then
begin
first := mid;
last := mid;

while (first > 1) and (a[first - 1] = x) do
first := first - 1;

while (last < n) and (a[last + 1] = x) do
last := last + 1;

writeln('Элементы, равные ', x, ' находятся на позициях:');

for i := first to last do
writeln('Позиция ', i, ', значение ', a[i]);
end
else
writeln('Элементов, равных ', x, ', нет.');
end;

begin
write('Введите количество элементов массива: ');
readln(n);

writeln('Введите элементы массива:');
for i := 1 to n do
readln(a[i]);

{ Сортировка массива по возрастанию }
for i := 1 to n - 1 do
for j := i + 1 to n do
if a[i] > a[j] then
begin
temp := a[i];
a[i] := a[j];
a[j] := temp;
end;

writeln('Отсортированный массив:');
for i := 1 to n do
write(a[i], ' ');
writeln;

write('Введите число X для поиска: ');
readln(x);

BinarySearchAll(a, n, x);

readln;
end.

В данной программе процедура BinarySearchAll выполняет поиск элементов с помощью бинарного поиска. После нахождения одного совпадения она проверяет соседние элементы, чтобы найти все одинаковые значения X в массиве. Сортировка нужна потому, что бинарный поиск применяется только к упорядоченным данным.

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос