MODULE DammAlgorithm EXPORTS Main; IMPORT IO, Text; VAR Numbers:ARRAY[0..3] OF TEXT := ARRAY OF TEXT{"5724", "5727", "112946", "112949"}; PROCEDURE Damm(READONLY Str:TEXT):BOOLEAN = TYPE TTable = ARRAY[0..9],[0..9] OF INTEGER; VAR Table := TTable {ARRAY OF INTEGER{0,3,1,7,5,9,8,6,4,2}, ARRAY OF INTEGER{7,0,9,2,1,5,4,8,6,3}, ARRAY OF INTEGER{4,2,0,6,8,7,1,3,5,9}, ARRAY OF INTEGER{1,7,5,0,9,8,3,4,2,6}, ARRAY OF INTEGER{6,1,2,3,0,4,5,9,7,8}, ARRAY OF INTEGER{3,6,7,4,2,0,9,5,8,1}, ARRAY OF INTEGER{5,8,6,9,7,2,0,1,3,4}, ARRAY OF INTEGER{8,9,4,5,3,6,2,0,1,7}, ARRAY OF INTEGER{9,4,3,8,6,1,7,2,0,5}, ARRAY OF INTEGER{2,5,8,1,4,3,6,7,9,0}}; Interim,I:INTEGER := 0; BEGIN WHILE I <= Text.Length(Str)-1 DO Interim := Table[Interim, ORD(Text.GetChar(Str, I)) - ORD('0')]; INC(I); END; RETURN Interim = 0; END Damm; BEGIN FOR I := FIRST(Numbers) TO LAST(Numbers) DO IF Damm(Numbers[I]) THEN IO.Put(Numbers[I] & " is valid\n"); ELSE IO.Put(Numbers[I] & " is invalid\n"); END; END; END DammAlgorithm.