60 lines
1,020 B
Text
60 lines
1,020 B
Text
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
|
|
|
|
INT FUNC SumRange(INT ARRAY a INT first,last)
|
|
INT sum
|
|
INT i
|
|
|
|
sum=0
|
|
FOR i=first TO last
|
|
DO
|
|
sum==+a(i)
|
|
OD
|
|
RETURN(sum)
|
|
|
|
PROC EquilibriumIndices(INT ARRAY a INT size
|
|
INT ARRAY indices INT POINTER indSize)
|
|
INT i,left,right
|
|
|
|
indSize^=0
|
|
FOR i=0 TO size-1
|
|
DO
|
|
left=SumRange(a,0,i-1)
|
|
right=SumRange(a,i+1,size-1)
|
|
IF left=right THEN
|
|
indices(indSize^)=i
|
|
indSize^==+1
|
|
FI
|
|
OD
|
|
RETURN
|
|
|
|
PROC Test(INT ARRAY a INT size)
|
|
INT ARRAY indices(100)
|
|
INT indSize
|
|
|
|
EquilibriumIndices(a,size,indices,@indSize)
|
|
Print("Array=") PrintArray(a,size)
|
|
Print("Equilibrium indices=") PrintArray(indices,indSize)
|
|
PutE()
|
|
RETURN
|
|
|
|
PROC Main()
|
|
INT ARRAY a=[65529 1 5 2 65532 3 0]
|
|
INT ARRAY b=[65535 1 65535 1 65535 1 65535]
|
|
INT ARRAY c=[1 2 3 4 5 6 7 8 9]
|
|
INT ARRAY d=[0]
|
|
|
|
Test(a,7)
|
|
Test(b,7)
|
|
Test(c,9)
|
|
Test(d,1)
|
|
RETURN
|