Все элементы, не равные нулю, переписать (сохраняя их порядок) в начало, а нулевые элементы – в конец массива - Free Pascal
Формулировка задачи:
Задан одномерный массив. Все его элементы, не равные нулю, переписать (сохраняя их порядок) в начало массива, а нулевые элементы – в конец массива. Новый массив не заводить.
Решение задачи: «Все элементы, не равные нулю, переписать (сохраняя их порядок) в начало, а нулевые элементы – в конец массива»
textual
Листинг программы
var
a: Array[Byte] Of ShortInt;
i, j, count, n: Byte;
temp: ShortInt;
begin
repeat
Write('n=');
ReadLn(n);
until (n > 0);
Randomize();
Write('Original array:');
for i := 0 to n - 1 do
begin
a[i] := Random(11) - 5;
Write(a[i]:4);
end;
i := 0; count := 0;
repeat
if (a[i] = 0)
then
begin
Inc(count);
for j := i to n - 1 - count do
begin
temp := a[j];
a[j] := a[j + 1];
a[j + 1] := temp;
end;
end
else
Inc(i);
until (i + count >= n);
WriteLn; Write('Modified array:');
for i := 0 to n - 1 do
Write(a[i]:4);
end.
Объяснение кода листинга программы
В данном коде выполняется следующая последовательность действий:
- Вводится размер массива в байтах (n) с помощью цикла repeat-until и функции ReadLn.
- Инициализируются массив a и переменные i, j, count, n. Значения массива a заполняются случайными числами от -5 до 5 с помощью функции Random и цикла for.
- Выводится исходный массив с помощью цикла for и функции Write.
- Запускается цикл repeat-until, который выполняется до тех пор, пока i + count не станет больше или равным n.
- В условии цикла проверяется, является ли текущий элемент массива равным нулю.
- Если текущий элемент массива равен нулю, то увеличивается счетчик count, а элементы, начиная с текущего и до конца массива (за исключением нулевых), перемещаются в начало массива с помощью цикла for и временной переменной temp.
- Если текущий элемент массива не равен нулю, то увеличивается значение i.
- После выхода из цикла repeat-until выводится измененный массив с помощью цикла for и функции Write.