Tau function: Difference between revisions

Content added Content deleted
(Add BCPL)
(Add COBOL)
Line 402: Line 402:
end
end
end start_up</lang>
end start_up</lang>
{{out}}
<pre> 1 2 2 3 2 4 2 4 3 4 2 6 2 4 4 5 2 6 2 6
4 4 2 8 3 4 4 6 2 8 2 6 4 4 4 9 2 4 4 8
2 8 2 6 6 4 2 10 3 6 4 6 2 8 4 8 4 4 2 12
2 4 6 7 4 8 2 6 4 8 2 12 2 4 6 6 4 8 2 10
5 4 2 12 4 4 4 8 2 12 4 6 4 4 4 12 2 6 6 9</pre>

=={{header|COBOL}}==
{{trans|C}}
<lang cobol> IDENTIFICATION DIVISION.
PROGRAM-ID. TAU-FUNCTION.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 TAU-VARS.
03 TOTAL PIC 999.
03 N PIC 999.
03 FILLER REDEFINES N.
05 FILLER PIC 99.
05 FILLER PIC 9.
88 N-EVEN VALUES 0, 2, 4, 6, 8.
03 P PIC 999.
03 P-SQUARED PIC 999.
03 N-DIV-P PIC 999V999.
03 FILLER REDEFINES N-DIV-P.
05 NEXT-N PIC 999.
05 FILLER PIC 999.
88 DIVISIBLE VALUE ZERO.
03 F-COUNT PIC 999.
01 CONTROL-VARS.
03 I PIC 999.
01 OUT-VARS.
03 OUT-ITM PIC ZZ9.
03 OUT-STR PIC X(80) VALUE SPACES.
03 OUT-PTR PIC 99 VALUE 1.

PROCEDURE DIVISION.
BEGIN.
PERFORM SHOW-TAU VARYING I FROM 1 BY 1
UNTIL I IS GREATER THAN 100.
STOP RUN.
SHOW-TAU.
MOVE I TO N.
PERFORM TAU.
MOVE TOTAL TO OUT-ITM.
STRING OUT-ITM DELIMITED BY SIZE INTO OUT-STR
WITH POINTER OUT-PTR.
IF OUT-PTR IS EQUAL TO 61,
DISPLAY OUT-STR,
MOVE 1 TO OUT-PTR.

TAU.
MOVE 1 TO TOTAL.
PERFORM POWER-OF-2 UNTIL NOT N-EVEN.
MOVE ZERO TO P-SQUARED.
PERFORM ODD-FACTOR THRU ODD-FACTOR-LOOP
VARYING P FROM 3 BY 2
UNTIL P-SQUARED IS GREATER THAN N.
IF N IS GREATER THAN 1,
MULTIPLY 2 BY TOTAL.
POWER-OF-2.
ADD 1 TO TOTAL.
DIVIDE 2 INTO N.
ODD-FACTOR.
MULTIPLY P BY P GIVING P-SQUARED.
MOVE 1 TO F-COUNT.
ODD-FACTOR-LOOP.
DIVIDE N BY P GIVING N-DIV-P.
IF DIVISIBLE,
MOVE NEXT-N TO N,
ADD 1 TO F-COUNT,
GO TO ODD-FACTOR-LOOP.
MULTIPLY F-COUNT BY TOTAL.</lang>
{{out}}
{{out}}
<pre> 1 2 2 3 2 4 2 4 3 4 2 6 2 4 4 5 2 6 2 6
<pre> 1 2 2 3 2 4 2 4 3 4 2 6 2 4 4 5 2 6 2 6
Line 456: Line 530:
2 4 6 7 4 8 2 6 4 8 2 12 2 4 6 6 4 8 2 10
2 4 6 7 4 8 2 6 4 8 2 12 2 4 6 6 4 8 2 10
5 4 2 12 4 4 4 8 2 12 4 6 4 4 4 12 2 6 6 9</pre>
5 4 2 12 4 4 4 8 2 12 4 6 4 4 4 12 2 6 6 9</pre>

=={{header|D}}==
=={{header|D}}==
{{trans|C++}}
{{trans|C++}}