93 lines
1.5 KiB
Plaintext
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
|