Сортировка и бинарный поиск - Pascal ABC
Формулировка задачи:
заполнить массив случайными числами и ввести число и отсортировать его. ввести число x используя двоичный поиск. определите есть ли в массиве число равное X ,если такого числа нет вывести число ближайшее к x
пример
массив:
1 4 7 3 9 2 4 5 2
после отсортировки:
1 2 2 3 4 4 5 12 19
введите число X:
12
число 12 найдено
пример
массив:
1 4 7 3 9 2 4 5 2
после отсортировки:
1 2 2 3 4 4 5 12 19
введите число X:
11
число 11 не найдено. Ближайшее число 12
Решение задачи: «Сортировка и бинарный поиск»
textual
Листинг программы
const n=10;
var a:array [1..n] of integer;
j,i,x,c,m,l,r:integer;
begin
writeln('Массив: ');
for i:=1 to n do
begin
a[i]:=1+random(30);
write(a[i]:3);
end;
writeln;
for i:= 1 to n-1 do
for j:= 1 to n-1 do
if a[j]>a[j+1] then
begin
m:=a[j];
a[j]:=a[j+1];
a[j+1]:=m;
end;
writeln('Отсортированный массив: ');
for i:=1 to n do
write(a[i]:3);
writeln;
writeln('Введите число Х:');
readln(x);
l:=1;r:=n;
for i:=1 to n do
begin
c:=(l+r) div 2;
if a[c]>x then r:=c
else if a[c]<x then l:=c
else l:=r;
end;
if l<>r then
begin
write('Число ',x,' не найдено, ближайшее число ');
if abs(a[r]-x)<abs(a[l]-x) then write(a[r])
else write(a[l]);
end
else write('Число ',x,' найдено');
end.
Объяснение кода листинга программы
- Создается константа n, которая определяет количество элементов в массиве.
- Создается переменная a, которая представляет собой массив из n элементов типа integer.
- Создаются переменные j, i, x, c, m и l, которые будут использоваться для сортировки и поиска элемента в массиве.
- Выводится сообщение с описанием массива.
- Для каждого i от 1 до n выполняется следующая последовательность действий:
- a[i] присваивается значение, равное сумме случайного числа от 1 до 30.
- Значение a[i] выводится на экран.
- Выполняется сортировка массива методом пузырька.
- Выводится отсортированный массив.
- Запрашивается число Х.
- Вычисляются границы диапазона поиска от 1 до n.
- Для каждого i от 1 до n выполняется следующая последовательность действий:
- Вычисляется средний индекс c.
- Если a[c] больше Х, то r устанавливается равным c.
- Если a[c] меньше Х, то l устанавливается равным c.
- Если a[c] равно Х, то l устанавливается равным r.
- Проверяется, были ли найдены все значения Х в массиве.
- Если l и r не равны, то выводится сообщение о том, что число Х не найдено.
- Если l и r равны, то выводится сообщение о том, что число Х найдено.