Binary coded decimal: Difference between revisions

Content added Content deleted
(→‎{{header|ALGOL W}}: Use unsigned BCD and added addition/subtraction of larger numbers)
(→‎{{header|PL/M}}: Show the same 12-digit arithmetic as the Algol 68 and Algol W samples)
Line 841: Line 841:
A = 01H;
A = 01H;


DO I = 1 TO 10; /* REPEATEDLY ADD 123456789 TO THE NUMBER AND DISPLAY IT */
DO I = 1 TO 10; /* REPEATEDLY ADD 11111111111 TO THE NUMBER */
CALL PR$BCD( F );
CALL PR$BCD( F );
CALL PR$BCD( E );
CALL PR$BCD( E );
Line 848: Line 848:
CALL PR$BCD( B );
CALL PR$BCD( B );
CALL PR$BCD( A );
CALL PR$BCD( A );
CALL PR$STRING( .' + 123456789 = $' );
CALL PR$STRING( .' + 011111111111 = $' );
A = DEC( A + 89H ); /* THE PARAMETER TO THE DEC BUILTIN FUNCTION */
A = DEC( A + 11H ); /* THE PARAMETER TO THE DEC BUILTIN FUNCTION */
B = DEC( B PLUS 67H ); /* MUST BE A CONSTANT OR UNSCRIPTED VARIABLE */
B = DEC( B PLUS 11H ); /* MUST BE A CONSTANT OR UNSCRIPTED VARIABLE */
C = DEC( C PLUS 45H ); /* +/-/PLUS/MINUS ANOTHER CONSTANT OR */
C = DEC( C PLUS 11H ); /* +/-/PLUS/MINUS ANOTHER CONSTANT OR */
D = DEC( D PLUS 23H ); /* UNSUBSCRIPTED VARIABLE */
D = DEC( D PLUS 11H ); /* UNSUBSCRIPTED VARIABLE */
E = DEC( E PLUS 1H ); /* ( WHICH MUST CONTAIN 2-DIGIT BCD VALUES ).*/
E = DEC( E PLUS 11H ); /* ( WHICH MUST CONTAIN 2-DIGIT BCD VALUES ).*/
F = DEC( F PLUS 0 ); /* PLUS/MINUS PERFORM ADDITION/SUBTRACTION */
F = DEC( F PLUS 1 ); /* PLUS/MINUS PERFORM ADDITION/SUBTRACTION */
CALL PR$BCD( F ); /* INCLUDING THE CARRY FROM THE PREVIOUS */
CALL PR$BCD( F ); /* INCLUDING THE CARRY FROM THE PREVIOUS */
CALL PR$BCD( E ); /* OPERATION, +/- IGNORE THE CARRY. */
CALL PR$BCD( E ); /* OPERATION, +/- IGNORE THE CARRY. */
Line 864: Line 864:
END;
END;


A, B, C, D, E, F = 099H; /* SET THE 12 DIGIT BCD NUMBER TO 999999999999 */
DO I = 1 TO 10; /* REPEATEDLY SUBTRACT 11111111111 FROM THE NUMBER */

DO I = 1 TO 10; /* REPEATEDLY SUBTRACT 987654321 AND DISPLAY THE RESULT */
CALL PR$BCD( F );
CALL PR$BCD( F );
CALL PR$BCD( E );
CALL PR$BCD( E );
Line 873: Line 871:
CALL PR$BCD( B );
CALL PR$BCD( B );
CALL PR$BCD( A );
CALL PR$BCD( A );
CALL PR$STRING( .' - 987654321 = $' );
CALL PR$STRING( .' - 011111111111 = $' );
A = DEC( A - 21H );
A = DEC( A - 11H );
B = DEC( B MINUS 43H );
B = DEC( B MINUS 11H );
C = DEC( C MINUS 65H );
C = DEC( C MINUS 11H );
D = DEC( D MINUS 87H );
D = DEC( D MINUS 11H );
E = DEC( E MINUS 9H );
E = DEC( E MINUS 11H );
F = DEC( F MINUS 0 );
F = DEC( F MINUS 1 );
CALL PR$BCD( F );
CALL PR$BCD( F );
CALL PR$BCD( E );
CALL PR$BCD( E );
Line 889: Line 887:
END;
END;


EOF</lang>
EOF
</lang>
{{out}}
{{out}}
<pre>
<pre>
012345678901 + 123456789 = 012469135690
012345678901 + 011111111111 = 023456790012
023456790012 + 011111111111 = 034567901123
012469135690 + 123456789 = 012592592479
034567901123 + 011111111111 = 045679012234
012592592479 + 123456789 = 012716049268
045679012234 + 011111111111 = 056790123345
012716049268 + 123456789 = 012839506057
056790123345 + 011111111111 = 067901234456
012839506057 + 123456789 = 012962962846
067901234456 + 011111111111 = 079012345567
012962962846 + 123456789 = 013086419635
079012345567 + 011111111111 = 090123456678
013086419635 + 123456789 = 013209876424
090123456678 + 011111111111 = 101234567789
013209876424 + 123456789 = 013333333213
101234567789 + 011111111111 = 112345678900
013333333213 + 123456789 = 013456790002
112345678900 + 011111111111 = 123456790011
013456790002 + 123456789 = 013580246791
123456790011 - 011111111111 = 112345678900
999999999999 - 987654321 = 999012345678
112345678900 - 011111111111 = 101234567789
999012345678 - 987654321 = 998024691357
101234567789 - 011111111111 = 090123456678
998024691357 - 987654321 = 997037037036
090123456678 - 011111111111 = 079012345567
997037037036 - 987654321 = 996049382715
079012345567 - 011111111111 = 067901234456
996049382715 - 987654321 = 995061728394
067901234456 - 011111111111 = 056790123345
995061728394 - 987654321 = 994074074073
056790123345 - 011111111111 = 045679012234
994074074073 - 987654321 = 993086419752
045679012234 - 011111111111 = 034567901123
993086419752 - 987654321 = 992098765431
034567901123 - 011111111111 = 023456790012
992098765431 - 987654321 = 991111111110
023456790012 - 011111111111 = 012345678901
991111111110 - 987654321 = 990123456789
</pre>
</pre>