61 lines
1.0 KiB
Plaintext
61 lines
1.0 KiB
Plaintext
INCLUDE "D2:SORT.ACT" ;from the Action! Tool Kit
|
|
|
|
PROC PrintArray(INT ARRAY a INT size)
|
|
INT i
|
|
|
|
Put('[)
|
|
FOR i=0 TO size-1
|
|
DO
|
|
IF i>0 THEN Put(' ) FI
|
|
PrintI(a(i))
|
|
OD
|
|
Put(']) PutE()
|
|
RETURN
|
|
|
|
PROC RemoveDuplicates(INT ARRAY src INT srcLen
|
|
INT ARRAY dst INT POINTER dstLen)
|
|
INT i
|
|
CHAR curr,prev
|
|
|
|
IF srcLen=0 THEN
|
|
dstLen^=0
|
|
RETURN
|
|
FI
|
|
|
|
SortI(src,srcLen,0)
|
|
dst(0)=src(0)
|
|
dstLen^=1 prev=src(0)
|
|
FOR i=1 TO srcLen-1
|
|
DO
|
|
curr=src(i)
|
|
IF curr#prev THEN
|
|
dst(dstLen^)=curr
|
|
dstLen^==+1
|
|
FI
|
|
prev=curr
|
|
OD
|
|
RETURN
|
|
|
|
PROC Test(INT ARRAY src INT srcLen)
|
|
INT ARRAY dst(100)
|
|
INT dstLen
|
|
|
|
PrintE("Input array:")
|
|
PrintArray(src,srcLen)
|
|
RemoveDuplicates(src,srcLen,dst,@dstLen)
|
|
PrintE("Unique items:")
|
|
PrintArray(dst,dstLen)
|
|
PutE()
|
|
RETURN
|
|
|
|
PROC Main()
|
|
INT ARRAY src1(9)=[1 3 65534 0 12 1 65534 52 3]
|
|
INT ARRAY src2(26)=[3 2 1 3 2 5 2 1 6 3 4 2 5 3 1 5 3 5 2 1 3 7 4 5 7 6]
|
|
INT ARRAY src3(1)=[6502]
|
|
|
|
Put(125) PutE() ;clear screen
|
|
Test(src1,9)
|
|
Test(src2,26)
|
|
Test(src3,1)
|
|
RETURN
|