Упорядочить по убыванию все элементы массива, стоящие после второго нулевого - Pascal

Узнай цену своей работы

Формулировка задачи:

Полный текст самой задачи:

Дан массив K(N). Преобразовать его, упорядочив по убыванию все элементы, стоящие после второго нулевого. Выдать на печать исходный и упорядоченный массивы. Если преобразование невозможно, то выдать об этом сообщение.

Не могу понять, как найти второй нулевой элемент массива. Не подскажете?

Решение задачи: «Упорядочить по убыванию все элементы массива, стоящие после второго нулевого»

textual
Листинг программы
  1. procedure insert_sort(var mas:aRRay of IntegeR; first, last:IntegeR);
  2. var i, l, buf:IntegeR;
  3. begin
  4.   for i:= first + 1 to last do
  5.   begin
  6.     buf:= mas[i];
  7.     l:= i - 1;
  8.     while (l > first) and (mas[l] < buf) do
  9.     begin
  10.       mas[l + 1]:= mas[l];
  11.       dec(l);
  12.     end;
  13.     mas[l + 1]:= buf;
  14.   end;
  15. end;
  16.  
  17. begin
  18.   var mas:aRRay of integer;
  19.   var flag:boolean;
  20.   writeln('Введите длину массива:');
  21.   var n:integer;
  22.   read(n);
  23.   var i, index:integer;
  24.   index:= -1;
  25.   writeln('Введите сам массив:');
  26.   flag:= false;
  27.   SetLength(mas, n);
  28.   for i:= low(mas) to high(mas) do
  29.   begin
  30.     read(mas[i]);
  31.     if (mas[i] = 0) then
  32.       if (flag) and (index = -1) then
  33.         index:= i
  34.       else if not(flag) then
  35.         flag:= true;
  36.   end;
  37.   writeln('Исходный массив:');
  38.   for i:= low(mas) to high(mas) do
  39.     write(mas[i], ' ');
  40.   writeln;
  41.   if (index = -1) then
  42.   begin
  43.     writeln('Второго нуля в массиве нет!');
  44.     halt(0);
  45.   end;
  46.   insert_sort(mas, index, high(mas));
  47.   writeln('Итоговый массив:');
  48.   for i:= low(mas) to high(mas) do
  49.     write(mas[i], ' ');
  50. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы