MODULE selectadd; (*--------------------------------------------------------- File name: selectadd.pm Author: MM,AG Date: 5/23/05 Problem: This program adds all of the selected elements from L1 and L2 into L3. It uses MOD for the selection of the elements. (L1 + L2)<> = L3 Example of Execution: L1: 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 L2: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 L3: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 N=2 || position MOD N L3: 0 4 0 8 0 12 0 16 0 20 0 24 0 28 0 32 Cycles: 1 addition. *) (*---------------------------------------------------------- CONFIGURATION ----------------------------------------------------------*) CONST MAXCELLS=1024; (* MAXCELLS cells in one line *) CONFIGURATION chain[0..(MAXCELLS - 1)]; CONNECTION left: chain [i] -> chain[(i-1) MOD MAXCELLS]; right: chain[i] -> chain[(i+1) MOD MAXCELLS]; (*---------------------------------------------------------- VARIABLES ----------------------------------------------------------*) VAR L0, L1, L2, L3: chain OF INTEGER; N, RightLimit: INTEGER; (*---------------------------------------------------------- MAIN ----------------------------------------------------------*) BEGIN (*Initialize data *) RightLimit:= 16; N:= 2; L1:= ID(chain)* 2 - 1; (* L1 = 1 3 5 7 9 11.. *) L2:= 1; (* L2 = 1 1 1 1 1 1.. *) L3:= 0; (* L3 = 0 0 0 0 0 0.. *) (*Prepare selection *) L0:= ID(chain); (* L0 = 1 2 3 4 5 6.. *) IF L0 <= RightLimit THEN (*printing *) WriteString("L1: "); WriteInt(L1, 2);WriteLn; WriteString("L2: "); WriteInt(L2, 2);WriteLn; WriteString("L3: "); WriteInt(L3, 2);WriteLn; IF L0 MOD N = 0 THEN (* select even positions *) L3 := L1 + L2; (* add selected positions *) END; (*IF *) (*printing *) WriteString("N=2 || position MOD N"); WriteLn; WriteLn; WriteString("L3: ");WriteInt(L3, 2);WriteLn; END; (*IF *) END selectadd.