90년대 정보처리기능사 및 알고리즘 입문 시 가장 먼저 배우는 기초 중의 기초임. 변수에 숫자를 1씩 누적하여 더하는 반복문의 기본 원리를 코볼 코드로 구현해 본다.
🟪 1. 누적용 변수와 인덱스 설계 (DATA DIVISION)
1부터 100까지 증가할 카운터 변수와, 값이 누적되어 저장될 합계 변수를 선언함. 대장 격인 01 레벨은 A영역(8칸)에, 하위 변수 05는 B영역(12칸)에 배치한다.
cobol code
12345678901234567890123456789012345678901234567890123456789012345678901234567890
DATA DIVISION.
WORKING-STORAGE SECTION.
01 LOOP-VARIABLES.
* -------------------------------------------------------------
* [카운터 변수] 1부터 100까지 1씩 증가할 인덱스 변수 선언 (B영역 시작)
* -------------------------------------------------------------
05 CNT-IDX PIC 9(03) VALUE 1.
* -------------------------------------------------------------
* [누적 합계 변수] 1부터 100까지 합산하면 5050이므로 4자리 공간 확보
* -------------------------------------------------------------
05 SUM-TOTAL PIC 9(04) VALUE ZERO.
🟩 2. PERFORM UNTIL을 이용한 누적 연산 (PROCEDURE DIVISION)
인덱스가 100을 넘어설 때까지 루프를 돌며 계속 더해주는 영역임. 문단의 이정표는 A영역(8칸)에 적고, 실질적으로 일하는 제어 명령어들은 무조건 B영역(12칸) 안쪽에서 코딩해야 한다.
cobol code
12345678901234567890123456789012345678901234567890123456789012345678901234567890
PROCEDURE DIVISION.
MAIN-LOGIC SECTION.
A000-START.
DISPLAY "--- 1 TO 100 SUM PROCESS START ---".
* -------------------------------------------------------------
* [반복 실행] CNT-IDX가 100보다 커질 때까지(101이 되는 순간 탈출) 루프 작동
* -------------------------------------------------------------
PERFORM UNTIL CNT-IDX > 100
* [누적 계산] 기존 합계 금액에 현재 인덱스 숫자를 누적하여 더함
ADD CNT-IDX TO SUM-TOTAL
* [인덱스 증가] 다음 회전을 위해 인덱스 번호를 1 증가시킴
ADD 1 TO CNT-IDX
END-PERFORM.
* -------------------------------------------------------------
* [결과 출력] 100까지 모두 더해진 최종 합계 값을 화면에 표출함
* -------------------------------------------------------------
DISPLAY "1 FROM 100 TOTAL SUM RESULT : " SUM-TOTAL.
* -> 정상 구동 시 화면에 전설의 숫자 '5050'이 출력됨.
STOP RUN.
💡 [실무 팁] 코볼 누적 연산 시 초깃값(VALUE ZERO) 설정의 중요성
타 언어(C, Java 등)도 마찬가지이지만, 코볼은 특히 누적 합계를 구하는 변수(SUM-TOTAL)의 초기화 작업이 절대적임.
- 초깃값(VALUE ZERO)을 누설한 경우의 대참사
- 05 SUM-TOTAL PIC 9(04). 처럼 뒤에 초기화 구문을 생략하면, 메모리에 할당될 때 이전에 다른 프로그램이 쓰다 버린 쓰레기 값(Garbage Data)이나 공백(Space)이 그대로 남아있게 됨.
- 이 상태에서 ADD CNT-IDX TO SUM-TOTAL 연산을 시도하는 순간, 숫자가 아닌 데이터와 더하기를 했다고 컴파일러가 판단하여 시스템이 즉시 전송 오류(SOC7 / Data Exception)를 일으키며 다운됨.
- 따라서 무언가를 누적해서 담을 변수 뒤에는 반드시 VALUE ZERO 또는 로직 시작 전에 INITIALIZE 구문을 통해 메모리를 깨끗하게 청소해 두는 것이 코볼 프로그래밍의 철칙이다.
'프로그래밍 > RM-COBOL' 카테고리의 다른 글
| [COBOL 기초] 알고리즘 3편: 소수 판별 및 약수 구하기 COBOL code (0) | 2026.06.22 |
|---|---|
| [COBOL 기초] 알고리즘 2편: 피보나치 수열과 팩토리얼 계산 COBOL code (0) | 2026.06.22 |
| [COBOL 기초] 종합 프로젝트: 실전 성적 시스템 구축으로 마스터하는 COBOL code (0) | 2026.06.22 |
| [COBOL 기초] 특수 제어문(STRING, EVALUATE)으로 가독성을 높이는 COBOL code 작성법 (0) | 2026.06.22 |
| [COBOL 기초] 서브 프로그램 호출(CALL ~ USING)과 데이터 연동 COBOL code 작성법 (0) | 2026.06.22 |