Files
Basalt2/node_modules/shiki/samples/cobol.sample
Robert Jelic 31787b0e9b Fix
2025-02-16 18:04:24 +01:00

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