- •Павлыш в.Н., Ефименко к.Н., Добровольский ю.Н.
- •1. Алгоритмы и способы их описания
- •2. Алгоритмы линейной структуры
- •3. Алгоритмы разветвляющейся структуры
- •4. Алгоритмы циклической структуры
- •4.1. Структура и основные типы циклов
- •4.2. Алгоритмы нахождения суммы, произведения и количества вычисленных значений
- •4.3. Циклы с неизвестным числом повторений
- •4.4. Вложенные циклы
- •5. Алгоритмы обработки одномерных массивов
- •5.1. Ввод и вывод элементов одномерного массива
- •5.2. Нахождение максимального и минимального элементов массива
- •5.3. Сортировка элементов массива
- •5.4. Циклический сдвиг элементов массива
- •5.5. Добавление и удаление элементов массива
- •6. Алгоритмы обработки двумерных массивов
- •7. Алгоритмы, содержащие вспомогательные подзадачи
- •Задания к контрольной работе Задание №1.Организация линейного и разветвляющегося
- •Варианты заданий.
- •Задание №2. Организация циклов с известным числом повторений
- •Варианты заданий.
- •Задание № 3. Организация циклов с неизвестным числом повторений
- •Варианты заданий.
- •Задание № 4. Организация вложенных циклов
- •Варианты заданий.
- •Задание № 5. Обработка одномерных массивов
- •Задание № 6. Обработка двумерных массивов
- •Варианты заданий.
- •Задание № 7. Использование процедур и функций
- •Варианты заданий.
- •Рекомендации к выполнению контрольной работы
- •Методическое пособие «основы алгоритмизации»
- •Составители: Павлыш Владимир Николаевич, д.Т.Н., проф. Ефименко Константин Николаевич, к.Т.Н., доц.
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).