63 lines
959 B
Text
63 lines
959 B
Text
DEFINE MAX_SIZE="10"
|
|
DEFINE MAX_MATRIX_SIZE="100"
|
|
|
|
INT FUNC Index(BYTE size,x,y)
|
|
RETURN (x+y*size)
|
|
|
|
PROC PrintMatrix(BYTE ARRAY a BYTE size)
|
|
BYTE i,j,v
|
|
|
|
FOR j=0 TO size-1
|
|
DO
|
|
FOR i=0 TO size-1
|
|
DO
|
|
v=a(Index(size,i,j))
|
|
IF v<10 THEN
|
|
Print(" ")
|
|
ELSE
|
|
Print(" ")
|
|
FI
|
|
PrintB(v)
|
|
OD
|
|
PutE()
|
|
OD
|
|
RETURN
|
|
|
|
PROC FillMatrix(BYTE ARRAY a BYTE size)
|
|
BYTE start,end
|
|
INT dir,i,j
|
|
|
|
start=0 end=size*size-1
|
|
i=0 j=0 dir=1
|
|
|
|
DO
|
|
a(Index(size,i,j))=start
|
|
a(Index(size,size-1-i,size-1-j))=end
|
|
start==+1 end==-1
|
|
i==+dir j==-dir
|
|
IF i<0 THEN
|
|
i==+1 dir=-dir
|
|
ELSEIF j<0 THEN
|
|
j==+1 dir=-dir
|
|
FI
|
|
UNTIL start>=end
|
|
OD
|
|
|
|
IF start=end THEN
|
|
a(Index(size,i,j))=start
|
|
FI
|
|
RETURN
|
|
|
|
PROC Test(BYTE size)
|
|
BYTE ARRAY mat(MAX_MATRIX_SIZE)
|
|
|
|
PrintF("Matrix size: %B%E",size)
|
|
FillMatrix(mat,size)
|
|
PrintMatrix(mat,size)
|
|
PutE()
|
|
RETURN
|
|
|
|
PROC Main()
|
|
Test(5)
|
|
Test(6)
|
|
RETURN
|