Найти все элементы массива, равные Х, используя бинарный поиск. Х вводится с клавиатуры. Написать программу на Паскале методом «Поиск элементов в одномерном массиве». Решить с использованием процедуры.
Ответы на вопрос
Для решения задачи необходимо найти все элементы одномерного массива, равные заданному числу X, используя бинарный поиск. Бинарный поиск работает только в отсортированном массиве, поэтому перед поиском массив необходимо упорядочить по возрастанию.
Алгоритм работы программы:
-
Ввести размер массива.
-
Ввести элементы массива.
-
Отсортировать массив.
-
Ввести число X.
-
С помощью процедуры выполнить бинарный поиск:
-
найти один элемент, равный X;
-
если элемент найден, проверить соседние элементы слева и справа, так как одинаковых значений может быть несколько;
-
вывести все позиции найденных элементов.
-
-
Если число отсутствует, вывести соответствующее сообщение.
Программа на Pascal с использованием процедуры:
pascalprogram 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 в массиве. Сортировка нужна потому, что бинарный поиск применяется только к упорядоченным данным.
Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili

