Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
51
Task/Damm-algorithm/ALGOL-68/damm-algorithm.alg
Normal file
51
Task/Damm-algorithm/ALGOL-68/damm-algorithm.alg
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
BEGIN
|
||||
# returns TRUE if the check digit of s is correct according to the Damm algorithm, #
|
||||
# FALSE otherwise #
|
||||
PROC has valid damm check digit = ( STRING s )BOOL:
|
||||
BEGIN
|
||||
# operation table - as per wikipedia example #
|
||||
[,]INT operation table =
|
||||
( [,]INT( ( 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 )
|
||||
)
|
||||
) [ AT 0, AT 0 ]
|
||||
;
|
||||
INT interim digit := 0;
|
||||
FOR s pos FROM LWB s TO UPB s DO
|
||||
INT next digit = ABS s[ s pos ] - ABS "0";
|
||||
IF next digit < 0 OR next digit > 9 THEN
|
||||
# invalid digit #
|
||||
print( ( "Invalid damm digit: ", s[ s pos ], newline ) );
|
||||
stop
|
||||
ELSE
|
||||
# have a valid digit #
|
||||
interim digit := operation table[ interim digit, next digit ]
|
||||
FI
|
||||
OD;
|
||||
interim digit = 0
|
||||
END # has valid damm check digit # ;
|
||||
|
||||
# test the damm algorithm #
|
||||
PROC test damm algorithm = ( STRING s, BOOL expected )VOID:
|
||||
BEGIN
|
||||
BOOL valid = has valid damm check digit( s );
|
||||
print( ( "check digit of ", s, " is "
|
||||
, IF valid THEN "valid" ELSE "invalid" FI
|
||||
, IF valid = expected THEN "" ELSE " *** NOT AS EXPECTED" FI
|
||||
, newline
|
||||
)
|
||||
)
|
||||
END # test damm algorithm # ;
|
||||
# test cases - as per other language samples #
|
||||
test damm algorithm( "5724", TRUE );
|
||||
test damm algorithm( "5727", FALSE );
|
||||
test damm algorithm( "112946", TRUE )
|
||||
END
|
||||
Loading…
Add table
Add a link
Reference in a new issue