'BEGIN' 'REAL' X1, X2, X3, X4, X,Y,Z,T,T1,T2; 'ARRAY' E1[1:4]; 'INTEGER' I,J,K,L,N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11; 'PROCEDURE' PA(E); 'ARRAY' E; 'BEGIN' 'INTEGER' J; J := 0; LAB: E[1] := (E[1] + E[2] + E[3] - E[4]) * T; E[2] := (E[1] + E[2] - E[3] + E[4]) * T; E[3] := (E[1] - E[2] + E[3] + E[4]) * T; E[4] := (-E[1] + E[2] + E[3] + E[4])/T2; J := J + 1; 'IF' J < 6 'THEN' 'GOTO' LAB; 'END' PROCEDURE PA; 'PROCEDURE' P0; 'BEGIN' E1[J] := E1[K]; E1[K] := E1[L]; E1[L] := E1[J]; 'END' PROCEDURE P0; 'PROCEDURE' P3(X,Y,Z); 'VALUE' X,Y; 'REAL' X,Y,Z; 'BEGIN' X := T * (X + Y); Y := T * (X + Y); Z := (X + Y)/T2; 'END' PROCEDURE P3; 'PROCEDURE' POUT(N,J,K,X1,X2,X3,X4); 'VALUE' N,J,K,X1,X2,X3,X4; 'INTEGER' N,J,K; 'REAL' X1,X2,X3,X4; 'BEGIN' PRINT(N,5,0); PRINT(J,5,0); PRINT(K,5,0); PRINT( X1,0,5); PRINT( X2,0,5); PRINT( X3,0,5); PRINT( X4,0,5); NEWLINE; 'END' PROCEDURE POUT; 'COMMENT' INITIALISE CONSTANTS; T := 0.499975; T1 := 0.50025; T2 := 2.0; 'COMMENT' READ VALUE OF I, CONTROLLING TOTAL WEIGHT:IF I = 10 THE TOTAL WEIGHT IS ONE MILLION WHETSTONE INSTRUCTIONS; ININTEGER(2,I); N1 := 0; N2 := 12 * I; N3 := 14 * I; N4 := 345 * I; N5 := 0; N6 := 210 * I; N7 := 32 * I; N8 := 899 * I; N9 := 616 * I; N10 := 0; N11 := 93 * I; 'COMMENT' MODULE 1: SIMPLE IDENTIFIERS; X1 := 1.0; X2 := X3 := X4 := -1.0; 'FOR' I := 1 'STEP' 1 'UNTIL' N1 'DO' 'BEGIN' X1 := (X1 + X2 + X3 - X4) * T; X2 := (X1 + X2 - X3 + X4) * T; X3 := (X1 - X2 + X3 + X4) * T; X4 := (-X1 + X2 + X3 + X4) * T; 'END' MODULE 1; POUT(N1,N1,N1,X1,X2,X3,X4); 'COMMENT' MODULE 2: ARRAY ELEMENTS; E1[1] := 1.0; E1[2] := E1[3] := E1[4] := -1.0; 'FOR' I := 1 'STEP' 1 'UNTIL' N2 'DO' 'BEGIN' E1[1] := (E1[1] + E1[2] + E1[3] - E1[4]) * T; E1[2] := (E1[1] + E1[2] - E1[3] + E1[4]) * T; E1[3] := (E1[1] - E1[2] + E1[3] + E1[4]) * T; E1[4] := (-E1[1] + E1[2] + E1[3] + E1[4]) * T; 'END' MODULE 2; POUT(N2,N3,N2,E1[1],E1[2],E1[3],E1[4]); 'COMMENT' MODULE 3: ARRAY AS PARAMETER; 'FOR' I := 1 'STEP' 1 'UNTIL' N3 'DO' PA(E1); POUT(N3,N2,N2,E1[1],E1[2],E1[3],E1[4]); 'COMMENT' MODULE 4: CONDITIONAL JUMPS; J := 1; 'FOR' I := 1 'STEP' 1 'UNTIL' N4 'DO' 'BEGIN' 'IF' J = 1 'THEN' J := 2 'ELSE' J := 3; 'IF' J > 2 'THEN' J := 0 'ELSE' J := 1; 'IF' J < 1 'THEN' J := 1 'ELSE' J := 0; 'END' MODULE 4; POUT(N4,J,J,X1,X2,X3,X4); 'COMMENT' MODULE 5: OMITTED; 'COMMENT' MODULE 6: INTEGER ARITHMETIC; J := 1; K := 2; L := 3; 'FOR' I := 1 'STEP' 1 'UNTIL' N6 'DO' 'BEGIN' J := J * (K - J) * (L - K); K := L * K - (L - J) * K; L := (L - K) * (K + J); E1[L - 1] := J + K + L; E1[K - 1] := J * K * L; 'END' MODULE 6; POUT(N6,J,K,E1[1],E1[2],E1[3],E1[4]); 'COMMENT' MODULE 7: TRIG.FUNCTIONS; X := Y := 0.5; 'FOR' I := 1 'STEP' 1 'UNTIL' N7 'DO' 'BEGIN' X := T * ARCTAN(T2 * SIN(X) * COS(X)/ (COS(X + Y) + COS(X - Y) - 1.0)); Y := T * ARCTAN(T2 * SIN(Y) * COS(Y)/ (COS(X + Y) + COS(X - Y) - 1.0)); 'END' MODULE 7; POUT(N7,J,K,X,X,Y,Y); 'COMMENT' MODULE 8: PROCEDURE CALLS; X := Y := Z := 1.0; 'FOR' I := 1 'STEP' 1 'UNTIL' N8 'DO' P3(X,Y,Z); POUT(N8,J,K,X,Y,Z,Z); 'COMMENT' MODULE 9: ARRAY REFERENCES; J := 1; K := 2; L := 3; E1[1] := 1.0; E1[2] := 2.0; E1[3] := 3.0; 'FOR' I := 1 'STEP' 1 'UNTIL' N9 'DO' P0; POUT(N9,J,K,E1[1],E1[2],E1[3],E1[4]); 'COMMENT' MODULE 10: INTEGER ARITHMETIC; J := 2; K := 3; 'FOR' I := 1 'STEP' 1 'UNTIL' N10 'DO' 'BEGIN' J := J + K; K := J + K; J := K - J; K := K - J - J; 'END' MODULE 10; POUT(N10,J,K,X1,X2,X3,X4); 'COMMENT' MODULE 11: STANDARD FUNCTIONS; X := 0.75; 'FOR' I := 1 'STEP' 1 'UNTIL' N11 'DO' X := SQRT(EXP(LN(X)/T1)); POUT(N11,J,K,X,X,X,X); 'END'