Заполнить матрицу по спирали - PascalABC.NET (249458)

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

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

Заполнить матрицу по спирали с помощью процедур

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

textual
Листинг программы
var a : array [,] of Integer;
 
procedure SetN(var Row : Integer; dRow : Integer; var Col : Integer; dCol : Integer; var n : Integer);
begin
  Row += dRow; Col += dCol; n += 1; a[Row, Col] := n;
end;
 
procedure fillToDown(Row, Col, n : Integer); forward;
procedure fillToLeft(Row, Col, n : Integer); forward;
procedure fillToUp  (Row, Col, n : Integer); forward;
 
procedure fillToRight(Row, Col, n : Integer);
begin
  while (Col < a.GetLength(1)-1) and (a[Row, Col+1] = 0) do SetN(Row, 0, Col, +1, n);
  if n < a.Length then fillToDown(Row, Col, n);
end;
 
procedure fillToDown(Row, Col, n : Integer);
begin
  while (Row < a.GetLength(0)-1) and (a[Row+1, Col] = 0) do SetN(Row, +1, Col, 0, n);
  if n < a.Length then fillToLeft(Row, Col, n);
end;
 
procedure fillToLeft(Row, Col, n : Integer);
begin
  while (Col > 0) and (a[Row, Col-1] = 0) do SetN(Row, 0, Col, -1, n);
  if n < a.Length then fillToUp(Row, Col, n);
end;
 
procedure fillToUp(Row, Col, n : Integer);
begin
  while (Row > 0) and (a[Row-1, Col] = 0) do SetN(Row, -1, Col, 0, n);
  if n < a.Length then fillToRight(Row, Col, n);
end;
 
begin
  var n := ReadInteger('n =');
  SetLength(a, n, n);
  fillToRight(0, -1, 0);
  a.Println;
end.

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

  1. Ввод размера матрицы (n) с помощью функции ReadInteger.
  2. Инициализация матрицы размером n на n нулями с помощью функции SetLength.
  3. Заполнение матрицы по спирали с помощью рекурсивных процедур fillToDown, fillToLeft, fillToUp, fillToRight.
  4. Печать матрицы с помощью метода Println класса a.
  5. Рекурсивная процедура fillToDown заполняет матрицу, двигаясь вниз, пока не встретит ноль, затем вызывает процедуру fillToLeft для следующего элемента.
  6. Рекурсивная процедура fillToLeft заполняет матрицу, двигаясь влево, пока не встретит ноль, затем вызывает процедуру fillToUp для следующего элемента.
  7. Рекурсивная процедура fillToUp заполняет матрицу, двигаясь вверх, пока не встретит ноль, затем вызывает процедуру fillToRight для следующего элемента.
  8. Рекурсивная процедура fillToRight заполняет матрицу, двигаясь вправо, пока не встретит ноль, затем вызывает процедуру fillToDown для следующего элемента.
  9. После ввода размера матрицы и заполнения матрицы по спирали, выводится на печать.

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


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

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

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