99 lines
2.1 KiB
Text
99 lines
2.1 KiB
Text
MODULE Equilibrium;
|
|
(* Equilibrium index *)
|
|
FROM STextIO IMPORT
|
|
WriteLn, WriteString;
|
|
FROM SWholeIO IMPORT
|
|
WriteInt;
|
|
|
|
TYPE
|
|
(* These types are for easier initialization in the main program.*)
|
|
TData7Items = ARRAY [0 .. 6] OF INTEGER;
|
|
TData3Items = ARRAY [0 .. 2] OF INTEGER;
|
|
|
|
VAR
|
|
X1: TData7Items;
|
|
X1Eqs: ARRAY [0 .. 6] OF BOOLEAN;
|
|
X2: TData3Items;
|
|
X2Eqs: ARRAY [0 .. 2] OF BOOLEAN;
|
|
X3: TData3Items;
|
|
X3Eqs: ARRAY [0 .. 2] OF BOOLEAN;
|
|
X4: TData7Items;
|
|
X4Eqs: ARRAY [0 .. 6] OF BOOLEAN;
|
|
|
|
PROCEDURE WriteArray(Nums: ARRAY OF INTEGER; NL: BOOLEAN);
|
|
VAR
|
|
I: CARDINAL;
|
|
BEGIN
|
|
FOR I := 0 TO HIGH(Nums) DO
|
|
WriteInt(Nums[I], 1);
|
|
WriteString(" ")
|
|
END;
|
|
IF NL THEN
|
|
WriteLn
|
|
END
|
|
END WriteArray;
|
|
|
|
PROCEDURE WriteIndicesOfTrue(Bools: ARRAY OF BOOLEAN; NL: BOOLEAN);
|
|
VAR
|
|
I: CARDINAL;
|
|
BEGIN
|
|
FOR I := 0 TO HIGH(Bools) DO
|
|
IF Bools[I] THEN
|
|
WriteInt(I, 1);
|
|
WriteString(" ")
|
|
END;
|
|
END;
|
|
IF NL THEN
|
|
WriteLn
|
|
END
|
|
END WriteIndicesOfTrue;
|
|
|
|
PROCEDURE GetIndices(Nums: ARRAY OF INTEGER; VAR OUT Result: ARRAY OF BOOLEAN);
|
|
VAR
|
|
LeftSum, RightSum: INTEGER;
|
|
I: CARDINAL;
|
|
BEGIN
|
|
LeftSum := 0;
|
|
RightSum := 0;
|
|
FOR I := 0 TO HIGH(Nums) DO
|
|
RightSum := RightSum + Nums[I]
|
|
END;
|
|
FOR I := 0 TO HIGH(Nums) DO
|
|
RightSum := RightSum - Nums[I];
|
|
Result[I] := (LeftSum = RightSum);
|
|
LeftSum := LeftSum + Nums[I]
|
|
END;
|
|
END GetIndices;
|
|
|
|
BEGIN
|
|
X1 := TData7Items{-7, 1, 5, 2, -4, 3, 0};
|
|
GetIndices(X1, X1Eqs);
|
|
X2 := TData3Items{2, 4, 6};
|
|
GetIndices(X2, X2Eqs);
|
|
X3 := TData3Items{2, 9, 2};
|
|
GetIndices(X3, X3Eqs);
|
|
X4 := TData7Items{1, -1, 1, -1, 1 ,-1, 1};
|
|
GetIndices(X4, X4Eqs);
|
|
WriteString("Results:");
|
|
WriteLn;
|
|
WriteLn;
|
|
WriteString("X1: ");
|
|
WriteArray(X1, TRUE);
|
|
WriteString("Eqs: ");
|
|
WriteIndicesOfTrue(X1Eqs, TRUE);
|
|
WriteLn;
|
|
WriteString("X2: ");
|
|
WriteArray(X2, TRUE);
|
|
WriteString("Eqs: ");
|
|
WriteIndicesOfTrue(X2Eqs, TRUE);
|
|
WriteLn;
|
|
WriteString("X3: ");
|
|
WriteArray(X3, TRUE);
|
|
WriteString("Eqs: ");
|
|
WriteIndicesOfTrue(X3Eqs, TRUE);
|
|
WriteLn;
|
|
WriteString("X4: ");
|
|
WriteArray(X4, TRUE);
|
|
WriteString("Eqs: ");
|
|
WriteIndicesOfTrue(X4Eqs, TRUE);
|
|
END Equilibrium.
|