ВУЗ:
Составители:
Рубрика:
165
Пример 11.26. Переписать из массива а в массив b положительные элементы,
прижав их в массиве b к его началу.
Решение. Здесь исходным массивом является массива а, выходным - b.
Просматриваем поэлементно исходный массив и, обнаружив положительный
элемент, переписываем его в массив b. Здесь нельзя заранее установить формулу,
по которой на основе индекса элемента массива а вычисляется соответствующий
индекс в массиве b. Задача относится к «асинхронным». Введем разные индексы
для массива а (i) и массива b (j). Тогда
задача может быть решена так:
j:=0; {в массиве b нет пока ни одного элемента}
for i:=1 to n do
if a[i]>0 then begin
j:=j+1; {готовим место для следующего элемента}
b[j]:=a[i]
end.
Заметим, что в конце работы предложенного алгоритма значение j будет равно
количеству элементов в массиве b.
Упражнение. Выполните трассировку программы, расположенной ниже.
Какую работу она выполняет? Сравните данное решение с предложенным выше,
укажите преимущества и недостатки каждого решения.
j:=1;
for i:=1 to n do
if a[i]>0 then begin b[j]:=a[i]; j:=j+1 end.
Пример 11.27. Из массива а получить массив b, в котором элементы массива а
расположены в таком порядке: a
n
a
1
a
n-1
a
2
a
n-2
a
3
... .
Решение. Легко заметить, что элементы в массиве b чередуются следующим
образом. На первом месте стоит последний элемент из массива а, на втором -
первый, на третьем - предпоследний. Таким образом, на нечетных местах
располагаются элементы с конца массива а в порядке убывания индексов. На
четных местах в массиве b располагаются элементы с начала массива а
в порядке
возрастания индексов. Для этого решения выбираем схему перебора по элементам
массива b (цикл по выходному массиву). Элементы массива а перебираем по схеме
« обоих концов к середине» Запишем это решение на Паскале:
i:=1; {индексы массива а}
j:=n;
for k:=1 to n do
if odd(k)
then begin b[k]:=a[j]; j:=j-1 end
else begin b[k]:=a[i]; i:=i+1 end.
Упражнение. Установите какую работу выполняет приведенная ниже
программа. Сравните это решение с приведенным выше. Почему в данном
решении по окончании цикла необходим условный оператор?
i:=1;
j:=n;
for k:=1 to n div 2 do
begin b[2*k-1]:=a[j];
b[2*k]:=a[i];
165 Пример 11.26. Переписать из массива а в массив b положительные элементы, прижав их в массиве b к его началу. Решение. Здесь исходным массивом является массива а, выходным - b. Просматриваем поэлементно исходный массив и, обнаружив положительный элемент, переписываем его в массив b. Здесь нельзя заранее установить формулу, по которой на основе индекса элемента массива а вычисляется соответствующий индекс в массиве b. Задача относится к «асинхронным». Введем разные индексы для массива а (i) и массива b (j). Тогда задача может быть решена так: j:=0; {в массиве b нет пока ни одного элемента} for i:=1 to n do if a[i]>0 then begin j:=j+1; {готовим место для следующего элемента} b[j]:=a[i] end. Заметим, что в конце работы предложенного алгоритма значение j будет равно количеству элементов в массиве b. Упражнение. Выполните трассировку программы, расположенной ниже. Какую работу она выполняет? Сравните данное решение с предложенным выше, укажите преимущества и недостатки каждого решения. j:=1; for i:=1 to n do if a[i]>0 then begin b[j]:=a[i]; j:=j+1 end. Пример 11.27. Из массива а получить массив b, в котором элементы массива а расположены в таком порядке: ana1an-1a2an-2a3... . Решение. Легко заметить, что элементы в массиве b чередуются следующим образом. На первом месте стоит последний элемент из массива а, на втором - первый, на третьем - предпоследний. Таким образом, на нечетных местах располагаются элементы с конца массива а в порядке убывания индексов. На четных местах в массиве b располагаются элементы с начала массива а в порядке возрастания индексов. Для этого решения выбираем схему перебора по элементам массива b (цикл по выходному массиву). Элементы массива а перебираем по схеме « обоих концов к середине» Запишем это решение на Паскале: i:=1; {индексы массива а} j:=n; for k:=1 to n do if odd(k) then begin b[k]:=a[j]; j:=j-1 end else begin b[k]:=a[i]; i:=i+1 end. Упражнение. Установите какую работу выполняет приведенная ниже программа. Сравните это решение с приведенным выше. Почему в данном решении по окончании цикла необходим условный оператор? i:=1; j:=n; for k:=1 to n div 2 do begin b[2*k-1]:=a[j]; b[2*k]:=a[i];
Страницы
- « первая
- ‹ предыдущая
- …
- 161
- 162
- 163
- 164
- 165
- …
- следующая ›
- последняя »