N'th: Difference between revisions
Content added Content deleted
(Added VTL-2) |
(Added PL/M) |
||
Line 3,267: | Line 3,267: | ||
1011th 1012th 1013th 1014th 1015th 1016th 1017th 1018th 1019th 1020th 1021st |
1011th 1012th 1013th 1014th 1015th 1016th 1017th 1018th 1019th 1020th 1021st |
||
1022nd 1023rd 1024th 1025th</pre> |
1022nd 1023rd 1024th 1025th</pre> |
||
=={{header|PL/M}}== |
|||
{{works with|8080 PL/M Compiler}} ... under CP/M (or an emulator) |
|||
<syntaxhighlight lang="plm"> |
|||
100H: /* SUFFIX NUMBERS WITH ST, ND, RD OR TH AS APPROPRIATE */ |
|||
/* CP/M BDOS SYSTEM CALL AND I/O ROUTINES */ |
|||
BDOS: PROCEDURE( FN, ARG ); DECLARE FN BYTE, ARG ADDRESS; GOTO 5; END; |
|||
PR$CHAR: PROCEDURE( C ); DECLARE C BYTE; CALL BDOS( 2, C ); END; |
|||
PR$STRING: PROCEDURE( S ); DECLARE S ADDRESS; CALL BDOS( 9, S ); END; |
|||
PR$NL: PROCEDURE; CALL PR$CHAR( 0DH ); CALL PR$CHAR( 0AH ); END; |
|||
PR$NUMBER: PROCEDURE( N ); /* PRINTS A NUMBER IN THE MINIMUN FIELD WIDTH */ |
|||
DECLARE N ADDRESS; |
|||
DECLARE V ADDRESS, N$STR ( 6 )BYTE, W BYTE; |
|||
V = N; |
|||
W = LAST( N$STR ); |
|||
N$STR( W ) = '$'; |
|||
N$STR( W := W - 1 ) = '0' + ( V MOD 10 ); |
|||
DO WHILE( ( V := V / 10 ) > 0 ); |
|||
N$STR( W := W - 1 ) = '0' + ( V MOD 10 ); |
|||
END; |
|||
CALL PR$STRING( .N$STR( W ) ); |
|||
END PR$NUMBER; |
|||
/* TASK */ |
|||
DECLARE LD LITERALLY '100' /* LOWER CASE LETTERS NEEDED FOR THE SUFFICES */ |
|||
, LH LITERALLY '104' |
|||
, LN LITERALLY '110' |
|||
, LR LITERALLY '114' |
|||
, LS LITERALLY '115' |
|||
, LT LITERALLY '116' |
|||
; |
|||
/* RETURNS THE TWO CHARACTER ORDINAL SUFFIX FOR N */ |
|||
SUFFIX: PROCEDURE( N )ADDRESS; |
|||
DECLARE N ADDRESS; |
|||
DECLARE ( S1, S2 ) BYTE; |
|||
S1 = LT; |
|||
S2 = LH; |
|||
IF N MOD 100 < 4 OR N MOD 100 > 20 THEN DO; |
|||
DECLARE N10 ADDRESS; |
|||
N10 = N MOD 10; |
|||
IF N10 = 1 THEN DO; |
|||
S1 = LS; |
|||
S2 = LT; |
|||
END; |
|||
ELSE IF N10 = 2 THEN DO; |
|||
S1 = LN; |
|||
S2 = LD; |
|||
END; |
|||
ELSE IF N10 = 3 THEN DO; |
|||
S1 = LR; |
|||
S2 = LD; |
|||
END; |
|||
END; |
|||
RETURN ( S1 * 256 ) + S2; |
|||
END SUFFIX; |
|||
/* PRINTS THE TWO CHARACTER SUFFIX IN S */ |
|||
PR$SUFFIX: PROCEDURE( S ); |
|||
DECLARE S ADDRESS; |
|||
CALL PR$CHAR( HIGH( S ) ); |
|||
CALL PR$CHAR( LOW( S ) ); |
|||
END PR$SUFFIX ; |
|||
DECLARE I ADDRESS; |
|||
DO I = 0 TO 25; |
|||
IF I < 10 THEN CALL PR$CHAR( ' ' ); |
|||
CALL PR$CHAR( ' ' );CALL PR$NUMBER( I );CALL PR$SUFFIX( SUFFIX( I ) ); |
|||
IF ( I + 1 ) MOD 10 = 0 THEN CALL PR$NL; |
|||
END; |
|||
CALL PR$NL; |
|||
CALL PR$NL; |
|||
DO I = 250 TO 265; |
|||
CALL PR$CHAR( ' ' );CALL PR$NUMBER( I );CALL PR$SUFFIX( SUFFIX( I ) ); |
|||
IF ( I - 249 ) MOD 10 = 0 THEN CALL PR$NL; |
|||
END; |
|||
CALL PR$NL; |
|||
CALL PR$NL; |
|||
DO I = 1000 TO 1025; |
|||
CALL PR$CHAR( ' ' );CALL PR$NUMBER( I );CALL PR$SUFFIX( SUFFIX( I ) ); |
|||
IF ( I - 999 ) MOD 10 = 0 THEN CALL PR$NL; |
|||
END; |
|||
CALL PR$NL; |
|||
EOF |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
0th 1st 2nd 3rd 4th 5th 6th 7th 8th 9th |
|||
10th 11th 12th 13th 14th 15th 16th 17th 18th 19th |
|||
20th 21st 22nd 23rd 24th 25th |
|||
250th 251st 252nd 253rd 254th 255th 256th 257th 258th 259th |
|||
260th 261st 262nd 263rd 264th 265th |
|||
1000th 1001st 1002nd 1003rd 1004th 1005th 1006th 1007th 1008th 1009th |
|||
1010th 1011th 1012th 1013th 1014th 1015th 1016th 1017th 1018th 1019th |
|||
1020th 1021st 1022nd 1023rd 1024th 1025th |
|||
</pre> |
|||
=={{header|PowerShell}}== |
=={{header|PowerShell}}== |