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

end;{for i}
readln;
end.
Вставка и удаление элемента в массив
Рассмотрим алгоритм вставки элемента в массив. Для простоты будем рассматривать только одномерные массивы. Массив состоит из некоторого количества элементов nmax (емкость
массива). Текущее количество элементов массива находится в переменной n.
Перед вставкой очередного элемента проверяем, что текущее количество элементов массива меньше, чем его емкость.
Далее проверяем, вставляется ли элемент в конец массива или нет. Если элемент вставляется в конец массива, то увеличиваем n на единицу и добавляем элемент. Иначе сдвигаем элементы массива индекс которых больше или равен индексу вставляемого элемента, рисунок 3.
Приведенный алгоритм реализован в программе, приведенной в листинге 6.
Листинг 6 – Вставка элемента в массив
{$IFDEF FPC}
{$MODE DELPHI} {$ENDIF}
{$APPTYPE CONSOLE} program InsElt;
const nmax = 5; //емкость массива
var a:array |
[1..nmax] of real; |
//массив |
element |
:real; |
//элемент для вставки |

index |
:integer; |
//индекс элемента |
для вставки |
n |
:integer; |
//число элементов |
массива |
i:integer;
begin
writeln('Vvedite chislo elementov massiva'); readln(n);
//Ввод массива
for i:=1 to n do begin write('a[', i, ']='); readln(a[i]);
end;
//Элемент для вставки writeln('Vvedite element'); readln(element);
//Индекс элемента
writeln('Vvedite index elementa'); readln(index);
//Вставка элемента
if index < n+1 then begin
inc(n); //увеличиваем длину массива
if (Low(a) <= index) and (index <= n) then for i:=n downto index do
a[i]:=a[i-1]; //сдвиг массива
a[index]:=element; 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.
Удаление элемента происходит аналогично. Сначала проверяется, что индекс элемента не выходит за диапазон допустимых значений, а затем сдвигаются элементы таким образом, чтобы закрыть удаляемый элемент, рисунок 4

Листинг 7
{$IFDEF FPC}
{$MODE DELPHI} {$ENDIF}
{$APPTYPE CONSOLE} program DelElt;
const nmax = 5; //емкость массива
var a:array [1..nmax] of real; |
//массив |
|
|
index:integer; |
//индекс элемента |
для вставки |
|
n |
:integer; |
//число элементов |
массива |
i:integer;
begin
writeln('Vvedite chislo elementov massiva'); readln(n);
//Ввод массива
for i:=1 to n do begin write('a[', i, ']='); readln(a[i]);
end;
//Индекс элемента
writeln('Vvedite index elementa'); readln(index);
//Удаление элементов
if index<n+1 then begin
if (Low(a) <= index) and (index <= n) then for i:=index to n do
a[i]:=a[i+1]; //сдвиг массива dec(n); //уменьшаем длину массива end
else begin writeln('Invalid index'); readln;
Halt(0);
end;