Массив: перестановка индексных номеров при приведении исходной перестановки к натуральной - Turbo Pascal

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

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

Дан массив из первых n натуральных чисел( т. е. произвольная перестановка из первых n натуральных чисел ). Преобразовать массив таким образом, чтобы в нем оказалась перестановка индексных номеров при приведении исходной перестановки к натуральной( решение дать без использования вспомогательного массива ).

Решение задачи: «Массив: перестановка индексных номеров при приведении исходной перестановки к натуральной»

textual
Листинг программы
program NaturalToIndex;
 
const
  Nmax = 6;
type
  TArray = array[1..Nmax] of integer;
 
  procedure ShowArray(const a: TArray; n: integer);
  var
    i: integer;
  begin
    for i := 1 to n do
      Write(a[i]: 5);
    writeln;
  end;
 
  procedure ConvertToIndex(var a: TArray; n: integer);
  var
    i, j, IndxTemp: integer;
    IndxNext: integer;
  begin
    {устанавливаем признак того, что в ячейках натуральные числа}
    for i := 1 to n do
      a[i] := -a[i];
    {проводим замену чисел на индексы}
    for i := 1 to n do
    begin
      {если в a[i] индекс, то пропускаем и переходим к следующему}
      if a[i] > 0 then
        continue;
      {если в a[i] число, то начинаем по цепочке заменять}
      j := i;
      IndxNext := a[i];
      repeat
        IndxTemp := IndxNext;
        IndxNext := a[-IndxTemp];
        a[-IndxTemp] := j;
        j := abs(IndxTemp);
      until a[abs(IndxNext)] > 0;
    end;
  end;
 
const
  EtalonArray: TArray = (5, 2, 6, 1, 3, 4);
var
  a: TArray;
begin
  a := EtalonArray;
  ConvertToIndex(a, Nmax);
  ShowArray(a, Nmax);
end.

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

  1. В программе используется тип данных TArray, который представляет собой массив целых чисел.
  2. Функция ShowArray выводит элементы массива на экран.
  3. Функция ConvertToIndex преобразует массив из натуральных чисел в индексы.
  4. Внутри функции ConvertToIndex используется цикл for, который проходит по каждому элементу массива.
  5. Если текущий элемент массива больше нуля, то функция пропускает этот элемент и переходит к следующему.
  6. Если текущий элемент массива является числом, то функция начинает последовательно заменять его на индексы.
  7. Для этого используется цикл repeat, который выполняется до тех пор, пока текущий элемент массива больше нуля.
  8. Внутри цикла repeat используется переменная IndxTemp, которая хранит предыдущий индекс текущего элемента массива.
  9. Переменная IndxNext инициализируется значением текущего элемента массива.
  10. Затем происходит замена текущего элемента массива на j и обновление значения IndxNext.
  11. Значение j устанавливается равным абсолютному значению IndxNext.
  12. После завершения цикла repeat значение j присваивается новому значению abs(IndxNext).
  13. Затем значение j присваивается новому значению abs(IndxNext).
  14. Значение j устанавливается равным абсолютному значению IndxNext.
  15. Цикл for завершается, когда значение a[abs(IndxNext)] становится больше нуля.
  16. Функция возвращает массив, преобразованный из натуральных чисел в индексы.
  17. В конце программы создается экземпляр массива EtalonArray и вызывается функция ConvertToIndex для преобразования его в индексы.
  18. Затем вызывается функция ShowArray для вывода преобразованного массива на экран.

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


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

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

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