Заполнение матрицы по спирали, начиная с центральной клетки, против часовой стрелки - Pascal ABC

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

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

Никак не могу разобраться с чего начать. Помогите, пожалуйста.

Дано число n. Создайте массив A[2*n+1][2*n+1] и заполните его по спирали, начиная с числа 0 в центральной клетке A[n+1][n+1]. Спираль выходит вверх, далее закручивается против часовой стрелки.

Входные данные Программа получает на вход одно число n. Выходные данные Программа должна вывести полученный массив, отводя на вывод каждого числа ровно 3 символа.

Примеры

Входные данные

2

Выходные данные

Решение задачи: «Заполнение матрицы по спирали, начиная с центральной клетки, против часовой стрелки»

textual
Листинг программы
uses crt;
var a:array[1..21,1..21] of integer;
    n,m,k,z,x,y:integer;
begin
repeat
write('Введите число от 1 до 10 n=');
readln(n);
until n in [1..10];
m:=2*n+1;
x:=n+1;
y:=n+1;
k:=0;
for z:=1 to m*m do
 begin
  a[x,y]:=z-1;
  case k mod 4 of
  0:begin
    dec(x); //вверх
    if m-x=y then inc(k);//поворот
    end;
  1:begin
    dec(y);//влево
    if x=y then inc(k);//поворот
    end;
  2:begin
    inc(x);//вниз
    if m-x+1=y then inc (k);//поворот
    end;
  3:begin
    inc(y); //вправо
    if y=x then inc(k);//поворот
    end;
  end;
 end;
for x:=1 to m do
  begin
    for y:=1 to m do
    write(a[x,y]:3);
    writeln;
  end;
end.

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

  1. Создается переменная a, которая представляет собой матрицу размером от 1 до 21 в каждой из 21 строки.
  2. Пользователю предлагается ввести число от 1 до 10 для переменной n. Это число будет определять размер матрицы.
  3. Переменные m, x и y устанавливаются равными 2*n+1, n+1 и n+1 соответственно. Они будут использоваться для перемещения по матрице.
  4. Переменная k устанавливается равной 0. Она будет использоваться для отслеживания текущего положения в матрице.
  5. В цикле for происходит заполнение матрицы. Для каждого элемента a[x,y] выполняется следующее:
    • a[x,y]:=z-1; - элемент a[x,y] устанавливается равным z-1. Здесь z - это текущий индекс элемента, который будет заполняться.
    • В зависимости от значения k выполняется поворот или движение по матрице:
      • if m-x=y then inc(k); - если m-x равно y, то значение k увеличивается на 1. Это означает движение вверх.
      • if x=y then inc(k); - если x равно y, то значение k увеличивается на 1. Это означает движение влево.
      • if m-x+1=y then inc (k); - если m-x+1 равно y, то значение k увеличивается на 1. Это означает движение вниз.
      • if y=x then inc(k); - если y равно x, то значение k увеличивается на 1. Это означает движение вправо.
  6. После завершения цикла for происходит вывод матрицы. Для каждого элемента a[x,y] выводится его значение, используя формат a[x,y]:3. Затем выводится символ новой строки writeln;.
  7. Цикл for повторяется, пока значение n остается больше 0.

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

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