Damm algorithm: Difference between revisions
Content deleted Content added
Not a robot (talk | contribs) Add Draco |
Deadmarshal (talk | contribs) Added Modula-3 |
||
Line 1,876: | Line 1,876: | ||
ReadChar; |
ReadChar; |
||
END DammAlgorithm.</lang> |
END DammAlgorithm.</lang> |
||
=={{header|Modula-3}}== |
|||
<lang modula3>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.</lang> |
|||
{{out}} |
|||
<pre>5724 is valid |
|||
5727 is invalid |
|||
112946 is valid |
|||
112949 is invalid</pre> |
|||
=={{header|Nim}}== |
=={{header|Nim}}== |
||
<lang Nim> |
<lang Nim> |