61 lines
786 B
Plaintext
61 lines
786 B
Plaintext
PROC PrintArray(BYTE ARRAY a BYTE len)
|
|
BYTE i
|
|
|
|
FOR i=0 TO len-1
|
|
DO
|
|
PrintB(a(i))
|
|
OD
|
|
Print(" ")
|
|
RETURN
|
|
|
|
BYTE FUNC NextPermutation(BYTE ARRAY a BYTE len)
|
|
BYTE i,j,k,tmp
|
|
|
|
i=len-1
|
|
WHILE i>0 AND a(i-1)>a(i)
|
|
DO
|
|
i==-1
|
|
OD
|
|
|
|
j=i
|
|
k=len-1
|
|
WHILE j<k
|
|
DO
|
|
tmp=a(j) a(j)=a(k) a(k)=tmp
|
|
j==+1 k==-1
|
|
OD
|
|
|
|
IF i=0 THEN
|
|
RETURN (0)
|
|
FI
|
|
|
|
j=i
|
|
WHILE a(j)<a(i-1)
|
|
DO
|
|
j==+1
|
|
OD
|
|
tmp=a(i-1) a(i-1)=a(j) a(j)=tmp
|
|
RETURN (1)
|
|
|
|
PROC Main()
|
|
DEFINE len="5"
|
|
BYTE ARRAY a(len)
|
|
BYTE RMARGIN=$53,oldRMARGIN
|
|
BYTE i
|
|
|
|
oldRMARGIN=RMARGIN
|
|
RMARGIN=37 ;change right margin on the screen
|
|
|
|
FOR i=0 TO len-1
|
|
DO
|
|
a(i)=i
|
|
OD
|
|
|
|
DO
|
|
PrintArray(a,len)
|
|
UNTIL NextPermutation(a,len)=0
|
|
OD
|
|
|
|
RMARGIN=oldRMARGIN ;restore right margin on the screen
|
|
RETURN
|