Упорядочить по убыванию все элементы массива, стоящие после второго нулевого - 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для сортировки участка массива после второго нуля - Выводится итоговый отсортированный массив.
- Объявление переменных