DEFINE MAX="100" INT ARRAY keys(MAX) INT ARRAY values(MAX) BYTE count 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 ClearMap() count=0 RETURN PROC AddToMap(INT a) INT i,index index=-1 IF count>0 THEN FOR i=0 TO count-1 DO IF keys(i)=a THEN index=i EXIT FI OD FI IF index=-1 THEN keys(count)=a values(count)=1 count==+1 ELSE values(index)==+1 FI RETURN PROC Mode(INT ARRAY a INT aSize INT ARRAY m INT POINTER mSize) INT i,mx ClearMap() FOR i=0 TO aSize-1 DO AddToMap(a(i)) OD mx=0 FOR i=0 TO count-1 DO IF values(i)>mx THEN mx=values(i) FI OD mSize^=0 FOR i=0 TO count-1 DO IF values(i)=mx THEN m(mSize^)=keys(i) mSize^==+1 FI OD RETURN PROC Test(INT ARRAY a INT size) INT ARRAY m(MAX) INT mSize PrintE("Array:") PrintArray(a,size) Mode(a,size,m,@mSize) PrintE("Mode:") PrintArray(m,mSize) PutE() RETURN PROC Main() INT ARRAY a=[1 3 5 7 3 1 3 7 7 3 3] INT ARRAY b=[7 13 5 13 7 2 7 10 13] INT ARRAY c=[5] Test(a,11) Test(b,9) Test(c,1) RETURN