Special divisors: Difference between revisions
Content added Content deleted
m (→{{header|PL/M}}: Added "works with".) |
(→{{header|Polyglot:PL/I and PL/M}}: Use new include file) |
||
Line 1,564: | Line 1,564: | ||
=={{header|Polyglot:PL/I and PL/M}}== |
=={{header|Polyglot:PL/I and PL/M}}== |
||
{{works with|8080 PL/M Compiler}} ... under CP/M (or an emulator) |
{{works with|8080 PL/M Compiler}} ... under CP/M (or an emulator) |
||
Should work with many PL/I implementations. |
Should work with many PL/I implementations.<br> |
||
The PL/I include file "pg.inc" can be found on the [[Polyglot:PL/I and PL/M]] page. |
|||
Note the use of text in column 81 onwards to hide the PL/I specifics from the PL/M compiler. |
|||
<lang pli>/* FIND NUMBERS WHOSE REVERSED DIVISORS DIVIDE THE REVERSED NUMBER */ |
<lang pli>/* FIND NUMBERS WHOSE REVERSED DIVISORS DIVIDE THE REVERSED NUMBER */ |
||
special_divisors_100H: procedure options (main); |
special_divisors_100H: procedure options (main); |
||
declare eof binary; |
|||
/* PL/I DEFINITIONS */ |
|||
%include 'pg.inc'; |
|||
/* PL/M DEFINITIONS: CP/M BDOS SYSTEM CALL AND CONSOLE I/O ROUTINES, ETC. */ /* |
|||
DECLARE BINARY LITERALLY 'ADDRESS', CHARACTER LITERALLY 'BYTE'; |
DECLARE BINARY LITERALLY 'ADDRESS', CHARACTER LITERALLY 'BYTE'; |
||
DECLARE |
DECLARE SADDR LITERALLY '.', BIT LITERALLY 'BYTE'; |
||
DECLARE TRUE LITERALLY '1', FALSE LITERALLY '0'; |
|||
⚫ | |||
BDOSF: PROCEDURE( FN, ARG )BYTE; |
|||
DECLARE FN BYTE, ARG ADDRESS; GOTO 5; END; |
|||
⚫ | |||
⚫ | |||
CALL BDOS( 2, C ) /* */; |
|||
PRSTRING: PROCEDURE( S ); DECLARE S ADDRESS; CALL BDOS( 9, S ); END; |
|||
END PRCHAR; |
|||
⚫ | |||
PRNL: PROCEDURE; put skip /* |
|||
CALL |
PRNL: PROCEDURE; CALL PRCHAR( 0DH ); CALL PRCHAR( 0AH ); END; |
||
PRNUMBER: PROCEDURE( N ); |
PRNUMBER: PROCEDURE( N ); |
||
⚫ | |||
if n < 10 then put edit(n)(f(1)); /* */ |
|||
DECLARE V ADDRESS, N$STR( 6 ) BYTE, W BYTE; |
|||
else if n < 100 then put edit(n)(f(2)); /* */ |
|||
⚫ | |||
else if n < 1000 then put edit(n)(f(3)); /* */ |
|||
N$STR( W := W - 1 ) = '0' + ( ( V := N ) MOD 10 ); |
|||
⚫ | |||
*//* |
|||
N$STR( W := W - 1 ) = '0' + ( V MOD 10 ); |
|||
⚫ | |||
⚫ | |||
CALL BDOS( 9, .N$STR( W ) ); |
|||
⚫ | |||
N$STR( W := W - 1 ) = '0' + ( V MOD 10 ); |
|||
⚫ | |||
CALL BDOS( 9, .N$STR( W ) ) /* */; |
|||
END PRNUMBER; |
END PRNUMBER; |
||
MODF: PROCEDURE( A, B )ADDRESS; |
|||
DECLARE ( A, B )ADDRESS; |
|||
MODF: PROCEDURE( A, B )returns ( |
|||
⚫ | |||
BINARY ) |
|||
; |
|||
⚫ | |||
RETURN ( mod( A ,/* |
|||
⚫ | |||
END MODF; |
END MODF; |
||
/* END LANGUAGE DEFINITIONS */ |
|||
/* TASK */ |
|||
REVERSE: PROCEDURE( N )returns ( |
REVERSE: PROCEDURE( N )returns ( |
||
BINARY ) |
BINARY ) |
||
Line 1,614: | Line 1,614: | ||
RETURN ( R ); |
RETURN ( R ); |
||
END REVERSE ; |
END REVERSE ; |
||
DECLARE TRUE BIT static INITIAL( '1'b/* |
|||
⚫ | |||
, FALSE BIT static INITIAL( '0'b/* |
|||
0 /* */ ); |
|||
/* FIND AND SHOW THE NUMBERS UP TO 200 */ |
/* FIND AND SHOW THE NUMBERS UP TO 200 */ |
||
Line 1,650: | Line 1,645: | ||
END; |
END; |
||
CALL PRNL; |
CALL PRNL; |
||
CALL PRSTRING( SADDR( 'FOUND $' ) ); |
|||
put list /* |
|||
CALL PRSTRING( ./* */ ( 'FOUND ' /* |
|||
, '$' |
|||
) /* */ |
|||
); |
|||
CALL PRNUMBER( SDCOUNT ); |
CALL PRNUMBER( SDCOUNT ); |
||
⚫ | |||
put list /* |
|||
⚫ | |||
, '$' |
|||
) /* */ |
|||
); |
|||
CALL PRNUMBER( MAXSD + 1 ); |
CALL PRNUMBER( MAXSD + 1 ); |
||
CALL PRNL; |
CALL PRNL; |
||
EOF = 1; |
|||
end special_divisors_100H;</lang> |
EOF: end special_divisors_100H;</lang> |
||
{{out}} |
{{out}} |
||
<pre> |
<pre> |