Заполнить матрицу змейкой - 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
. - Программа ждет ввода, после чего завершает свое выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д