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


У меня получилось только если в массиве 1 ноль:

Код

var
 x: array[1..5] of integer;
 n,i,j:integer;
begin
n := 0;
x[1] := 3;x[2] := 0;x[3] := 2;x[4] := 0;x[5] := 5;
for i := 1 to 5 do
begin
 if x[i] = 0 then
 n := 1;
 if n = 1 then
 begin
   x[i] := x[i + 1];
   if i = 5 then
   begin
     x[i] := 0;
     n := 0;
   end;
 end;
end;
for j := 1 to 5 do
Write(x[j],' ');
end.

Как быть?
Доделайте, кто может, pls.


2 admin Я зарегился, прочитал ФАК от корки до корки, там этого нет unsure.gif
volvo
Проверь... Я не компилировал - мог ошибиться. Хотя вряд ли.

const
 n = 10;
 x: array[1 .. n] of integer =
      ( 1, 2, 0, 4, 5, 0, 0, 7, 8, 9);

var
 i, j: integer;
 numzero: integer;
begin
 numzero := 0;
 i := 1;
 while i <= n - numzero do
   if x[i] = 0 then
     begin
       for j := i to n-numzero-1 do
         x[j] := x[j+1];
       x[n - numzero] := 0;
       numzero := numzero + 1;
     end
   else inc(i);

 for i := 1 to n do
   write(x[i]:4);
 writeln;
 readln
end.

Atos
Если понадобится сделать чуть более эффективнее:

const
n = 10;
x: array[1 .. n] of integer =( 1, 2, 0, 4, 5, 0, 0, 7, 8, 9);
var
i, j: integer;
numzero: integer;
begin
numzero := 0;

for i:=1 to n do   if x[i]=0 then inc(numzero) else x[i-numzero]:=x[i];
for i:=n+1-numzero to n do x[i]:=0;

for i := 1 to n do
   write(x[i]:4);
writeln;
readln
end.

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