Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Одномерные массивы

Автор: frogg 31.03.2009 0:19

даны массивы A(N), B(M) и натуральные числа K, L переместить элементы массива А вправо на К позицийа элементы массива В вправо на L позиций. Перемещение элементов массива вправо на заданное кол-во позиций с использованием вспомогательного массива оформить в виде подпрограммы

помогите плиз. Спасибо за ранее

Автор: Lapp 31.03.2009 4:32

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

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

Автор: frogg 31.03.2009 13:06

Цитата(Lapp @ 31.03.2009 1:32) *

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

циклическое

Автор: volvo 1.04.2009 15:03

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 присутствует в Паскале, ее не надо изобретать и реализовывать, она уже есть, только использовать (это так, на всякий случай, информация).