-
Notifications
You must be signed in to change notification settings - Fork 0
/
03-loops.cob
64 lines (50 loc) · 1.8 KB
/
03-loops.cob
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
IDENTIFICATION DIVISION.
PROGRAM-ID. Loops.
****************************
DATA DIVISION.
WORKING-STORAGE SECTION.
01 n PIC 9999 USAGE BINARY.
01 fac PIC 9(9) USAGE BINARY.
01 x PIC 9(9) USAGE BINARY.
01 i PIC 9999 USAGE BINARY.
01 j PIC 9999 USAGE BINARY.
****************************
PROCEDURE DIVISION.
* Compute n! (factorial of n)
DISPLAY "---".
DISPLAY "Enter non-negative integer n = ". ACCEPT n.
DISPLAY n "! = "
MOVE 1 TO fac.
PERFORM n TIMES
COMPUTE fac = fac * n
COMPUTE n = n - 1
END-PERFORM.
DISPLAY fac.
* Alternative: Compute n! (factorial of n)
DISPLAY "---".
DISPLAY "Enter non-negative integer n = ". ACCEPT n.
DISPLAY n "! = "
MOVE 1 TO fac.
PERFORM TEST AFTER VARYING i FROM 1 BY 1 UNTIL i = n
COMPUTE fac = fac * i
END-PERFORM.
DISPLAY fac.
* Compute Collatz sequence until we run into cycle 4, 2, 1.
DISPLAY "---".
DISPLAY "Enter positive integer x = ". ACCEPT x.
DISPLAY "Collatz sequence for x = " x.
IF x = 0 THEN
DISPLAY "... x should be > 0."
STOP RUN
END-IF.
PERFORM VARYING j FROM 0 BY 1 UNTIL x = 1
DISPLAY "x(" j ") = " x
IF FUNCTION MOD(x,2) = 0 THEN
COMPUTE x = x/2
ELSE
COMPUTE x = 3*x + 1
END-IF
END-PERFORM.
DISPLAY "x(" j ") = " x " -> cycle 4, 2, 1 reached in "
j " steps".
STOP RUN.