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