| 1 |
****************************************************************** |
| 2 |
* Author: Bryan Flood |
| 3 |
* Date: 25/10/2018 |
| 4 |
* Purpose: Compute Fibonacci Numbers |
| 5 |
* Tectonics: cobc |
| 6 |
****************************************************************** |
| 7 |
IDENTIFICATION DIVISION. |
| 8 |
PROGRAM-ID. FIB. |
| 9 |
DATA DIVISION. |
| 10 |
FILE SECTION. |
| 11 |
WORKING-STORAGE SECTION. |
| 12 |
01 N0 BINARY-C-LONG VALUE 0. |
| 13 |
01 N1 BINARY-C-LONG VALUE 1. |
| 14 |
01 SWAP BINARY-C-LONG VALUE 1. |
| 15 |
01 RESULT PIC Z(20)9. |
| 16 |
01 I BINARY-C-LONG VALUE 0. |
| 17 |
01 I-MAX BINARY-C-LONG VALUE 0. |
| 18 |
01 LARGEST-N BINARY-C-LONG VALUE 92. |
| 19 |
|
| 20 |
PROCEDURE DIVISION. |
| 21 |
*> THIS IS WHERE THE LABELS GET CALLED |
| 22 |
PERFORM MAIN |
| 23 |
PERFORM ENDFIB |
| 24 |
GOBACK. |
| 25 |
|
| 26 |
*> THIS ACCEPTS INPUT AND DETERMINES THE OUTPUT USING A EVAL STMT |
| 27 |
MAIN. |
| 28 |
DISPLAY "ENTER N TO GENERATE THE FIBONACCI SEQUENCE" |
| 29 |
ACCEPT I-MAX. |
| 30 |
|
| 31 |
EVALUATE TRUE |
| 32 |
WHEN I-MAX > LARGEST-N |
| 33 |
PERFORM INVALIDN |
| 34 |
|
| 35 |
WHEN I-MAX > 2 |
| 36 |
PERFORM CASEGREATERTHAN2 |
| 37 |
|
| 38 |
WHEN I-MAX = 2 |
| 39 |
PERFORM CASE2 |
| 40 |
|
| 41 |
WHEN I-MAX = 1 |
| 42 |
PERFORM CASE1 |
| 43 |
|
| 44 |
WHEN I-MAX = 0 |
| 45 |
PERFORM CASE0 |
| 46 |
|
| 47 |
WHEN OTHER |
| 48 |
PERFORM INVALIDN |
| 49 |
|
| 50 |
END-EVALUATE. |
| 51 |
|
| 52 |
STOP RUN. |
| 53 |
|
| 54 |
|
| 55 |
|
| 56 |
*> THE CASE FOR WHEN N = 0 |
| 57 |
CASE0. |
| 58 |
MOVE N0 TO RESULT. |
| 59 |
DISPLAY RESULT. |
| 60 |
|
| 61 |
*> THE CASE FOR WHEN N = 1 |
| 62 |
CASE1. |
| 63 |
PERFORM CASE0 |
| 64 |
MOVE N1 TO RESULT. |
| 65 |
DISPLAY RESULT. |
| 66 |
|
| 67 |
*> THE CASE FOR WHEN N = 2 |
| 68 |
CASE2. |
| 69 |
PERFORM CASE1 |
| 70 |
MOVE N1 TO RESULT. |
| 71 |
DISPLAY RESULT. |
| 72 |
|
| 73 |
*> THE CASE FOR WHEN N > 2 |
| 74 |
CASEGREATERTHAN2. |
| 75 |
PERFORM CASE1 |
| 76 |
PERFORM VARYING I FROM 1 BY 1 UNTIL I = I-MAX |
| 77 |
ADD N0 TO N1 GIVING SWAP |
| 78 |
MOVE N1 TO N0 |
| 79 |
MOVE SWAP TO N1 |
| 80 |
MOVE SWAP TO RESULT |
| 81 |
DISPLAY RESULT |
| 82 |
END-PERFORM. |
| 83 |
|
| 84 |
*> PROVIDE ERROR FOR INVALID INPUT |
| 85 |
INVALIDN. |
| 86 |
DISPLAY 'INVALID N VALUE. THE PROGRAM WILL NOW END'. |
| 87 |
|
| 88 |
*> END THE PROGRAM WITH A MESSAGE |
| 89 |
ENDFIB. |
| 90 |
DISPLAY "THE PROGRAM HAS COMPLETED AND WILL NOW END". |
| 91 |
|
| 92 |
END PROGRAM FIB. |
| 93 |
|
| 94 |
*> From https://github.com/KnowledgePending/COBOL-Fibonacci-Sequence/blob/master/fib.cbl |
| 95 |
|