Skip to content

Instantly share code, notes, and snippets.

@juliarose
Last active April 16, 2024 17:55
Show Gist options
  • Save juliarose/0a3f47de9f57c5e01e55245a50621b1c to your computer and use it in GitHub Desktop.
Save juliarose/0a3f47de9f57c5e01e55245a50621b1c to your computer and use it in GitHub Desktop.
Storing different variables and performing operations in COBOL.
000100*Condensed from 01-06 https://www.youtube.com/watch?v=m0HfCx1wg1g
000200*AAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBIIIIIIII
000300 IDENTIFICATION DIVISION.
000400 PROGRAM-ID. hello.
000500 AUTHOR. JULIA.
000600 DATE-WRITTEN. 2024-04-16.
000700 DATE-COMPILED. 2024-04-16.
000800 REMARKS. This is a pretty good COBOL program.
000900*
001000 ENVIRONMENT DIVISION.
001100 CONFIGURATION SECTION.
001200 SOURCE-COMPUTER. Ubuntu_Linux_x64_20_04_6_LTS.
001300 OBJECT-COMPUTER. Ubuntu_Linux_x64_20_04_6_LTS.
001400 INPUT-OUTPUT SECTION.
001500 FILE-CONTROL.
001600 I-O-CONTROL.
001700*
001800 DATA DIVISION.
001900 FILE SECTION.
002000 WORKING-STORAGE SECTION.
002100 78 MONTHSINYEAR VALUE 12.
002200 78 NUMROWS VALUE 10.
002300 78 NUMCOLS VALUE 10.
002400
002500 77 WS_Counter PIC 9(4) VALUE 0.
002600 77 Salary PIC S9(5).
002700 77 TempMonth PIC 99.
002800 77 TempYear PIC 9999.
002900 77 BinaryVar1 PIC 9(4) USAGE IS BINARY.
003000 77 CompVar PIC S9(5) USAGE IS COMP.
003100*COMP-1 is a single precision floating point number.
003200 77 Comp1Var USAGE IS COMP-1.
003300*COMP-2 is a double precision floating point number.
003400 77 Comp2Var USAGE IS COMP-2.
003500*Each 4 bits contains a decimal number 0-9, meaning a single
003600*byte can store two single-digit numbers.
003700 77 PDecimalVar PIC 9(4) USAGE IS PACKED-DECIMAL.
003800*DISPLAY
003900 77 DisplayVar PIC 9(4) USAGE IS DISPLAY.
004000*A table of 10 single precision floating point numbers.
004100 77 FloatArray OCCURS 10 TIMES
004200 INDEXED BY FA_INDEX USAGE IS COMP-1.
004300 77 FloatArrayVSize PIC 9(2).
004400 77 FloatArrayV OCCURS 1 TO 99 TIMES
004500 DEPENDING ON FloatArrayVSize
004600 INDEXED BY FAV_INDEX USAGE IS COMP-1.
004700 01 EmployeeData.
004800 05 EmployeeName.
004900 10 FirstName PIC X(18).
005000 10 LastName PIC X(32).
005100 10 MiddleInitial PIC A.
005200 05 EmployeeAddress.
005300 10 HouseNumber PIC ZZZZ9 VALUE 0.
005400 10 Street PIC X(24).
005500 10 ZipCode.
005600 15 ZipCodeFirst PIC 9(5) VALUE 0.
005700 15 ZipCodeSecond PIC 9(4) VALUE 0.
005800 05 EmployeePayInfo.
005900 10 HourlyRate PIC 999v99 VALUE 0.0.
006000 05 EmployeeDOB.
006100 10 BirthYear PIC 9999 VALUE 0.
006200 10 PIC X VALUE "/".
006300 10 BirthMonth PIC 99 VALUE 0.
006400 10 PIC X VALUE "/".
006500 10 BirthDay PIC 99 VALUE 0.
006600 05 Married PIC X.
006700 88 EmployeeMarried VALUE 'Y', 'y'.
006800 88 EmployeeSingle VALUE 'N', 'n'.
006900 01 Customer OCCURS 3 TIMES.
007000 05 FullName PIC X(50).
007100 05 Age PIC 9(3).
007200
007300 01 Array2D.
007400 05 Array2DRow OCCURS NUMROWS TIMES
007500 INDEXED BY ARRAY2D_ROW_INDEX.
007600 10 Array2DCol OCCURS NUMCOLS TIMES
007700 INDEXED BY ARRAY2D_COL_INDEX
007800 PIC 9(5) USAGE IS BINARY.
007900 LOCAL-STORAGE SECTION.
008000*Local storage is re-allocated each time a program is called.
008100 77 LS_Counter PIC 9(4) VALUE 0.
008200 77 LocalVar1 PIC 9(4).
008300 77 LocalVar2 PIC 9(4).
008400 LINKAGE SECTION.
008500* REPORT SECTION.
008600 SCREEN SECTION.
008700*
008800 PROCEDURE DIVISION.
008900 PERFORM VARYING ARRAY2D_ROW_INDEX
009000 FROM 1 BY 1
009100 UNTIL ARRAY2D_ROW_INDEX > NUMROWS
009200 PERFORM VARYING ARRAY2D_COL_INDEX
009300 FROM 1 BY 1
009400 UNTIL ARRAY2D_COL_INDEX > NUMCOLS
009500 COMPUTE Array2DCol(
009600 ARRAY2D_ROW_INDEX,
009700 ARRAY2D_COL_INDEX
009800 ) = ARRAY2D_ROW_INDEX * ARRAY2D_COL_INDEX
009900 DISPLAY
010000 ARRAY2D_ROW_INDEX, " * ",
010100 ARRAY2D_COL_INDEX, " = ",
010200 Array2DCol(
010300 ARRAY2D_ROW_INDEX,
010400 ARRAY2D_COL_INDEX
010500 )
010600 END-PERFORM
010700 END-PERFORM.
010800*Tables (arrays) begin at 1 in COBOL.
010900 MOVE 1 TO WS_Counter.
011000 PERFORM 3 TIMES
011100 DISPLAY "Name? (", WS_Counter, " of 3) ",
011200 WITH NO ADVANCING
011300 ACCEPT FullName in Customer(WS_Counter)
011400 MOVE 30 TO Age in Customer(WS_Counter)
011500 ADD 1 TO WS_Counter
011600 END-PERFORM.
011700 MOVE 1 TO WS_Counter.
011800 PERFORM 3 TIMES
011900 DISPLAY FullName in Customer(WS_Counter)
012000 ADD 1 TO WS_Counter
012100 END-PERFORM.
012200 MOVE "Julia" TO FirstName.
012300 MOVE 'y' to Married.
012400 DISPLAY "Length of EmployeeName: ", LENGTH OF, EmployeeName.
012500 if EmployeeMarried
012600 DISPLAY EmployeeName, " is married."
012700 else
012800 DISPLAY EmployeeName, " is single."
012900 end-if.
013000 PERFORM VARYING FA_INDEX FROM 1 BY 1 UNTIL FA_INDEX > 10
013100 MOVE FA_INDEX TO FloatArray(FA_INDEX)
013200 END-PERFORM.
013300 DISPLAY "How large of an array? " WITH NO ADVANCING.
013400 ACCEPT FloatArrayVSize.
013500 PERFORM VARYING FAV_INDEX FROM 1 BY 1
013600 UNTIL FAV_INDEX > FloatArrayVSize
013700 MOVE FAV_INDEX TO FloatArrayV(FAV_INDEX)
013800 DISPLAY FloatArrayV(FAV_INDEX)
013900 END-PERFORM.
014000 STOP RUN.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment