Помощь - Поиск - Пользователи - Календарь
Полная версия: Одномерные массивы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
frogg
даны массивы A(N), B(M) и натуральные числа K, L переместить элементы массива А вправо на К позицийа элементы массива В вправо на L позиций. Перемещение элементов массива вправо на заданное кол-во позиций с использованием вспомогательного массива оформить в виде подпрограммы

помогите плиз. Спасибо за ранее
Lapp
Цитата(frogg @ 30.03.2009 21:19) *
даны массивы A(N), B(M) и натуральные числа K, L переместить элементы массива А вправо на К позицийа элементы массива В вправо на L позиций. Перемещение элементов массива вправо на заданное кол-во позиций с использованием вспомогательного массива оформить в виде подпрограммы

помогите плиз. Спасибо за ранее
А что делать с освобождающимися элементами массивов? Или ты имеешь в виду циклическое перемещение?
frogg
Цитата(Lapp @ 31.03.2009 1:32) *

А что делать с освобождающимися элементами массивов? Или ты имеешь в виду циклическое перемещение?

циклическое
volvo
frogg, есть 2 способа циклически сдвинуть массив на 1 элемент вправо или влево. И для этого даже не нужен никакой вспомогательный массив:

способ 1 (пищу для сдвига влево, вправо делается по аналогии):
Запоминаешь элемент, который был первым. Начиная со второго и до конца массива (длина ж тебе известна?) переносишь элемент Ai на одну позицию левее: A[i - 1] := A[ i ]. Ну, а потом - устанавливаешь в последний, самый правый элемент, то значение, которое было сохранено ранее из первой (левой) ячейки.

способ 2: запоминаешь первый элемент (это придется делать, никуда от этого не денешься), потом без цикла, одним вызовом процедуры Move переносишь все элементы массива на одну позицию левее:
Move(A[2], A[i], (size - 1)*Sizeof(integer));

(здесь size - размер массива A, а integer - тип элементов массива, если у тебя массивы вещественных чисел - то надо будет поставить другой тип). И потом опять же последнему элементу присвоить сохраненное ранее значение.

Выбирай, что больше нравится. Процедура Move присутствует в Паскале, ее не надо изобретать и реализовывать, она уже есть, только использовать (это так, на всякий случай, информация).
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.