MODULE transpose2; (*--------------------------------------------------------- File name: transpose2.pm Author: AG Date: 5/31/05 Problem: This program transposes 2x2 Matrices. Matrices are represented by two lines. In this example all matrices equal: 1 2 3 4 Example of Execution: Initial Matrices: L1: 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 L2: 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 Transposed Matrices: L1: 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 L2: 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 Cycles: 1 ID + 1 MOD + 2 Shifts + 3 Assignments *) (*---------------------------------------------------------- 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 L0id, L1, L2, L3temp: chain OF INTEGER; (*---------------------------------------------------------- MAIN ----------------------------------------------------------*) BEGIN (*Initialize data *) L1:= 1; L2:= 3; IF ID(chain) MOD 2 = 0 THEN L1:= 2; L2:= 4; END; (* IF *) (* print initial matrices *) WriteString("Initial Matrices:"); WriteLn; IF ID(chain) < 16 THEN WriteString("L1: "); WriteInt(L1, 2); WriteLn; WriteString("L2: "); WriteInt(L2, 2); WriteLn; END; (* display *) (* START: transpose 2 *) L0id:= ID(chain) MOD 2; (*L1: 1 2 1 2 1 2 *) (*L2: 3 4 3 4 3 4 *) (*L3temp: 0 0 0 0 0 0 *) L2:= MOVE.right(L2); (* L2: 4 3 4 3 4 3 *) IF L0id = 0 THEN L3temp:= L2; (* L3temp: 0 3 0 3 0 3 *) L2:= L1; (* L2: 4 2 4 2 4 2 *) L1:= L3temp; (* L1: 1 3 1 3 1 3 *) END; (* IF *) L2:= MOVE.left(L2); (* L2: 2 4 2 4 2 4 *) (* Printing *) WriteString("Transposed Matrices:"); WriteLn; IF ID(chain) < 16 THEN WriteString("L1: "); WriteInt(L1, 2); WriteLn; WriteString("L2: "); WriteInt(L2, 2); WriteLn; END; (* display *) END transpose2.