Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите решить
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Леша
Дан одномерный массив. Все его элементы, не равные нулю, переписать(сохраняя их порядок) в начало массива,а нулевые элементы в конец массива (Новый массив не заводить).
APAL
Вроде так...

For i:=2 to Max-1 do
For j:=Max downto i do
If M[j-1]=0 then
Begin
k:=M[j-1];
M[j-1]:=M[j];
M[j]:=k;
End;


Смени название топика!
Zxzc
Верно, но почему to Max-1? А если 0 - первый элемент? Что мешает написать to Max ?!! Тогда все работает.
APAL
Ничто не мешает - все дело в оптимизации, можно даже переиначить:

For i:=1 to 10*Max do
For j:=Max downto 2 do
If M[j-1]=0 then
Begin
k:=M[j-1];
M[j-1]:=M[j];
M[j]:=k;
End;


Цитата
А если 0 - первый элемент?

Если так, то при первом же прогоне цикла этот нуль переместиться ниже (на вторую позицию).
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.