Заполнить матрицу змейкой - Pascal

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

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

Дано натуральное N (1 ≤ N ≤ 10). Заполнить матрицу порядка NN целыми числами 0, 1, 2, 3, …, N2–1 в соответствии со схемой расположения:
 0  1  2  3
 6  5  4 15
 7  8 14 13
 9 10 11 12
Найти соотношение между значением элемента K и его индексами [i, j], то есть функцию вида F(K, N) = <i, j>, которая по номеру K элемента в змейке возвращает его координаты в матрице <i, j>; другими словами a[i, j] = K. При этом данная функция не должна использовать циклы – только элементарные арифметические действия и проверку различных условий! Построив такую функцию можно простым перебором значений K от 0 до N2–1 находить индексы для каждого K с помощью функции F и записывать в матрицу К по найденным индексам.

Решение задачи: «Заполнить матрицу змейкой»

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.

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

  1. Объявляются переменные tn, n как целочисленные.
  2. Создается процедура get_ij с переменными i, j, k как целочисленные параметры.
  3. В процедуре get_ij объявляются переменные p, v как целочисленные и w как логическая.
  4. В теле процедуры get_ij вычисляются значения переменных w, v, p, i, j согласно заданным формулам.
  5. В основной части программы объявляется константа m и переменные i, j, k как целочисленные, а также массив a размерности m-1хm-1.
  6. Вводится значение переменной n в диапазоне от 1 до m.
  7. Вычисляется значение tn по заданной формуле.
  8. В цикле от 0 до n*n-1 вызывается процедура get_ij для каждого значения k, после чего значение k записывается в ячейку массива a с координатами i и j.
  9. Выводится матрица a размерности nхn.
  10. Программа ждет ввода, после чего завершает свое выполнение.

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


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

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

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