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

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.

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