RosettaCodeData/Task/Pascal-matrix-generation/Action-/pascal-matrix-generation.ac...

93 lines
1.5 KiB
Plaintext

BYTE FUNC Index(BYTE i,j,dim)
RETURN (i*dim+j)
PROC PascalUpper(BYTE ARRAY mat BYTE dim)
BYTE i,j
FOR i=0 TO dim-1
DO
FOR j=0 TO dim-1
DO
IF i>j THEN
mat(Index(i,j,dim))=0
ELSEIF i=j OR i=0 THEN
mat(Index(i,j,dim))=1
ELSE
mat(Index(i,j,dim))=mat(Index(i-1,j-1,dim))+mat(Index(i,j-1,dim))
FI
OD
OD
RETURN
PROC PascalLower(BYTE ARRAY mat BYTE dim)
BYTE i,j
FOR i=0 TO dim-1
DO
FOR j=0 TO dim-1
DO
IF i<j THEN
mat(Index(i,j,dim))=0
ELSEIF i=j OR j=0 THEN
mat(Index(i,j,dim))=1
ELSE
mat(Index(i,j,dim))=mat(Index(i-1,j-1,dim))+mat(Index(i-1,j,dim))
FI
OD
OD
RETURN
PROC PascalSymmetric(BYTE ARRAY mat BYTE dim)
BYTE i,j
FOR i=0 TO dim-1
DO
FOR j=0 TO dim-1
DO
IF i=0 OR j=0 THEN
mat(Index(i,j,dim))=1
ELSE
mat(Index(i,j,dim))=mat(Index(i-1,j,dim))+mat(Index(i,j-1,dim))
FI
OD
OD
RETURN
PROC PrintMatrix(BYTE ARRAY mat BYTE dim)
BYTE i,j,v
FOR i=0 TO dim-1
DO
FOR j=0 TO dim-1
DO
v=mat(Index(i,j,dim))
IF v<10 THEN
Print(" ")
ELSEIF v<100 THEN
Print(" ")
FI
PrintB(v)
OD
PutE()
OD
RETURN
PROC Main()
BYTE ARRAY mat(25)
BYTE dim=[5]
PrintE("Pascal upper matrix:")
PascalUpper(mat,dim)
PrintMatrix(mat,dim)
PutE()
PrintE("Pascal lower matrix:")
PascalLower(mat,dim)
PrintMatrix(mat,dim)
PutE()
PrintE("Pascal symmetric matrix:")
PascalSymmetric(mat,dim)
PrintMatrix(mat,dim)
RETURN