# 일차원 배열 정의
DATA DIVISION.
.
.
01 BaeYul.
03 A PIC 99 OCCURS 5 TIMES.
.
.
01 BaeYul.
03 A PIC 99 OCCURS 5 TIMES.
01 MY-ARRAY.
05 ELEMENT-1 PIC X(10).
05 ELEMENT-2 PIC X(10).
05 ELEMENT-3 PIC X(10).
MOVE 'Value 1' TO ELEMENT-1
MOVE 'Value 2' TO ELEMENT-2
MOVE 'Value 3' TO ELEMENT-3
DISPLAY ELEMENT-1
DISPLAY ELEMENT-2
DISPLAY ELEMENT-3
// 화면 표시 결과
Value 1
Value 2
Value 3
IDENTIFICATION DIVISION.
PROGRAM-ID. 08_ARRAY.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 BaeYul.
03 A PIC 99 OCCURS 5.
01 I PIC 9 VALUE 1.
PROCEDURE DIVISION.
SiJak-P.
MOVE 1234567890 TO BaeYul
DISPLAY 'Values after MOVE:'
PERFORM DISPLAY-A-VALUES
DISPLAY '-------------------'
MOVE 12345 TO BaeYul
DISPLAY 'Values after another MOVE:'
PERFORM DISPLAY-A-VALUES
DISPLAY '-------------------'
STOP RUN.
DISPLAY-A-VALUES.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 5
DISPLAY 'A(' I ') : ' A(I)
END-PERFORM.
[결과]
*** 1234567890 할당
Values after MOVE:
A(1) : 12
A(2) : 34
A(3) : 56
A(4) : 78
A(5) : 90 // 사이좋게 두 자리씩 다 받았음
-------------------
*** 12345 할당
Values after another MOVE:
A(1) : 12
A(2) : 34
A(3) : 5
A(4) : // 두 자리씩 주고 나머지는 할당 안 됨
A(5) : // 두 자리씩 주고 나머지는 할당 안 됨
-------------------
IDENTIFICATION DIVISION.
PROGRAM-ID. 09_ARRAY.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 BaeYul.
03 A PIC 99 OCCURS 5.
77 I PIC 99.
77 Hab PIC 999 VALUE 0.
PROCEDURE DIVISION.
SiJak-P.
MOVE 1 TO A(1)
MOVE 2 TO A(2)
MOVE 3 TO A(3)
MOVE 4 TO A(4)
MOVE 5 TO A(5)
DISPLAY "양의 정수 5개.....?"
PERFORM ChulRyuk VARYING I FROM 5 BY -1 UNTIL I < 1.
DISPLAY '합계 : ' Hab.
STOP RUN.
ChulRyuk.
DISPLAY A(I).
ADD A(I) TO Hab.
[결과]
양의 정수 5개.....?
05
04
03
02
01
합계 : 015
IDENTIFICATION DIVISION.
PROGRAM-ID. 10_2DARRAY.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 BaeYul.
03 AA OCCURS 3 TIMES.
04 A PIC 99 OCCURS 4. *> 2차원 배열을 정의
77 I PIC 9.
77 J PIC 9.
PROCEDURE DIVISION.
SiJak.
PERFORM SooRok. *> SooRok 프로시저 호출 (2차원 배열 초기화)
PERFORM AA-Pyosi VARYING I FROM 1 BY 1 UNTIL I > 3. *> AA 배열 출력
PERFORM Keut. *> Keut 프로시저 호출 (최종 출력)
SooRok.
MOVE 1 TO I *> 첫 번째 행으로 초기화
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 3
MOVE 1 TO J *> 첫 번째 열로 초기화
PERFORM VARYING J FROM 1 BY 1 UNTIL J > 4
MULTIPLY I BY J GIVING A(I, J) *> 각 요소에 I와 J를 곱하여 할당
END-PERFORM
END-PERFORM.
AA-Pyosi.
DISPLAY ' '.
DISPLAY 'AA (' I ') : ' AA(I). *> AA 배열 출력
PERFORM A-Pyosi VARYING J FROM 1 BY 1 UNTIL J > 4. *> A 배열 출력
A-Pyosi.
DISPLAY 'A (' I ', ' J ') : ' A(I, J). *> A 배열 출력
Keut.
MOVE 123 TO AA(1). *> AA 배열의 첫 번째 요소에 값 할당
DISPLAY ' '.
DISPLAY 'BaeYul : ' BaeYul. *> BaeYul 출력
STOP RUN. *> 프로그램 종료
[결과]
AA (1) : 01020304
A (1, 1) : 01
A (1, 2) : 02
A (1, 3) : 03
A (1, 4) : 04
AA (2) : 02040608
A (2, 1) : 02
A (2, 2) : 04
A (2, 3) : 06
A (2, 4) : 08
AA (3) : 03060912
A (3, 1) : 03
A (3, 2) : 06
A (3, 3) : 09
A (3, 4) : 12
BaeYul : 123 0204060803060912
IDENTIFICATION DIVISION.
PROGRAM-ID. 11_3DARRAY.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 BaeYul PIC X(500). *> 결과값을 저장할 변수
01 AAA.
05 AA OCCURS 3. *> 면
10 A OCCURS 3. *> 행
15 X OCCURS 4 PIC 99. *> 열
77 I PIC 9. *> 반복문을 위한 인덱스 변수
77 J PIC 9.
77 K PIC 9.
PROCEDURE DIVISION.
SiJak.
PERFORM SooRok VARYING I FROM 1 BY 1 UNTIL I > 3
AFTER J FROM 1 BY 1 UNTIL J > 3
AFTER K FROM 1 BY 1 UNTIL K > 4.
PERFORM PyoSi VARYING I FROM 1 BY 1 UNTIL I > 3
AFTER J FROM 1 BY 1 UNTIL J > 3
AFTER K FROM 1 BY 1 UNTIL K > 4.
PERFORM Keut.
SooRok.
COMPUTE X(I, J, K) = I * J * K.
MOVE FUNCTION NUMVAL (X(I, J, K)) TO X(I, J, K). *> 숫자 값을 문자열로 변환하여 다시 저장
PyoSi.
DISPLAY 'A (' I ', ' J ', ' K ') : ' X(I, J, K).
Keut.
STRING
X(1, 1, 1) DELIMITED BY SPACE
X(1, 1, 2) DELIMITED BY SPACE
X(1, 1, 3) DELIMITED BY SPACE
X(1, 1, 4) DELIMITED BY SPACE
X(1, 2, 1) DELIMITED BY SPACE
X(1, 2, 2) DELIMITED BY SPACE
X(1, 2, 3) DELIMITED BY SPACE
X(1, 2, 4) DELIMITED BY SPACE
X(1, 3, 1) DELIMITED BY SPACE
X(1, 3, 2) DELIMITED BY SPACE
X(1, 3, 3) DELIMITED BY SPACE
X(1, 3, 4) DELIMITED BY SPACE
X(2, 1, 1) DELIMITED BY SPACE
X(2, 1, 2) DELIMITED BY SPACE
X(2, 1, 3) DELIMITED BY SPACE
X(2, 1, 4) DELIMITED BY SPACE
X(2, 2, 1) DELIMITED BY SPACE
X(2, 2, 2) DELIMITED BY SPACE
X(2, 2, 3) DELIMITED BY SPACE
X(2, 2, 4) DELIMITED BY SPACE
X(2, 3, 1) DELIMITED BY SPACE
X(2, 3, 2) DELIMITED BY SPACE
X(2, 3, 3) DELIMITED BY SPACE
X(2, 3, 4) DELIMITED BY SPACE
X(3, 1, 1) DELIMITED BY SPACE
X(3, 1, 2) DELIMITED BY SPACE
X(3, 1, 3) DELIMITED BY SPACE
X(3, 1, 4) DELIMITED BY SPACE
X(3, 2, 1) DELIMITED BY SPACE
X(3, 2, 2) DELIMITED BY SPACE
X(3, 2, 3) DELIMITED BY SPACE
X(3, 2, 4) DELIMITED BY SPACE
X(3, 3, 1) DELIMITED BY SPACE
X(3, 3, 2) DELIMITED BY SPACE
X(3, 3, 3) DELIMITED BY SPACE
X(3, 3, 4) DELIMITED BY SPACE
INTO BaeYul
DISPLAY ' *** SUMMING UP *** '
DISPLAY 'BaeYul : ' BaeYul
STOP RUN.
[주석]
IDENTIFICATION DIVISION.
PROGRAM-ID. 11_3DARRAY.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 BaeYul PIC X(500). *> 결과값을 저장할 변수
* 3차원 배열을 위한 선언
01 AAA.
05 AA OCCURS 3. *> 면
10 A OCCURS 3. *> 행
15 X OCCURS 4 PIC 99. *> 열
77 I PIC 9. *> 반복문을 위한 인덱스 변수
77 J PIC 9.
77 K PIC 9.
PROCEDURE DIVISION.
* SiJak 섹션: 3차원 배열 초기화를 위한 반복문 수행
SiJak.
PERFORM SooRok VARYING I FROM 1 BY 1 UNTIL I > 3
AFTER J FROM 1 BY 1 UNTIL J > 3
AFTER K FROM 1 BY 1 UNTIL K > 4.
* SooRok 섹션: 3차원 배열 요소 계산 및 숫자를 문자열로 변환하여 저장
SooRok.
COMPUTE X(I, J, K) = I * J * K.
MOVE FUNCTION NUMVAL (X(I, J, K)) TO X(I, J, K).
* PyoSi 섹션: 3차원 배열 요소를 화면에 출력
PyoSi.
DISPLAY 'A (' I ', ' J ', ' K ') : ' X(I, J, K).
* Keut 섹션: 3차원 배열 요소를 문자열로 합친 후 결과를 출력
Keut.
STRING
X(1, 1, 1) DELIMITED BY SPACE
X(1, 1, 2) DELIMITED BY SPACE
X(1, 1, 3) DELIMITED BY SPACE
X(1, 1, 4) DELIMITED BY SPACE
X(1, 2, 1) DELIMITED BY SPACE
X(1, 2, 2) DELIMITED BY SPACE
X(1, 2, 3) DELIMITED BY SPACE
X(1, 2, 4) DELIMITED BY SPACE
X(1, 3, 1) DELIMITED BY SPACE
X(1, 3, 2) DELIMITED BY SPACE
X(1, 3, 3) DELIMITED BY SPACE
X(1, 3, 4) DELIMITED BY SPACE
X(2, 1, 1) DELIMITED BY SPACE
X(2, 1, 2) DELIMITED BY SPACE
X(2, 1, 3) DELIMITED BY SPACE
X(2, 1, 4) DELIMITED BY SPACE
X(2, 2, 1) DELIMITED BY SPACE
X(2, 2, 2) DELIMITED BY SPACE
X(2, 2, 3) DELIMITED BY SPACE
X(2, 2, 4) DELIMITED BY SPACE
X(2, 3, 1) DELIMITED BY SPACE
X(2, 3, 2) DELIMITED BY SPACE
X(2, 3, 3) DELIMITED BY SPACE
X(2, 3, 4) DELIMITED BY SPACE
X(3, 1, 1) DELIMITED BY SPACE
X(3, 1, 2) DELIMITED BY SPACE
X(3, 1, 3) DELIMITED BY SPACE
X(3, 1, 4) DELIMITED BY SPACE
X(3, 2, 1) DELIMITED BY SPACE
X(3, 2, 2) DELIMITED BY SPACE
X(3, 2, 3) DELIMITED BY SPACE
X(3, 2, 4) DELIMITED BY SPACE
X(3, 3, 1) DELIMITED BY SPACE
X(3, 3, 2) DELIMITED BY SPACE
X(3, 3, 3) DELIMITED BY SPACE
X(3, 3, 4) DELIMITED BY SPACE
INTO BaeYul
DISPLAY ' *** SUMMING UP *** '
DISPLAY 'BaeYul : ' BaeYul
STOP RUN.
[결과]
A (1, 1, 1) : 01
A (1, 1, 2) : 02
A (1, 1, 3) : 03
A (1, 1, 4) : 04
A (1, 2, 1) : 02
A (1, 2, 2) : 04
A (1, 2, 3) : 06
A (1, 2, 4) : 08
A (1, 3, 1) : 03
A (1, 3, 2) : 06
A (1, 3, 3) : 09
A (1, 3, 4) : 12
A (2, 1, 1) : 02
A (2, 1, 2) : 04
A (2, 1, 3) : 06
A (2, 1, 4) : 08
A (2, 2, 1) : 04
A (2, 2, 2) : 08
A (2, 2, 3) : 12
A (2, 2, 4) : 16
A (2, 3, 1) : 06
A (2, 3, 2) : 12
A (2, 3, 3) : 18
A (2, 3, 4) : 24
A (3, 1, 1) : 03
A (3, 1, 2) : 06
A (3, 1, 3) : 09
A (3, 1, 4) : 12
A (3, 2, 1) : 06
A (3, 2, 2) : 12
A (3, 2, 3) : 18
A (3, 2, 4) : 24
A (3, 3, 1) : 09
A (3, 3, 2) : 18
A (3, 3, 3) : 27
A (3, 3, 4) : 36
*** SUMMING UP ***
BaeYul : 010203040204060803060912020406080408121606121824030609120612182409182736
IDENTIFICATION DIVISION.
PROGRAM-ID. 12_COMPLEXARRAY.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 BaeYul.
03 AA OCCURS 3.
04 A PIC 99 OCCURS 2.
PROCEDURE DIVISION.
DISPLAY BaeYul.
STOP RUN.
[설명]

