54 lines
1.0 KiB
ObjectPascal
54 lines
1.0 KiB
ObjectPascal
program DammAlgorithm;
|
|
uses
|
|
sysutils;
|
|
|
|
TYPE TA = ARRAY[0..9,0..9] OF UInt8;
|
|
CONST table : TA =
|
|
((0,3,1,7,5,9,8,6,4,2),
|
|
(7,0,9,2,1,5,4,8,6,3),
|
|
(4,2,0,6,8,7,1,3,5,9),
|
|
(1,7,5,0,9,8,3,4,2,6),
|
|
(6,1,2,3,0,4,5,9,7,8),
|
|
(3,6,7,4,2,0,9,5,8,1),
|
|
(5,8,6,9,7,2,0,1,3,4),
|
|
(8,9,4,5,3,6,2,0,1,7),
|
|
(9,4,3,8,6,1,7,2,0,5),
|
|
(2,5,8,1,4,3,6,7,9,0));
|
|
|
|
function Damm(s : string) : BOOLEAN;
|
|
VAR
|
|
interim,i : UInt8;
|
|
BEGIN
|
|
interim := 0;
|
|
i := 1;
|
|
WHILE i <= length(s) DO
|
|
Begin
|
|
interim := table[interim,ORD(s[i])-ORD('0')];
|
|
INC(i);
|
|
END;
|
|
Damm := interim=0;
|
|
END;
|
|
|
|
PROCEDURE Print(number : Uint32);
|
|
VAR
|
|
isValid : BOOLEAN;
|
|
buf :string;
|
|
BEGIN
|
|
buf := IntToStr(number);
|
|
isValid := Damm(buf);
|
|
Write(buf);
|
|
IF isValid THEN
|
|
Write(' is valid')
|
|
ELSE
|
|
Write(' is invalid');
|
|
WriteLn;
|
|
END;
|
|
|
|
BEGIN
|
|
Print(5724);
|
|
Print(5727);
|
|
Print(112946);
|
|
Print(112949);
|
|
Readln;
|
|
END.
|