Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие по VB.doc
Скачиваний:
23
Добавлен:
12.11.2018
Размер:
2.66 Mб
Скачать
        1. Уплотнение массива

Уплотнение массива – это удаление из него элементов, отвечающих тем или иным условиям. Образующиеся пустоты заполняются за счет сдвига всех оставшихся элементов. Так как длина массива при этом уменьшается, то при обработке массива необходимо использовать не цикл с параметром, а цикл с условием.

Алгоритм удаления элемента из массива состоит в том, что на место удаленного i-го элемента переписывается i+1-ый элемент, на место i+1-го элемента переписывается i+2-ой элемент и т.д.

Пример. Удалить из сформированного массива числа, кратные трем.

Фрагмент программного кода уплотнения массива (нумерация элементов массива начинается с единицы):

i=1 'Инициализация счетчика

'Цикл последовательного перебора имеющихся элементов. Изначально их n штук

Do While i<=n 'Пока i остается <=N тело цикла выполняется

If (a(i) mod 3 <> 0) or (a(i)=0) Then ' Проверка условия

i=i+1 'Увеличение параметра цикла, если элемент не кратен 3

Else

For j=i To n-1 'Цикл для удаление из массива элемента кратного 3

a(j)=a(j+1) 'На место элемента aj переписывается элемент aj+1

Next j

n=n-1 'Уменьшение на единицу количества элементов массива

End if

Loop 'Конец цикла While

        1. Вставка элемента в массив

Вставка элемента в массив – задача обратная предыдущей. Прием используется тот же – смещение группы элементов на одну позицию. Только при уплотнении сдвиг производится влево, при вставке – вправо. При вставке возникает проблема, что делать с последними элементами? Если в дальнейшей работе с массивом участвуют только заявленные элементы, то «хвост» придется вытеснить, последние значения при этом будут утрачены. Иначе, придется создавать дополнительный массив, размерность которого будет больше исходного или объявить размер массива с учетом количества вставленных элементов. Выбор типа цикла для работы с массивом зависит от конкретного случая. Например, можно использовать цикл с параметром, если хвост подлежит вытеснению, и число элементов в массиве остается неизменным.

Пример 1. В заданный упорядоченный по возрастанию массив вставить число k, не нарушая его упорядоченности. Последний элемент вытеснить.

Фрагмент программного кода:

For i=1 To n 'Цикл для перебора элементов массива

If k < a(i) Then 'Поиск места для вставки нового значения k

'Если место найдено, то организуется цикл для смещения элементов на единицу вправо

For j=N-1 Downto i+1

a(j)=a(j-1) ' На место элемента aj переписывается элемент aj-1

Next i

a(i)=k 'Вставка нового значения на освобожденное место

Exit For 'Выход из внешнего цикла i

End if

Next i

Пример 2. В одномерный массив вставить число x после всех элементов, кратных трем. Все элементы массива сохранить.

При описании данного массива необходимо учесть, что его размер может увеличиться максимум вдвое.

Фрагмент программного кода:

kol=0; 'Счетчик количества вставок

For i=n To 1 'Цикл для перебора элементов массива c конца

If a(i) mod 3=0 Then 'Поиск места для вставки нового значения k.

'Если место найдено, то организуется цикл для смещения элементов на единицу вправо

'с учетом вставленных элементов

For j=n+kol To i+1

a(j+1)=a(j) 'На место j+1-го элемента переписывается j-ый элемент

Next j

a(i+1)=x 'Вставка нового значения на освобожденное место

kol=kol+1 'Счетчик количества вставок увеличивается на 1

End if

Next i