Damm algorithm: Difference between revisions
Content added Content deleted
Not a robot (talk | contribs) (→{{header|C}}: Verify and add output) |
Not a robot (talk | contribs) (Add MAD) |
||
Line 1,073: | Line 1,073: | ||
112946 is valid! |
112946 is valid! |
||
Enter the number to check: 0</pre> |
Enter the number to check: 0</pre> |
||
=={{header|MAD}}== |
|||
<lang MAD> NORMAL MODE IS INTEGER |
|||
R VERIFY DAMM CHECKSUM OF NUMBER |
|||
INTERNAL FUNCTION(CKNUM) |
|||
VECTOR VALUES DAMMIT = |
|||
0 0,3,1,7,5,9,8,6,4,2 |
|||
1 , 7,0,9,2,1,5,4,8,6,3 |
|||
2 , 4,2,0,6,8,7,1,3,5,9 |
|||
3 , 1,7,5,0,9,8,3,4,2,6 |
|||
4 , 6,1,2,3,0,4,5,9,7,8 |
|||
5 , 3,6,7,4,2,0,9,5,8,1 |
|||
6 , 5,8,6,9,7,2,0,1,3,4 |
|||
7 , 8,9,4,5,3,6,2,0,1,7 |
|||
8 , 9,4,3,8,6,1,7,2,0,5 |
|||
9 , 2,5,8,1,4,3,6,7,9,0 |
|||
DIMENSION DAMDGT(10) |
|||
ENTRY TO DAMM. |
|||
TMP=CKNUM |
|||
THROUGH GETDGT, FOR NDGT=0, 1, TMP.E.0 |
|||
DAMDGT(NDGT) = TMP-TMP/10*10 |
|||
GETDGT TMP = TMP/10 |
|||
INTRM = 0 |
|||
THROUGH CKDGT, FOR NDGT=NDGT, -1, NDGT.L.0 |
|||
CKDGT INTRM = DAMMIT(INTRM*10 + DAMDGT(NDGT)) |
|||
FUNCTION RETURN INTRM.E.0 |
|||
END OF FUNCTION |
|||
R TEST SOME NUMBERS |
|||
THROUGH TEST, FOR VALUES OF N = 5724,5727,112946,112949 |
|||
WHENEVER DAMM.(N) |
|||
PRINT FORMAT VALID,N |
|||
OTHERWISE |
|||
PRINT FORMAT INVAL,N |
|||
TEST END OF CONDITIONAL |
|||
VECTOR VALUES VALID = $I9,S1,5HVALID*$ |
|||
VECTOR VALUES INVAL = $I9,S1,7HINVALID*$ |
|||
END OF PROGRAM |
|||
</lang> |
|||
{{out}} |
|||
<pre> 5724 VALID |
|||
5727 INVALID |
|||
112946 VALID |
|||
112949 INVALID</pre> |
|||
=={{header|Modula-2}}== |
=={{header|Modula-2}}== |