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