IDENTIFICATION DIVISION.
PROGRAM-ID. 13_COMPLEXARRAY.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 BaeYul.
03 AA OCCURS 3.
04 A PIC 99 OCCURS 2.
03 BB OCCURS 3.
04 B PIC XXX OCCURS 2.
77 I PIC 9. *> 반복문을 위한 인덱스 변수
77 J PIC 9.
PROCEDURE DIVISION.
SiJak.
PERFORM SooRok VARYING I FROM 1 BY 1 UNTIL I > 3
AFTER J FROM 1 BY 1 UNTIL J > 2.
MOVE 'ABCDEF' TO BB(1). *> BB 배열의 첫 번째 요소에 값 할당
MOVE 'abcdef' TO BB(2). *> BB 배열의 두 번째 요소에 값 할당
MOVE 'UVWXYZ' TO BB(3). *> BB 배열의 세 번째 요소에 값 할당
PERFORM PyoSi VARYING I FROM 1 BY 1 UNTIL I > 3.
PERFORM Keut.
SooRok.
MULTIPLY I BY J GIVING A(I, J). *> A 배열 요소에 값 할당
PyoSi.
DISPLAY A(I, 1) ' ' A(I, 2) ' ' B(I, 1) ' ' B(I, 2). *> A와 B 배열의 일부 요소 출력
Keut.
DISPLAY ' '. *> 빈 줄 출력
DISPLAY 'BaeYul : ' BaeYul. *> BaeYul 변수 값 출력
STOP RUN.
[결과]
01 02 ABC DEF
02 04 abc def
03 06 UVW XYZ
BaeYul : 010202040306ABCDEFabcdefUVWXYZ
*** A 영역 : 010202040306
*** B 영역 : ABCDEFabcdefUVWXYZ

