Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Обработка массивов.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
502.27 Кб
Скачать

Удаление элемента из массива

Пример 9: Удалить из массива 1-ый элемент.

Удаление элемента заключается в:

1. сдвиге элементов, стоящих правее удаляемого влево;

2. уменьшении количества элементов массива n на количество удаляемых элементов.

Пример исходного массива A:

5

3

9

4

-5

11

52

Массив после удаления первого элемента:

3

9

4

-5

11

52

Сдвиг элементов выполняется так:

1. Начиная с удаляемого элемента, копируем содержимое элемента, стоящего правее в текущий элемент: A[i]:=A[i+1].

2. Переходим к следующему элементу вправо: i:=i+1.

3. Заканчиваем сдвиг, когда i=n-1, так как i+1 при i=n-1 равен n.

Фрагмент программы:

…………………………….

{1 - сдвигаем элементы на одну позицию вправо}

{вначале i:=1, потому что надо удалить 1-ый элемент}

for i:=1 to n-1 do

A[i]:=A[i+1];

{2 - уменьшаем количество элементов в массиве}

n:=n-1;

…………………………….

Пример 10: Удалить из массива максимальный элемент массива.

Для этого надо:

1. Найти индекс максимального элемента.

2. Удалить элемент с найденным индексом.

Пример исходного массива A:

5

3

9

94

-5

11

52

Массив после удаления максимального элемента:

5

3

9

-5

11

52

Фрагмент программы:

Var {дополнительные переменные}

imax:IndexEl; {индекс максимального элемента}

…………………………….

Begin

…………………………….

{1 - ищем индекс максимального элемента массива}

imax:=1; {вначале imax указывает на первый элемент}

{в цикле начиная со 2-го элемента}

for i:=2 to n do

{сравниваем i-ый элемент с максимальным на текущий момент времени, и если i-ый элемент больше максимального, то максимальным становится i-ый элемент}

if A[i]>A[imax] then imax:=i;

{2 - удаляем элемент массива с индексом imax}

for i:=imax to n-1 do

A[i]:=A[i+1];

dec(n); {уменьшаем n на 1}

…………………………….

Замечание: в ТР имеются процедуры увеличения и уменьшения

переменной целого типа.

Inc - увеличение значения переменной.

Вид вызова для целого X

Inc(x); x:=x+1;

Inc(x,n); x:=x+n;

где x - переменная целого типа;

n - целочисленное выражение.

В первом случае переменной x присваивается следующее значение (например, x была равна 10, тогда после выполнения inc(x) x равна 11). Таким образом, можно сказать, что запись inc(x) эквивалентна записи x:=x+1.

Можно также сказать, что запись inc(x,n) эквивалентна записи x:=x+n.

Dec – уменьшение значения переменной.

Вид вызова Для целого X

Dec(x); x:=x-1;

Dec(x,n); x:=x-n;

Вставка новых элементов в массив

Пример 11: В массив после максимального элемента вставить элемент, равный 0.

Пример исходного массива A:

1

2

5

1

0

1

2

максимальный элемент A[3]=5

Массив после вставки элемента:

1

2

5

0

1

0

1

2

Алгоритм вставки элемента в массив:

1. Сдвинуть элементы от позиции вставляемого элемента в конец.

2. В позицию вставляемого элемента вписать нужное значение.

3. Количество элементов n увеличить на 1 .

Общий алгоритм программы следующий:

1 . Введем массив А.

2 . Найдем индекс max элемента.

3 . Вставим после max 0.

4 . Выведем получившийся массив.

Приведем полный текст программы:

{Пример обработки одномерного массива}

{ Задание: В массив после максимального элемента вставить элемент, равный 0}

Program InsertExample;

Const {определение констант}

maxN = 20; {максимально возможное количество элементов в массиве}

Type {определение типов}

IndexEll = 1 .. maxN; {индексы массива лежат в интервале от 1 до maxN}

masInt = array[interval] of integer; {массив целых чисел, содержащий до maxN элементов}

Var

a:masInt; {массив}

n:integer; {количество элементов в массиве}

i:IndexEl; {переменная для сканирования массива}

max: IndexEl; {номер max элемента массива}

Begin

{1 - ввод массива - генерируем случайные элементы}

randomize;

n:=random(6)+5; {n в интервале 5..10}

for i:=1 to n do

A[i]:=random(19)-9; {Генерируем элементы массива}

{ каждый элемент имеет значение в интервале -9..9}

{2 - ищем индекс max элемента}

max:=1;

for i:=2 to n do

if A[i]>A[max] then max:=i;

{3- вставляем 0 после максимального элемента}

{сначала сдвигает “хвост” массива вправо}

for i:=n downto max+1 do

A[i+1]:=A[i];

{заносим в следующий за максимальным элемент 0}

A[max+1]:=0;

{увеличиваем количество элементов массива}

Inc(n);

{4 - выводим массив}

writeln('Массив А после вставки:');

for i:=1 to n do

write(A[i]:3);

readln; {ждем нажатия клавиши Enter}

End.

Данная программа демонстрирует модульный подход к решению задач - задача разбивается на подзадачи, полученные подзадачи решаются отдельно. Если подзадача не решается непосредственно, то она снова разбивается на подзадачи и т.д. Такой подход называется "программирование сверху вниз".

Замечание: данная программа таит в себе ошибку. Если n=20, то после вставки еще одного элемента n станет равной 21, и, скорее всего, программа повиснет (потому что элементов в массиве может быть НЕ БОЛЬШЕ 20). Следовательно, при вставке элементов необходимо следить, чтобы было n<=maxN .