95 lines
2.5 KiB
Plaintext
95 lines
2.5 KiB
Plaintext
******************************************************************
|
|
* Author: Bryan Flood
|
|
* Date: 25/10/2018
|
|
* Purpose: Compute Fibonacci Numbers
|
|
* Tectonics: cobc
|
|
******************************************************************
|
|
IDENTIFICATION DIVISION.
|
|
PROGRAM-ID. FIB.
|
|
DATA DIVISION.
|
|
FILE SECTION.
|
|
WORKING-STORAGE SECTION.
|
|
01 N0 BINARY-C-LONG VALUE 0.
|
|
01 N1 BINARY-C-LONG VALUE 1.
|
|
01 SWAP BINARY-C-LONG VALUE 1.
|
|
01 RESULT PIC Z(20)9.
|
|
01 I BINARY-C-LONG VALUE 0.
|
|
01 I-MAX BINARY-C-LONG VALUE 0.
|
|
01 LARGEST-N BINARY-C-LONG VALUE 92.
|
|
|
|
PROCEDURE DIVISION.
|
|
*> THIS IS WHERE THE LABELS GET CALLED
|
|
PERFORM MAIN
|
|
PERFORM ENDFIB
|
|
GOBACK.
|
|
|
|
*> THIS ACCEPTS INPUT AND DETERMINES THE OUTPUT USING A EVAL STMT
|
|
MAIN.
|
|
DISPLAY "ENTER N TO GENERATE THE FIBONACCI SEQUENCE"
|
|
ACCEPT I-MAX.
|
|
|
|
EVALUATE TRUE
|
|
WHEN I-MAX > LARGEST-N
|
|
PERFORM INVALIDN
|
|
|
|
WHEN I-MAX > 2
|
|
PERFORM CASEGREATERTHAN2
|
|
|
|
WHEN I-MAX = 2
|
|
PERFORM CASE2
|
|
|
|
WHEN I-MAX = 1
|
|
PERFORM CASE1
|
|
|
|
WHEN I-MAX = 0
|
|
PERFORM CASE0
|
|
|
|
WHEN OTHER
|
|
PERFORM INVALIDN
|
|
|
|
END-EVALUATE.
|
|
|
|
STOP RUN.
|
|
|
|
|
|
|
|
*> THE CASE FOR WHEN N = 0
|
|
CASE0.
|
|
MOVE N0 TO RESULT.
|
|
DISPLAY RESULT.
|
|
|
|
*> THE CASE FOR WHEN N = 1
|
|
CASE1.
|
|
PERFORM CASE0
|
|
MOVE N1 TO RESULT.
|
|
DISPLAY RESULT.
|
|
|
|
*> THE CASE FOR WHEN N = 2
|
|
CASE2.
|
|
PERFORM CASE1
|
|
MOVE N1 TO RESULT.
|
|
DISPLAY RESULT.
|
|
|
|
*> THE CASE FOR WHEN N > 2
|
|
CASEGREATERTHAN2.
|
|
PERFORM CASE1
|
|
PERFORM VARYING I FROM 1 BY 1 UNTIL I = I-MAX
|
|
ADD N0 TO N1 GIVING SWAP
|
|
MOVE N1 TO N0
|
|
MOVE SWAP TO N1
|
|
MOVE SWAP TO RESULT
|
|
DISPLAY RESULT
|
|
END-PERFORM.
|
|
|
|
*> PROVIDE ERROR FOR INVALID INPUT
|
|
INVALIDN.
|
|
DISPLAY 'INVALID N VALUE. THE PROGRAM WILL NOW END'.
|
|
|
|
*> END THE PROGRAM WITH A MESSAGE
|
|
ENDFIB.
|
|
DISPLAY "THE PROGRAM HAS COMPLETED AND WILL NOW END".
|
|
|
|
END PROGRAM FIB.
|
|
|
|
*> From https://github.com/KnowledgePending/COBOL-Fibonacci-Sequence/blob/master/fib.cbl
|