include "cowgol.coh"; # Damm test on number given as ASCII string # Returns check digit sub damm(num: [uint8]): (chk: uint8) is var table: uint8[] := { 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 }; chk := 0; while [num] != 0 loop chk := table[(chk<<1) + (chk<<3) + ([num] - '0')]; num := @next num; end loop; end sub; # Test and print sub test(num: [uint8]) is print(num); print(":"); if damm(num) == 0 then print("Pass\n"); else print("Fail\n"); end if; end sub; test("5724"); test("5727"); test("112946"); test("112949");