88 lines
1.2 KiB
Text
88 lines
1.2 KiB
Text
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
|