MODULE checksort; (*--------------------------------------------------------- File name: checksort.pm Author: AG Date: 6/06/05 Problem: This program checks if a line is sorted. Example of Execution 1: L1: 1 2 3 10 5 6 7 8 9 10 11 12 13 14 15 L2temp: 0 1 1 7 -5 1 1 1 1 1 1 1 1 1 1 Res:FALSE Example of Execution 2: L1: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 L2temp: 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Res:TRUE Cycles: 2 assignments + 2 tests + 1 ID + 1 shift + 1 substraction. *) (*---------------------------------------------------------- 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 L1, L2temp: chain OF INTEGER; RightLimit: INTEGER; Res: BOOLEAN; (*---------------------------------------------------------- MAIN ----------------------------------------------------------*) BEGIN (* initialize data change the value of L1 to any line *) L1 := ID(chain); RightLimit := 16; (* L1<<4>>:= 10; <- makes it false*) IF ID(chain) > 1 THEN L2temp := RECEIVE.right(L1); L2temp := L1 - L2temp; END; (* IF *) Res := TRUE; IF L2temp < 0 THEN Res := FALSE; END; (* IF *) (* printing *) IF ID(chain) < RightLimit THEN WriteString("L1:" ); WriteInt(L1, 2); WriteLn; WriteString("L2temp:" ); WriteInt(L2temp, 2); WriteLn; WriteString("Res:" ); WriteBool(Res, 2); WriteLn; END; (* IF *) END checksort.