Заполнить двумерный массив по правилу | Язык Паскаль

Заполнить двумерный массив по правилу

Заполнить двумерный массив по следующему правилу:

1 2 3 4 5
2 1 2 3 4
3 2 1 2 3
4 3 2 1 2
5 4 3 2 1

Перед решением задачи необходимо найти правило расположения чисел в данной матрице. Можно увидеть несколько:

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

Вместо этого обратим внимание на следующее.

  1. Значения элементов матрицы можно связать с их же индексами. На главной диагонали первый индекс (i) равен второму (j). В этом случае в ячейки записывается единица.
  2. Если мы возьмем вторую ячейку первой строки, у которой i = 1, j = 2, то разница между ними составляет единицу. Однако нам надо записать в ячейку число 2. Значит прибавим к разнице число 1.
  3. Если взять первую ячейку второй строки [2, 1], разница между индексами составляет 1. Прибавив 1, получим 2.

Таким образом, приходим к формуле abs(i - j) + 1.

const N = 7;

var 
    arr: array[1..N, 1..N] of byte;
    i, j: byte;

begin

    for i := 1 to N do begin
        for j := 1 to N do begin
            arr[i, j] := abs(j - i) + 1;
            write(arr[i, j]:3);
        end;
        writeln;
    end;

end.

Результат выполнения программы:

  1  2  3  4  5  6  7
  2  1  2  3  4  5  6
  3  2  1  2  3  4  5
  4  3  2  1  2  3  4
  5  4  3  2  1  2  3
  6  5  4  3  2  1  2
  7  6  5  4  3  2  1

Пример решения похожей задачи в сообществе VK: Заполнить элементы массива последовательностью чисел: 2, 5, 10, 17, 26 …