Массив: перестановка индексных номеров при приведении исходной перестановки к натуральной - 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.
Объяснение кода листинга программы
- В программе используется тип данных
TArray
, который представляет собой массив целых чисел. - Функция
ShowArray
выводит элементы массива на экран. - Функция
ConvertToIndex
преобразует массив из натуральных чисел в индексы. - Внутри функции
ConvertToIndex
используется циклfor
, который проходит по каждому элементу массива. - Если текущий элемент массива больше нуля, то функция пропускает этот элемент и переходит к следующему.
- Если текущий элемент массива является числом, то функция начинает последовательно заменять его на индексы.
- Для этого используется цикл
repeat
, который выполняется до тех пор, пока текущий элемент массива больше нуля. - Внутри цикла
repeat
используется переменнаяIndxTemp
, которая хранит предыдущий индекс текущего элемента массива. - Переменная
IndxNext
инициализируется значением текущего элемента массива. - Затем происходит замена текущего элемента массива на
j
и обновление значенияIndxNext
. - Значение
j
устанавливается равным абсолютному значениюIndxNext
. - После завершения цикла
repeat
значениеj
присваивается новому значениюabs(IndxNext)
. - Затем значение
j
присваивается новому значениюabs(IndxNext)
. - Значение
j
устанавливается равным абсолютному значениюIndxNext
. - Цикл
for
завершается, когда значениеa[abs(IndxNext)]
становится больше нуля. - Функция возвращает массив, преобразованный из натуральных чисел в индексы.
- В конце программы создается экземпляр массива
EtalonArray
и вызывается функцияConvertToIndex
для преобразования его в индексы. - Затем вызывается функция
ShowArray
для вывода преобразованного массива на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д