Упорядочить по убыванию все элементы массива, стоящие после второго нулевого - Pascal
Формулировка задачи:
Полный текст самой задачи:
Дан массив K(N). Преобразовать его, упорядочив по убыванию все элементы, стоящие после второго нулевого. Выдать на печать исходный и упорядоченный массивы. Если преобразование невозможно, то выдать об этом сообщение.
Не могу понять, как найти второй нулевой элемент массива. Не подскажете?Решение задачи: «Упорядочить по убыванию все элементы массива, стоящие после второго нулевого»
textual
Листинг программы
procedure insert_sort(var mas:aRRay of IntegeR; first, last:IntegeR); var i, l, buf:IntegeR; begin for i:= first + 1 to last do begin buf:= mas[i]; l:= i - 1; while (l > first) and (mas[l] < buf) do begin mas[l + 1]:= mas[l]; dec(l); end; mas[l + 1]:= buf; end; end; begin var mas:aRRay of integer; var flag:boolean; writeln('Введите длину массива:'); var n:integer; read(n); var i, index:integer; index:= -1; writeln('Введите сам массив:'); flag:= false; SetLength(mas, n); for i:= low(mas) to high(mas) do begin read(mas[i]); if (mas[i] = 0) then if (flag) and (index = -1) then index:= i else if not(flag) then flag:= true; end; writeln('Исходный массив:'); for i:= low(mas) to high(mas) do write(mas[i], ' '); writeln; if (index = -1) then begin writeln('Второго нуля в массиве нет!'); halt(0); end; insert_sort(mas, index, high(mas)); writeln('Итоговый массив:'); for i:= low(mas) to high(mas) do write(mas[i], ' '); end.
Объяснение кода листинга программы
- Создается процедура
insert_sort
с параметрами:mas
(массив целых чисел)first
(индекс начала участка массива для сортировки)last
(индекс конца участка массива для сортировки)
- В цикле перебираются элементы массива начиная со второго (индекс
first + 1
доlast
)buf
присваивается текущему элементуmas[i]
l
устанавливается вi - 1
- В цикле
while
происходит сортировка вставками:- Пока
l
большеfirst
и элемент массиваmas[l]
меньшеbuf
, выполняется:- Элементу
mas[l + 1]
присваиваетсяmas[l]
- Значение
l
уменьшается на 1
- Элементу
- Пока
- Значению
mas[l + 1]
присваиваетсяbuf
- В основной программе происходит:
- Объявление переменных
mas
(массив целых чисел),flag
(логическая переменная),n
(целое число),i
(целое число),index
(целое число) - Вводится длина массива
n
- Создается массив
mas
длинойn
- В цикле происходит ввод массива с проверкой на второй ноль и сохранением его индекса
index
- Выводится исходный массив
- Если нет второго нуля, программа завершается
- Вызывается процедура
insert_sort
для сортировки участка массива после второго нуля - Выводится итоговый отсортированный массив.
- Объявление переменных
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д