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

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

Форум «Всё о Паскале» _ Задачи _ Помогите решить

Автор: Леша 15.05.2006 2:08

Дан одномерный массив. Все его элементы, не равные нулю, переписать(сохраняя их порядок) в начало массива,а нулевые элементы в конец массива (Новый массив не заводить).

Автор: APAL 15.05.2006 2:32

Вроде так...

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 15.05.2006 3:20

Верно, но почему to Max-1? А если 0 - первый элемент? Что мешает написать to Max ?!! Тогда все работает.

Автор: APAL 15.05.2006 3:35

Ничто не мешает - все дело в оптимизации, можно даже переиначить:

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 - первый элемент?

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