Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика (методичка).doc
Скачиваний:
276
Добавлен:
03.03.2016
Размер:
1.43 Mб
Скачать

5.5. Добавление и удаление элементов массива

Для добавления нового элемента массива необходимо выполнить следующую последовательность действий: увеличить размерность на единицу; сдвинуть вправо на одну позицию часть массива, начиная с позиции, в которую добавляется элемент; в «освободившийся» элемент записать добавляемое значение.

Пример 5.5.1. В массив Х размерностью N добавить новый элемент. Значение нового элемента и позиция, в которую он добавляется, указываются при вводе.

На рис. 5.5.1. приведен фрагмент блок-схемы алгоритма решения поставленной задачи. Процесс ввода и вывода массива Х не показан, т.к. он не отличается от описанного в п. 5.1.

В блоке 1 в переменную Авводится значение нового элемента массива, а в переменнуюkзаносится номер позиции, в которую он будет добавляться. После этого увеличивается размерность массиваNна единицу (блок 2) и проверяется, действительно ли новый элемент добавляется в середину массива (блок 3). В этом случае производится сдвиг части элементов массива Х сN-й доk-й позиции вправо (блоки 4-5) и значение переменнойАзаносится в «освободившийся» элемент массива с номеромk(блок 6). Если условие в блоке 3 не выполняется, то новый элемент добавляется в конец массива Х (блок 7).

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

Пример 5.5.2.Из массива Х размерностьюNудалить элемент с номеромk. Номер удаляемого элемента указывается при вводе.

На рис. 5.5.2. показан фрагмент блок-схемы алгоритма решения поставленной задачи. При этом процесс ввода и вывода массива Х также не приводится.

В блоке 1 в переменную kвводится номер элемента, который необходимо удалить. В блоке 2 проверяется, находится ли удаляемый элемент в середине массива. В этом случае производится сдвиг части элементов массива Х сk-й доN-й позиции влево (блоки 3-4) и уменьшается размерность массиваNна единицу (блок 7). В противном случае проверяется, не является ли удаляемый элемент последним в массиве (блок 5). Если это так, то для удаления элемента достаточно всего лишь уменьшить размерность массиваN(блок 7). Если же значениеkне удовлетворяет этим двум условием, значит, оно задано не верно и удаление элемента из массива не производится (блок 6).

Иногда возникает необходимость удалить из массива не один, а несколько элементов, удовлетворяющих определенному условию (например, все элементы, значение которых равно 0). Для этой цели необходимо организовать два цикла по перебору элементов массива. Первый цикл (внешний) будет искать в массиве элементы, которые необходимо удалить. Второй цикл (внутренний) будет удалять найденные элементы, описанным выше способом. При этом для организации внешнего цикла не рекомендуется использовать цикл «Для». Это связано с тем, что после удаления элемента во внутреннем цикле, будет уменьшаться размерность массива, которая в свою очередь является граничным значением для параметра внешнего цикла.

На рис. 5.5.3. приводится фрагмент блок-схемы алгоритма, в котором выполняется удаление всех нулевых элементов из массива за один цикл.

Переменная kвыполняет две функции: является счетчиком элементов массива, которые не надо удалять (не равные 0), и в тоже время задает позицию в массиве Х, в которую переставляется такой элемент (блок 1). В массиве осуществляется поиск (блоки 2-3) и подсчет количества элементов, которые не должны быть удалены (блок 4); каждый найденный элемент переставляется в начало массива в позицию, совпадающую с порядковым номером этого элемента (блок 4).

В результате все нулевые элементы массива будут пропущены, а элементы не равные 0 выставлены подряд в начало массива, размерность которого уже будет равна k (блок 5).