Number names: Difference between revisions
Content added Content deleted
No edit summary |
Not a robot (talk | contribs) (Add PL/M) |
||
Line 4,533: | Line 4,533: | ||
end; |
end; |
||
put skip edit (trim(N), ' = ', value) (a);</lang> |
put skip edit (trim(N), ' = ', value) (a);</lang> |
||
=={{header|PL/M}}== |
|||
The largest natively supported integer type is only 16 bits wide, so this program only |
|||
works up to 65535. |
|||
<lang plm>100H: |
|||
BDOS: PROCEDURE (FN, ARG); DECLARE FN BYTE, ARG ADDRESS; GO TO 5; END BDOS; |
|||
EXIT: PROCEDURE; CALL BDOS(0,0); END EXIT; |
|||
PRINT: PROCEDURE (S); DECLARE S ADDRESS; CALL BDOS(9,S); END PRINT; |
|||
DECLARE FCB$NAME LITERALLY '5DH'; /* CP/M STORES COMMAND ARGUMENT HERE */ |
|||
/* READ ASCII NUMBER */ |
|||
READ$NUMBER: PROCEDURE (PTR) ADDRESS; |
|||
DECLARE PTR ADDRESS, C BASED PTR BYTE, RSLT ADDRESS; |
|||
RSLT = 0; |
|||
DO WHILE '0' <= C AND C <= '9'; |
|||
RSLT = RSLT * 10 + C - '0'; |
|||
PTR = PTR + 1; |
|||
END; |
|||
RETURN RSLT; |
|||
END; |
|||
/* SPELL 16-BIT NUMBER */ |
|||
SPELL: PROCEDURE (N); |
|||
DECLARE N ADDRESS; |
|||
IF N=0 THEN DO; |
|||
CALL PRINT(.'ZERO$'); |
|||
RETURN; |
|||
END; |
|||
SMALL: PROCEDURE (N) ADDRESS; |
|||
DECLARE N BYTE; |
|||
DO CASE N; |
|||
RETURN .'$'; RETURN .'ONE$'; RETURN .'TWO$'; |
|||
RETURN .'THREE$'; RETURN .'FOUR$'; RETURN .'FIVE$'; |
|||
RETURN .'SIX$'; RETURN .'SEVEN$'; RETURN .'EIGHT$'; |
|||
RETURN .'NINE$'; RETURN .'TEN$'; RETURN .'ELEVEN$'; |
|||
RETURN .'TWELVE$'; RETURN .'THIRTEEN$'; RETURN .'FOURTEEN$'; |
|||
RETURN .'FIFTEEN$'; RETURN .'SIXTEEN$'; RETURN .'SEVENTEEN$'; |
|||
RETURN .'EIGHTEEN$'; RETURN .'NINETEEN$'; |
|||
END; |
|||
END SMALL; |
|||
TEENS: PROCEDURE (N) ADDRESS; |
|||
DECLARE N BYTE; |
|||
DO CASE N-2; |
|||
RETURN .'TWENTY$'; |
|||
RETURN .'THIRTY$'; |
|||
RETURN .'FORTY$'; |
|||
RETURN .'FIFTY$'; |
|||
RETURN .'SIXTY$'; |
|||
RETURN .'SEVENTY$'; |
|||
RETURN .'EIGHTY$'; |
|||
RETURN .'NINETY$'; |
|||
END; |
|||
END TEENS; |
|||
LESS$100: PROCEDURE (N); |
|||
DECLARE N BYTE; |
|||
IF N >= 20 THEN DO; |
|||
CALL PRINT(TEENS(N/10)); |
|||
N = N MOD 10; |
|||
IF N > 0 THEN CALL PRINT(.'-$'); |
|||
END; |
|||
CALL PRINT(SMALL(N)); |
|||
END LESS$100; |
|||
LESS$1000: PROCEDURE (N); |
|||
DECLARE N ADDRESS; |
|||
IF N >= 100 THEN DO; |
|||
CALL LESS$100(N/100); |
|||
CALL PRINT(.' HUNDRED$'); |
|||
N = N MOD 100; |
|||
IF N > 0 THEN CALL PRINT(.' $'); |
|||
END; |
|||
CALL LESS$100(N); |
|||
END LESS$1000; |
|||
IF N >= 1000 THEN DO; |
|||
CALL LESS$1000(N/1000); |
|||
CALL PRINT(.' THOUSAND$'); |
|||
N = N MOD 1000; |
|||
IF N > 0 THEN CALL PRINT(.' $'); |
|||
END; |
|||
CALL LESS$1000(N); |
|||
END SPELL; |
|||
CALL SPELL(READ$NUMBER(FCB$NAME)); |
|||
CALL EXIT; |
|||
EOF</lang> |
|||
{{out}} |
|||
<pre>A>spell 0 |
|||
ZERO |
|||
A>spell 65535 |
|||
SIXTY-FIVE THOUSAND FIVE HUNDRED THIRTY-FIVE |
|||
A>spell 1212 |
|||
ONE THOUSAND TWO HUNDRED TWELVE</pre> |
|||
=={{header|PowerBASIC}}== |
=={{header|PowerBASIC}}== |