이전 편에서 구한 평균 점수 데이터를 바탕으로, 특정 기준 점수를 넘겼을 때 합격(PASS) 또는 불합격(FAIL)을 판별하는 조건문 제어 로직을 알아본다.
🟪 1. 조건 판별용 문자 변수 추가 (DATA DIVISION)
판별된 결과 문자열("PASS" 또는 "FAIL")을 담아두기 위해 4바이트 크기의 문자형 변수(PIC X(04))를 추가로 선언해 준다.
cobol code
12345678901234567890123456789012345678901234567890123456789012345678901234567890
DATA DIVISION.
WORKING-STORAGE SECTION.
01 SCORE-RECORDS.
05 KOR-SCORE PIC 9(03) VALUE 090.
05 ENG-SCORE PIC 9(03) VALUE 085.
05 MAT-SCORE PIC 9(03) VALUE 095.
05 TOTAL-SUM PIC 9(04) VALUE ZERO.
05 AVG-RESULT PIC 9(03)V99 VALUE ZERO.
* -------------------------------------------------------------
* [결과 변수 추가] 합격/불합격 문자열을 저장할 4바이트 공간 선언
* -------------------------------------------------------------
05 PASS-FAIL PIC X(04) VALUE SPACES.
01 PRINT-RECORDS.
05 AVG-PRINT PIC ZZ9.99.
🟩 2. IF 조건문을 활용한 합격 판별 (PROCEDURE DIVISION)
평균이 60점 이상이면 "PASS", 60점 미만이면 "FAIL"을 결과 변수에 넣는 조건문 영역임. 조건문(IF)과 문장 종료자(END-IF)는 무조건 B영역(12칸) 안쪽에서 수행되어야 한다.
cobol code
12345678901234567890123456789012345678901234567890123456789012345678901234567890
PROCEDURE DIVISION.
MAIN-LOGIC SECTION.
A000-START.
* [기본 연산] 총점과 평균 계산 수행
COMPUTE TOTAL-SUM = KOR-SCORE + ENG-SCORE + MAT-SCORE.
COMPUTE AVG-RESULT = TOTAL-SUM / 3.
MOVE AVG-CALC TO AVG-PRINT.
* -------------------------------------------------------------
* [COBOL code 조건문 구조] IF ~ ELSE ~ END-IF 제어 흐름
* -------------------------------------------------------------
IF AVG-RESULT GREATER THAN OR EQUAL TO 60.00
MOVE "PASS" TO PASS-FAIL
ELSE
MOVE "FAIL" TO PASS-FAIL
END-IF.
* -> GREATER THAN OR EQUAL TO 대신 기호(>=)를 사용해도 무방함.
* -> 옛날 코볼과 달리 현대 코볼은 명시적 종료자 END-IF를 쓰는 것이 안전함.
* -------------------------------------------------------------
* [화면 출력] 조건문 판별 결과 출력
* -------------------------------------------------------------
DISPLAY "--- FINAL REPORT ---".
DISPLAY "AVERAGE : " AVG-PRINT.
DISPLAY "RESULT : " PASS-FAIL.
STOP RUN.
💡 [실무 팁] 코볼 조건문 작성 시 마침표(.) 조심하기
타 프로그래밍 언어와 달리 코볼 조건문 내부에서 마침표(.)를 잘못 찍으면 치명적인 논리 오류가 발생함.
- 잘못된 예시 (문장 중간에 마침표를 찍는 경우)
cobol code
IF AVG-RESULT >= 60.00 MOVE "PASS" TO PASS-FAIL. <-- 여기에 마침표를 찍어버림! ELSE MOVE "FAIL" TO PASS-FAIL END-IF. - 문제점 분석
- 코볼 컴파일러는 문장 중간에 마침표(.)를 만나면 IF 조건문 전체가 거기서 완전히 끝난 것으로 인식함.
- 따라서 뒤에 오는 ELSE와 END-IF 구문을 조건문 짝꿍이 아닌 독단적인 명령어로 오해하여 구문 에러(Syntax Error)를 발생시킴.
- 조건문 내부의 실행 명령줄 끝에는 마침표를 절대 찍지 말고, END-IF가 완전히 끝나는 맨 마지막에만 마침표를 딱 한 번 찍어주는 것이 안전함.
'프로그래밍 > RM-COBOL' 카테고리의 다른 글
| [COBOL 기초] 파일 입출력(READ/WRITE)으로 텍스트 파일 제어하는 COBOL code 작성법 (0) | 2026.06.22 |
|---|---|
| [COBOL 기초] 반복문(PERFORM UNTIL)으로 대량 데이터 처리하는 COBOL code 작성법 (0) | 2026.06.22 |
| [COBOL 기초] 소수점 편집 마스크(PIC Z, .)와 COBOL code 변환 출력법 (0) | 2026.06.22 |
| [COBOL 기초] 국영수 총점/평균 프로그램 실습: PIC 999와 9(03) 완벽 비교 (0) | 2026.06.22 |
| [COBOL 기초] 코볼 디비전과 섹션 쪼개기: 1~80칸 칼럼 작성 사례 총정리 (0) | 2026.06.22 |