Процедура, перемещающая все нули массива в конец,а остальные элементы сдвигающая вперед - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

Вроде бы использую здесь "пузырьковую тактику". Думал даже,что все правильно,но оказалось,что просто "удачно подбирал тесты". Что же здесь не так?
Вроде бы понял,надо так :
Чтобы цикл внутри не забывал про конец массива.

Решение задачи: «Процедура, перемещающая все нули массива в конец,а остальные элементы сдвигающая вперед»

textual
Листинг программы
procedure ZeroesToEnd(var a: array of Integer);
var n, i, j, t: Integer;
begin
  i:=High(a);
  repeat
    n:=Low(a);
    for j:=Low(a) to i-1 do
      if (a[j]=0) and (a[j+1]<>0) then begin
        n:=j; t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t;
      end;
    i:=n;
  until n=Low(a);
end;

Объяснение кода листинга программы

  1. В процедуре ZeroesToEnd объявлены следующие переменные: a (array of Integer), n, i, j, t (Integer).
  2. Переменная i инициализируется значением High(a), что позволяет нам обращаться к последнему элементу массива.
  3. Затем, в цикле repeat, мы перебираем все элементы массива от Low(a) до i-1.
  4. Внутри цикла проверяется условие: если текущий элемент равен нулю и следующий элемент не равен нулю, то мы перемещаем нулевой элемент в конец, а все остальные элементы сдвигаем вперед.
  5. Для этого мы присваиваем значение текущего элемента переменной t, затем меняем местами текущий элемент и следующий элемент, и, наконец, присваиваем значение t обратно текущему элементу.
  6. После завершения внутреннего цикла, переменная i обновляется, чтобы указывать на последний элемент массива.
  7. Цикл repeat продолжается до тех пор, пока переменная i не станет равной Low(a), что означает, что мы перебрали все элементы массива.

Оцени полезность:

13   голосов , оценка 4.154 из 5
Похожие ответы