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