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

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

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

Дано натуральное N (1 ≤ N ≤ 10). Заполнить матрицу порядка NN целыми числами 0, 1, 2, 3, …, N2–1 в соответствии со схемой расположения:
Листинг программы
  1. 0 1 2 3
  2. 6 5 4 15
  3. 7 8 14 13
  4. 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
Листинг программы
  1. var tn, n: integer;
  2.  
  3. procedure get_ij(var i, j: integer; k: integer);
  4. var p, v: integer;
  5.     w: boolean;
  6. begin
  7.   w := k >= tn;
  8.   if w
  9.     then v := n * n
  10.     else v := tn;
  11.   p := v - 1 - k;
  12.   i := trunc(sqrt(1 + 8 * p) - 1) div 2;
  13.   j := p - i * (i + 1) div 2;
  14.   if odd(n - i) then j := i - j;
  15.   if w then j := n - 1 - j;
  16.   inc(i);
  17.   if not w then i := n - i
  18. end;
  19.  
  20. const m = 10;
  21. var i, j, k: integer;
  22.     a: array [0..m-1, 0..m-1] of integer;
  23. begin
  24.   repeat
  25.     write('n in [1..', m, '];  n = ');
  26.     readln(n)
  27.   until n in [1..m];
  28.   tn := n * (n + 1) div 2;
  29.   for k := 0 to n * n - 1 do
  30.     begin
  31.       get_ij(i, j, k);
  32.       a[i, j] := k
  33.     end;
  34.   for i := 0 to n - 1 do
  35.     begin
  36.       for j := 0 to n - 1 do write(a[i, j]: 3);
  37.       writeln
  38.     end;
  39.   readln
  40. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы