- •Павлыш в.Н., Ефименко к.Н., Добровольский ю.Н.
- •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.4. Циклический сдвиг элементов массива
Под циклическим сдвигом понимается перестановка значений всех элементов массива на одну или несколько позиций влево или вправо. При этом значение первого (последнего) элемента массива заносится в последний (первый) элемент массива в зависимости от направления сдвига.
Схематичное изображение циклического сдвига элементов массива вправо на одну позицию, выполняемого в три этапа, показано на рис. 5.4.1. Блок-схема алгоритма, выполняющего такой сдвиг, показана на рис. 5.4.2.
На 1-м этапе значение последнего элемента массиваXNзаносится в дополнительную переменнуюА(блок 1). На 2-м этапе организовывается цикл «Для» на основе блока модификации (блок 2), который перебирает элементы массива Х в обратном порядке, т.е. с правого края (шаг -1), начиная сN-го и заканчивая 2-м элементом. На каждом шаге цикла текущему элементуXiприсваивается значение предыдущего элементаXi-1(блок 3). В результате выполнения 2-го этапа значение предварительно сохраненного последнего элемента массива будет удалено. Значения остальных элементов массива будут смещены на одну позицию вправо. Значение первого элемента массива будет продублировано во втором элементе. На 3-м этапе алгоритма значение дополнительной переменнойА, в которой хранится последний элемент исходного массива, будет занесено в первый элемент массиваX1. В итоге будет выполнен циклический сдвиг элементов массива Х на одну позицию вправо.
Следует обратить внимание на граничные значения параметра цикла i, который изменяется отNдо 2. При подстановке этих значений в формулу сдвига не должно происходить обращение к несуществующим элементам массива. Приi =Nформула сдвига принимает видXN =XN -1, приi =2 –X2 =X1. В случае если бы правая граница параметраiбыла равна 1, то в формуле сдвига происходило бы обращение к несуществующему элементу массива с индексом 0:X1=X0, что недопустимо.
Схематичное изображение циклического сдвига элементов массива влево на одну позицию, также выполняемого в три этапа, показано на рис. 5.4.3. Блок-схема алгоритма, выполняющего такой сдвиг, показана на рис. 5.4.4.
На 1-м этапе значение первого элемента массива X1заносится в дополнительную переменнуюА(блок 1). На 2-м этапе организовывается цикл «Для» (блок 2), который перебирает элементы массива Х в прямом порядке, т.е. с левого края (шаг +1), начиная с 1-го и заканчиваяN-1-м элементом. На каждом шаге цикла текущему элементуXiприсваивается значение последующего элемента массиваXi+1(блок 3). В результате выполнения 2-го этапа значение предварительно сохраненного первого элемента массива будет удалено. Значения остальных элементов массива будут смещены на одну позицию влево. Значение последнего элемента массива будет продублировано в предпоследнем элементе. На 3-м этапе алгоритма значение дополнительной переменнойА, в которой хранится первый элемент исходного массива, будет занесено в последний элемент массиваXN. В итоге будет выполнен циклический сдвиг элементов массива Х на одну позицию влево.
Для выполнения циклического сдвига элементов массива наkпозиций достаточноkраз выполнить алгоритм сдвига на одну позицию, т.е. добавить внешний цикл, который будет требуемое количество раз повторять сдвиг на одну позицию. Пример блок-схемы алгоритма, выполняющего циклический сдвиг элементов массива наkпозиций влево, представлен на рис. 5.4.5.
Сдвиг элементов массива находит применение при удалении или добавлении элементов в массив, а также в других задачах.