
- •Введение
- •Структурные типы данных
- •Множества
- •Массивы
- •Ввод-вывод массивов
- •Вставка и удаление элемента в массив
- •Поиск
- •Последовательный поиск.
- •Бинарный поиск
- •Поиск максимального и минимального элементов массива
- •Сортировка
- •Пузырьковая сортировка
- •Сортировка методом выбора
- •Задания к лабораторной работе
- •Вопросы к лабораторной работе
- •Справочные таблицы

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»
dec(n); //уменьшаем длину массива end
else begin
writeln('Invalid index'); readln;
Halt(0);
end;
//Вывод элементов массива на экран
for i:=1 to n do writeln('a[', i, ']=', a[i]:6:2);
readln;
end.
Поиск
Поиск – это действие, заключающееся в просмотре набора элементов и выделении из этого набора интересующего элемента. Если элементы в массиве не отсортированы, то может использоваться только один алгоритм поиска – последовательный поиск. В случае если массив отсортирован, то возможен бинарный поиск.
Последовательный поиск.
Последовательный поиск заключается в выборе каждого элемента массива и сравнения его с искомым. Быстродействие алгоритма пропорционально числу элементов. Реализация этого алгоритма с помощью цикла for … to … do приведена в листинге 5
Листинг 5
program Search;
{$APPTYPE CONSOLE}
const nmax=5; //емкость массива
var a:array [0..nmax] of real; //массив
index:integer; |
//индекс искомого элемента |
|
Value:real; |
//значение элемента для поиска |
|
i |
:Integer; |
|
begin
writeln('Vvedite massiv ', nmax+1, 'elements');
//Ввод массива for i:=1 to nmax do
begin
write('a[', i, ']='); readln(a[i]);
end;
//элемент для поиска
writeln('Input element for search'); readln(Value);
//поиск index:=-1;
for i:=Low(a) to High(a) do if a[i]=Value then

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»
begin index:=i; break;
end;
if index>=0 then //если элемент найден writeln('Element found in ', index, ' position')
else //если элемент не найден writeln('Element not found!');
readln;
end.
Бинарный поиск
Алгоритм бинарного поиска применим только для отсортированного массива. Бинарный поиск работает следующим образом. Берем средний элемент массива и проверяем равен ли он искомому элементу,. если равен, то поиск окончен. В противном случае, если искомый элемент меньше среднего, то можно сказать, что если элемент присутствует в массиве, то он находится в первой его половине. С другой стороны, если искомый элемент больше среднего, то он находится во второй части массива. Таким образом, одним сравнением удалось локализовать искомый элемент в массиве двое меньшей размерности. Описанная операция повторяется до тех пор, пока искомый элемент не будет найден (если он присутствует в массиве). Так как при каждом выполнении цикла размер массива уменьшается в два раза, то быстродействие алгоритма будет пропорционально log2 n . Так, например для поиска в массиве из 256 элементов
понадобится произвести всего 8 сравнений. Реализация алгоритма приведена в листинге 6.
Листинг 6
program Search2;
{$APPTYPE CONSOLE}
const n=10;//длина массива
var a:array [0..n-1] of integer=(1,2,3,4,5,16,17,56,78,110);
l, |
//левый индекс |
r, |
//правый индекс |
m:integer; //индекс среднего элемента el:integer;//значение искомого элемента
begin
write('Vvedite element dlia poiska '); readln(el);
l:=0; r:=n-1;
while l<=r do begin
m:=(l+r) div 2;//вычисляем индекс среднего элемента
{если значение среднего элемента меньше искомого значения, то переместить левый индекс на позицию до среднего индекса} if a[m]<el then l:=succ(m)
{если значение среднего элемента больше искомого значения, то переместить правый индекс на позицию после среднего
индекса} else
if a[m]>el then r:=pred(m)