49 lines
1.8 KiB
Plaintext
49 lines
1.8 KiB
Plaintext
* Remove duplicate elements - 18/10/2015
|
|
REMDUP CSECT
|
|
USING REMDUP,R15 set base register
|
|
SR R6,R6 i=0
|
|
LA R8,1 k=1
|
|
LOOPK C R8,N do k=1 to n
|
|
BH ELOOPK
|
|
LR R1,R8 k
|
|
SLA R1,2
|
|
L R9,T-4(R1) e=t(k)
|
|
LR R7,R8 k
|
|
BCTR R7,0 j=k-1
|
|
LOOPJ C R7,=F'1' do j=k-1 to 1 by -1
|
|
BL ELOOPJ
|
|
LR R1,R7 j
|
|
SLA R1,2
|
|
L R2,T-4(R1) t(j)
|
|
CR R9,R2 if e=t(j) then goto iter
|
|
BE ITER
|
|
BCTR R7,0 j=j-1
|
|
B LOOPJ
|
|
ELOOPJ LA R6,1(R6) i=i+1
|
|
LR R1,R6 i
|
|
SLA R1,2
|
|
ST R9,T-4(R1) t(i)=e
|
|
ITER LA R8,1(R8) k=k+1
|
|
B LOOPK
|
|
ELOOPK LA R10,PG pgi=@pg
|
|
LA R8,1 k=1
|
|
LOOP CR R8,R6 do k=1 to i
|
|
BH ELOOP
|
|
LR R1,R8 k
|
|
SLA R1,2
|
|
L R2,T-4(R1) t(k)
|
|
XDECO R2,PG+80 edit t(k)
|
|
MVC 0(3,R10),PG+89 output t(k) on 3 char
|
|
LA R10,3(R10) pgi=pgi+3
|
|
LA R8,1(R8) k=k+1
|
|
B LOOP
|
|
ELOOP XPRNT PG,80 print buffer
|
|
XR R15,R15 set return code
|
|
BR R14 return to caller
|
|
T DC F'6',F'6',F'1',F'5',F'6',F'2',F'1',F'7',F'5',F'22'
|
|
DC F'4',F'19',F'1',F'1',F'6',F'8',F'9',F'10',F'11',F'12'
|
|
N DC A((N-T)/4) number of T items
|
|
PG DC CL92' '
|
|
YREGS
|
|
END REMDUP
|