Заполнить матрицу змейкой - Pascal
Формулировка задачи:
Дано натуральное N (1 ≤ N ≤ 10). Заполнить матрицу порядка NN целыми числами 0, 1, 2, 3, …, N2–1 в соответствии со схемой расположения:
Найти соотношение между значением элемента K и его индексами [i, j], то есть функцию вида F(K, N) = <i, j>, которая по номеру K элемента в змейке возвращает его координаты в матрице <i, j>; другими словами a[i, j] = K. При этом данная функция не должна использовать циклы – только элементарные арифметические действия и проверку различных условий! Построив такую функцию можно простым перебором значений K от 0 до N2–1 находить индексы для каждого K с помощью функции F и записывать в матрицу К по найденным индексам.
Листинг программы
- 0 1 2 3
- 6 5 4 15
- 7 8 14 13
- 9 10 11 12
Решение задачи: «Заполнить матрицу змейкой»
textual
Листинг программы
- var tn, n: integer;
- procedure get_ij(var i, j: integer; k: integer);
- var p, v: integer;
- w: boolean;
- begin
- w := k >= tn;
- if w
- then v := n * n
- else v := tn;
- p := v - 1 - k;
- i := trunc(sqrt(1 + 8 * p) - 1) div 2;
- j := p - i * (i + 1) div 2;
- if odd(n - i) then j := i - j;
- if w then j := n - 1 - j;
- inc(i);
- if not w then i := n - i
- end;
- const m = 10;
- var i, j, k: integer;
- a: array [0..m-1, 0..m-1] of integer;
- begin
- repeat
- write('n in [1..', m, ']; n = ');
- readln(n)
- until n in [1..m];
- tn := n * (n + 1) div 2;
- for k := 0 to n * n - 1 do
- begin
- get_ij(i, j, k);
- a[i, j] := k
- end;
- for i := 0 to n - 1 do
- begin
- for j := 0 to n - 1 do write(a[i, j]: 3);
- writeln
- end;
- readln
- end.
Объяснение кода листинга программы
- Объявляются переменные
tn
,n
как целочисленные. - Создается процедура
get_ij
с переменнымиi
,j
,k
как целочисленные параметры. - В процедуре
get_ij
объявляются переменныеp
,v
как целочисленные иw
как логическая. - В теле процедуры
get_ij
вычисляются значения переменныхw
,v
,p
,i
,j
согласно заданным формулам. - В основной части программы объявляется константа
m
и переменныеi
,j
,k
как целочисленные, а также массивa
размерностиm-1
хm-1
. - Вводится значение переменной
n
в диапазоне от 1 доm
. - Вычисляется значение
tn
по заданной формуле. - В цикле от 0 до
n*n-1
вызывается процедураget_ij
для каждого значенияk
, после чего значениеk
записывается в ячейку массиваa
с координатамиi
иj
. - Выводится матрица
a
размерностиn
хn
. - Программа ждет ввода, после чего завершает свое выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д