Special divisors: Difference between revisions
→{{header|Polyglot:PL/I and PL/M}}: Use new include file
m (→{{header|PL/M}}: Added "works with".) |
(→{{header|Polyglot:PL/I and PL/M}}: Use new include file) |
||
Line 1,564:
=={{header|Polyglot:PL/I and PL/M}}==
{{works with|8080 PL/M Compiler}} ... under CP/M (or an emulator)
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 */
special_divisors_100H: procedure options (main);
%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
DECLARE TRUE LITERALLY '1', FALSE LITERALLY '0';
BDOS: PROCEDURE( FN, ARG ); DECLARE FN BYTE, ARG ADDRESS; GOTO 5; END;▼
DECLARE FN BYTE, ARG ADDRESS; GOTO 5; END;
PRCHAR: PROCEDURE( C ); DECLARE C CHARACTER; PUT edit(c)(a(1)) /* */ /*▼
▲ BDOS: PROCEDURE( FN, ARG ); DECLARE FN BYTE, ARG ADDRESS; GOTO 5; END;
PRSTRING: PROCEDURE( S ); DECLARE S ADDRESS; CALL BDOS( 9, S ); END;
PRNL: PROCEDURE; CALL PRCHAR( 0DH ); CALL
PRNUMBER: PROCEDURE( N );
DECLARE V ADDRESS, N$STR( 6 ) BYTE, W BYTE;
N$STR( W := W
▲ N$STR( W := LAST( N$STR ) ) = '$';
CALL BDOS( 9,
▲ DO WHILE( ( V := V / 10 ) > 0 );
▲ END;
END PRNUMBER;
MODF: PROCEDURE( A, B )ADDRESS;
DECLARE ( A, B )ADDRESS;
▲ DECLARE ( A, B )BINARY;
▲ MOD /* */ B ) );
END MODF;
/* END LANGUAGE DEFINITIONS */
/* TASK */
REVERSE: PROCEDURE( N )returns (
BINARY )
Line 1,614:
RETURN ( R );
END REVERSE ;
▲ 1 /* */ )
/* FIND AND SHOW THE NUMBERS UP TO 200 */
Line 1,650 ⟶ 1,645:
END;
CALL PRNL;
CALL PRSTRING( SADDR( 'FOUND $' ) );
CALL PRNUMBER( SDCOUNT );
▲ CALL PRSTRING( ./* */ ( ' ''''SPECIAL DIVISORS'''' BELOW ' /*
CALL PRNUMBER( MAXSD + 1 );
CALL PRNL;
EOF: end special_divisors_100H;</lang>
{{out}}
<pre>
|