41 lines
1.1 KiB
Plaintext
41 lines
1.1 KiB
Plaintext
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.
|