- 계층번호 배열요소명 PIC구 OCCURS n [TIMES] INDEXED BY 명칭1 명칭2....
01 BaeYul
03 A PIC 9(3) OCCURS 5 INDEXED BY SaekIn.
IDENTIFICATION DIVISION.
PROGRAM-ID. IndexedByExample.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 MyArray OCCURS 10 TIMES.
05 ArrayElement PIC 9.
01 IndexCounter PIC 99. *> 반복문 인덱스 변수
01 MyIndex USAGE IS INDEX. *> INDEXED BY 구문에 사용할 인덱스 변수
PROCEDURE DIVISION.
Main-Procedure.
MOVE 1 TO IndexCounter. *> 인덱스 변수 초기화
PERFORM VaryingLoop VARYING IndexCounter FROM 1 BY 1 UNTIL IndexCounter > 10.
DISPLAY 'Array contents:'.
PERFORM DisplayArray VARYING IndexCounter FROM 1 BY 1 UNTIL IndexCounter > 10.
STOP RUN.
VaryingLoop.
MOVE IndexCounter TO MyIndex. *> 현재 인덱스 값을 INDEXED BY 변수에 할당
MOVE IndexCounter TO ArrayElement(MyIndex). *> 배열 요소에 값 할당
DisplayArray.
MOVE IndexCounter TO MyIndex. *> 현재 인덱스 값을 INDEXED BY 변수에 할당
DISPLAY 'Element ' IndexCounter ': ' ArrayElement(MyIndex). *> 배열 요소 출력
[결과]
Array contents:
Element 01: 1
Element 02: 2
Element 03: 3
Element 04: 4
Element 05: 5
Element 06: 6
Element 07: 7
Element 08: 8
Element 09: 9
Element 10: 0
- SET 색인명칭 TO n.
- SET 색인명칭 UP (DOWN) BY n.
IDENTIFICATION DIVISION.
PROGRAM-ID. SetExample.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 IndexCounter PIC 99. *> 반복문 인덱스 변수
PROCEDURE DIVISION.
Main-Procedure.
MOVE 1 TO IndexCounter. *> 인덱스 변수 초기화
PERFORM IncreasingLoop VARYING IndexCounter FROM 1 BY 1 UNTIL IndexCounter > 10.
MOVE 10 TO IndexCounter. *> 인덱스 변수 초기화
PERFORM DecreasingLoop VARYING IndexCounter FROM 10 BY -1 UNTIL IndexCounter < 1.
STOP RUN.
IncreasingLoop.
DISPLAY 'Increasing Loop: Element ' IndexCounter.
SET IndexCounter UP BY 2. *> 인덱스를 2씩 증가시킴
DecreasingLoop.
DISPLAY 'Decreasing Loop: Element ' IndexCounter.
SET IndexCounter DOWN BY 3. *> 인덱스를 3씩 감소시킴
[결과]
Increasing Loop: Element 01
Increasing Loop: Element 04
Increasing Loop: Element 07
Increasing Loop: Element 10
Decreasing Loop: Element 10
Decreasing Loop: Element 06
Decreasing Loop: Element 02
- 계층번호 배열명 PIC구 OCCURS m TO n [TIMES] DEPENDING ON 기억장소
IDENTIFICATION DIVISION.
PROGRAM-ID. DynamicArrayExample.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 ArraySize PIC 99 VALUE 5. *> 배열 크기를 나타내는 변수
01 MyArray OCCURS 0 TO 99 DEPENDING ON ArraySize
PIC 9(5). *> 배열 요소의 PICTURE 정의
01 IndexCounter PIC 99 VALUE 1. *> 반복문 인덱스 변수
PROCEDURE DIVISION.
Main-Procedure.
PERFORM InitializeArray. *> 배열 초기화 수행
MOVE 10 TO ArraySize. *> 배열 크기 변경
PERFORM DisplayArray. *> 변경된 크기로 배열 출력 수행
MOVE 7 TO ArraySize. *> 배열 크기 다시 변경
PERFORM DisplayArray. *> 변경된 크기로 배열 출력 수행
STOP RUN.
InitializeArray.
MOVE 1 TO IndexCounter. *> 반복문 인덱스 초기화
PERFORM VARYING IndexCounter FROM 1 BY 1 UNTIL IndexCounter > ArraySize
MOVE IndexCounter TO MyArray(IndexCounter)
END-PERFORM.
DisplayArray.
DISPLAY '배열 요소:'
PERFORM VARYING IndexCounter FROM 1 BY 1 UNTIL IndexCounter > ArraySize
DISPLAY '인덱스 ' IndexCounter ': ' MyArray(IndexCounter)
END-PERFORM.
[결과]
배열 요소:
인덱스 01: 00001
인덱스 02: 00002
인덱스 03: 00003
인덱스 04: 00004
인덱스 05: 00005
인덱스 06: 00000
인덱스 07: 00000
인덱스 08: 00000
인덱스 09: 00000
인덱스 10: 00000
배열 요소:
인덱스 01: 00001
인덱스 02: 00002
인덱스 03: 00003
인덱스 04: 00004
인덱스 05: 00005
인덱스 06: 00000
인덱스 07: 00000
