Sum of divisors: Difference between revisions

Add PL/M
(Add Fortran)
(Add PL/M)
Line 1,025:
if remainder(i,10)=0 then puts(1,"\n") end if
end for</lang>
 
=={{header|PL/M}}==
<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 LIMIT LITERALLY '100';
 
PRINT$NUMBER: PROCEDURE (N);
DECLARE S (7) BYTE INITIAL (' .....$');
DECLARE N ADDRESS, I BYTE;
I = 6;
DIGIT:
I = I - 1;
S(I) = N MOD 10 + '0';
N = N/10;
IF N>0 THEN GO TO DIGIT;
I = I - 1;
DO WHILE I > 0;
S(I) = ' ';
I = I - 1;
END;
CALL PRINT(.S);
END PRINT$NUMBER;
 
/* CALCULATE SUMS OF DIVISORS UP TO N INCLUSIVE */
CALC$DIVSUM: PROCEDURE (N, BUF);
DECLARE (I, J, N, BUF, D BASED BUF) ADDRESS;
DO I = 1 TO N;
D(I) = 1;
END;
DO I = 2 TO N;
DO J = I TO N BY I;
D(J) = D(J) + I;
END;
END;
END CALC$DIVSUM;
 
/* PRINT RESULTS */
DECLARE I ADDRESS;
DECLARE COL BYTE INITIAL (0);
DECLARE DIVS (LIMIT) ADDRESS;
 
CALL CALC$DIVSUM(LIMIT, .DIVS);
DO I = 1 TO LIMIT;
CALL PRINT$NUMBER(DIVS(I));
COL = COL + 1;
IF COL = 10 THEN DO;
CALL PRINT(.(13,10,'$'));
COL = 0;
END;
END;
CALL EXIT;
EOF</lang>
{{out}}
<pre> 1 3 4 7 6 12 8 15 13 18
12 28 14 24 24 31 18 39 20 42
32 36 24 60 31 42 40 56 30 72
32 63 48 54 48 91 38 60 56 90
42 96 44 84 78 72 48 124 57 93
72 98 54 120 72 120 80 90 60 168
62 96 104 127 84 144 68 126 96 144
72 195 74 114 124 140 96 168 80 186
121 126 84 224 108 132 120 180 90 234
112 168 128 144 120 252 98 171 156 217</pre>
 
=={{header|Python}}==
2,114

edits