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

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

  1. Создается процедура insert_sort с параметрами:
    • mas (массив целых чисел)
    • first (индекс начала участка массива для сортировки)
    • last (индекс конца участка массива для сортировки)
  2. В цикле перебираются элементы массива начиная со второго (индекс first + 1 до last)
    • buf присваивается текущему элементу mas[i]
    • l устанавливается в i - 1
  3. В цикле while происходит сортировка вставками:
    • Пока l больше first и элемент массива mas[l] меньше buf, выполняется:
      • Элементу mas[l + 1] присваивается mas[l]
      • Значение l уменьшается на 1
  4. Значению mas[l + 1] присваивается buf
  5. В основной программе происходит:
    • Объявление переменных mas (массив целых чисел), flag (логическая переменная), n (целое число), i (целое число), index (целое число)
    • Вводится длина массива n
    • Создается массив mas длиной n
    • В цикле происходит ввод массива с проверкой на второй ноль и сохранением его индекса index
    • Выводится исходный массив
    • Если нет второго нуля, программа завершается
    • Вызывается процедура insert_sort для сортировки участка массива после второго нуля
    • Выводится итоговый отсортированный массив.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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