ВУЗ:
Составители:
Рубрика:
168
часть массива называется подмассивом. Методы работы с подмассивами совпадают
с методами работы с несколькими массивами.
Пример 11.30. В заданном одномерном массиве все нулевые элементы
переписать в конец массива. Например, для массива a={1,0,2,3,0,4,5,0,0,0,6}
должен получиться результат a={1,2,3,4,5,6,0,0,0,0,0}.
Решение. Можно воспользоваться услугами вспомогательного массива, в
который вначале перепишем ненулевые элементы (вспомним пример 11.26),
оставшуюся часть вспомогательного массива заполним нулями. Чтобы закончить
решение, останется переписать содержимое вспомогательного массива в исходный
массив. Соответствующий вариант решения приведен ниже. Здесь а - исходный
массив, i - индекс массива а, b - вспомогательный массив, j - его индекс.
Размерность обоих массивов - n.
j:=1; { указывает
номер первой свободной позиции в массиве b }
{ переписываем все ненулевые элементы из b в а }
for i:=1 to n do
if a[i]<>0 then begin b[j]:=a[i]; j:=j+1 end;
{ заполняем остаток массива b нулями }
for i:=j to n do b[i]:=0;
{ переписываем массив b в а }
a:=b.
Проанализируем полученное решение. Главным его недостатком является
использование вспомогательного массива - нерациональное использование
оперативной памяти компьютера. Попробуем обойтись без него. В данном случае
можно записывать ненулевые элементы
в начало исходного массива. Место записи
элемента указывает переменная j, которая передвигается по массиву только после
записи ненулевого элемента. При найденном нуле значение переменной j не
изменяется. Переменная i будет указывать на проверяемый элемент массива.
Получается, что для одного массива используются два индекса: индекс i
перебирает элементы массива а как входного (исходного), а индекс j - как
выходного. В этом алгоритме результат получается сразу в массиве а, не нужно
тратить время на переписывание из вспомогательного алгоритма.
Соответствующий вариант программы приведен ниже:
j:=1;
for i:=1 to n do
if a[i]<>0 then begin a[j]:=a[i]; j:=j+1 end;
for i:=j to n do a[i]:=0.
Упражнения:
1. Проведите трассировку предложенных в предыдущем примере алгоритмов.
Постройте для них систему тестов.
2. Постройте алгоритм для переписывания всех нулей одномерного массива в
его начало. Используйте идеи рассмотренного примера.
Пример 11.31. Задан одномерный массив. Нужно преобразовать его так, чтобы
все элементы, большие k, разместились в конце массива, а меньшие или равные k в
начале.
168
часть массива называется подмассивом. Методы работы с подмассивами совпадают
с методами работы с несколькими массивами.
Пример 11.30. В заданном одномерном массиве все нулевые элементы
переписать в конец массива. Например, для массива a={1,0,2,3,0,4,5,0,0,0,6}
должен получиться результат a={1,2,3,4,5,6,0,0,0,0,0}.
Решение. Можно воспользоваться услугами вспомогательного массива, в
который вначале перепишем ненулевые элементы (вспомним пример 11.26),
оставшуюся часть вспомогательного массива заполним нулями. Чтобы закончить
решение, останется переписать содержимое вспомогательного массива в исходный
массив. Соответствующий вариант решения приведен ниже. Здесь а - исходный
массив, i - индекс массива а, b - вспомогательный массив, j - его индекс.
Размерность обоих массивов - n.
j:=1; { указывает номер первой свободной позиции в массиве b }
{ переписываем все ненулевые элементы из b в а }
for i:=1 to n do
if a[i]<>0 then begin b[j]:=a[i]; j:=j+1 end;
{ заполняем остаток массива b нулями }
for i:=j to n do b[i]:=0;
{ переписываем массив b в а }
a:=b.
Проанализируем полученное решение. Главным его недостатком является
использование вспомогательного массива - нерациональное использование
оперативной памяти компьютера. Попробуем обойтись без него. В данном случае
можно записывать ненулевые элементы в начало исходного массива. Место записи
элемента указывает переменная j, которая передвигается по массиву только после
записи ненулевого элемента. При найденном нуле значение переменной j не
изменяется. Переменная i будет указывать на проверяемый элемент массива.
Получается, что для одного массива используются два индекса: индекс i
перебирает элементы массива а как входного (исходного), а индекс j - как
выходного. В этом алгоритме результат получается сразу в массиве а, не нужно
тратить время на переписывание из вспомогательного алгоритма.
Соответствующий вариант программы приведен ниже:
j:=1;
for i:=1 to n do
if a[i]<>0 then begin a[j]:=a[i]; j:=j+1 end;
for i:=j to n do a[i]:=0.
Упражнения:
1. Проведите трассировку предложенных в предыдущем примере алгоритмов.
Постройте для них систему тестов.
2. Постройте алгоритм для переписывания всех нулей одномерного массива в
его начало. Используйте идеи рассмотренного примера.
Пример 11.31. Задан одномерный массив. Нужно преобразовать его так, чтобы
все элементы, большие k, разместились в конце массива, а меньшие или равные k в
начале.
Страницы
- « первая
- ‹ предыдущая
- …
- 164
- 165
- 166
- 167
- 168
- …
- следующая ›
- последняя »
