ВУЗ:
Составители:
Рубрика:
162
while i<j do
begin r:=a[i];
a[i]:=a[j];
a[j]:=r;
i:=i+1; j:=j-1
end.
Пример 11.21. Задан одномерный массив. Нужно переставить в обратном
порядке его элементы, начиная с элемента с индексом p и заканчивая элементом с
индексом q. Дополнительный массив использовать не разрешается. Например, для
массива a={1,1,2,3,4,5,6,7,7,7,7,8} и p=3, а q=7 получится результат
a={1,1,6,5,4,3,2,7,7,7,7,8}.
Решение. Заметим, что эта задача похожа на предыдущую. В ней изменялся
массив целиком, а здесь только часть, расположенная между элементами с
индексами p и q включительно. Решение этой задачи легко получается из второго
решения предыдущей задачи заменой начальных значений переменных i и j.
i:=p;
j:=q;
while i<j do
begin r:=a[i];
a[i]:=a[j];
a[j]:=r;
i:=i+1;
j:=j-1
end.
Упражнения:
1. Решите задачу примера 11.21, используя идею решения примера 11.20. Какое
решение легче для понимания? Почему?
2. Как Вы думаете, какая задача является более общей: задача примера 11.20
или задача примера 11.21? Почему?
Пример 11.22. Сдвинуть элементы одномерного массива на r элементов вправо.
Выпадающие из массива элементы становятся в его начало. Например, для
исходного массива a={1,2,3,4,5,6,7,8,9} и r=3 последовательно получаем: после
первого сдвига a={9,1,2,3,4,5,6,7,8}, после второго сдвига a={8,9,1,2,3,4,5,6,7},
после третьего сдвига a={7,8,9,1,2,3,4,5,6}.
Решение. Описанную выше идею можно положить в основу алгоритма. Тогда
для решения задачи нужно r раз выполнить следующее: запомнить последний
элемент; сдвинуть все оставшиеся элементы на один вправо; записать запомненный
элемент на первое место в массиве. Получаем решение:
for i:=1 to r do
begin s:=a[n];
for j:=n-1 downto 1 do a[j+1]:=a[j];
a[1]:=s
end.
Упражнение. Напишите аналогичный алгоритм для сдвига элементов
одномерного массива на L влево.
162 while i
Страницы
- « первая
- ‹ предыдущая
- …
- 158
- 159
- 160
- 161
- 162
- …
- следующая ›
- последняя »