Скачиваний:
37
Добавлен:
29.03.2016
Размер:
1.27 Mб
Скачать

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;

Соседние файлы в папке ЛР по программированию FreePASCAL