Заполнить матрицу по спирали - 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.
Объяснение кода листинга программы
- Ввод размера матрицы (n) с помощью функции ReadInteger.
- Инициализация матрицы размером n на n нулями с помощью функции SetLength.
- Заполнение матрицы по спирали с помощью рекурсивных процедур fillToDown, fillToLeft, fillToUp, fillToRight.
- Печать матрицы с помощью метода Println класса a.
- Рекурсивная процедура fillToDown заполняет матрицу, двигаясь вниз, пока не встретит ноль, затем вызывает процедуру fillToLeft для следующего элемента.
- Рекурсивная процедура fillToLeft заполняет матрицу, двигаясь влево, пока не встретит ноль, затем вызывает процедуру fillToUp для следующего элемента.
- Рекурсивная процедура fillToUp заполняет матрицу, двигаясь вверх, пока не встретит ноль, затем вызывает процедуру fillToRight для следующего элемента.
- Рекурсивная процедура fillToRight заполняет матрицу, двигаясь вправо, пока не встретит ноль, затем вызывает процедуру fillToDown для следующего элемента.
- После ввода размера матрицы и заполнения матрицы по спирали, выводится на печать.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д