- PROCEDURE DIVISION 은 COBOL 프로그램 의 데이터 가 처리 되 는 논리 를 표현 하 는 DIVISION 이 며 , 최종 적 으로 처리 되 는 DIVISION 이 다 . 이 DIVISION 에서 는 순서도 에 나타난 흐름 을 처리 명령 으로 기술 하 며 , 앞 의 세 가지 DIVISION 은 PROCEDURE DIVISION 을 위한 준비 이 다 . - PROCEDURE DIVISION 에서 는 프로그래머 가 절 이나 소절 의 이름 을 사용 자 정의 단어 로 정의 하 며 , 이러 한 소절 의 이름 을 A 영역 에 , 데이터 처리 를 위한 동사 는 B 영역 에 기입 한다 . - 이 DIVISION 표현 형식 은 하나 의 문장 을 여러 줄 에 연속 해서 기입 하 거나 , 또는 한 줄 에 기입 하 여도 무방 하 지만 , 문장 끝 에 는 반드시 마침표 를 찍 어야 한다 . 만일 , 마침표 를 찍 지 않 으면 다음 의 마침표 가 나오 는 문장 까지 하나 의 문장 으로 취급 하 기 때문 에 논리 의 흐름 이 달라지 게 된다 . 처 리부 에서 프로그램 의 제어 를 위해 사용 되 는 명령 은 다음 과 같 다 . 1 . ALTER 문 . - ALTER 문 은 이미 결정 된 프로그램 의 진행 방향 을 변경 하 여 실행 하 도록 한다 . ALTER 형식 ALTER procedure - name - 1 TO [ PROCEED TO ] procedure - name - 2 [ procedure - name - 3 TO [ PROCEED TO ] procedure - name - 4 . .. ]- ALTER 로 지정 된 procedure 안 에 는 GO TO 문 하나 만 으로 구성 되 어야 한다 . - TO 앞 의 procedure - name 에 는 GO TO 문 이 있 는 procedure 이름 을 기술 하 고 TO 뒤 의 procedure - name 에 는 GO TO 문 을 만났 을 때 실행 을 옮길 프로 시 져 이름 을 기술 한다 . ALTER 예제 ALTER 100 - RTN TO PROCEED TO A - RTN . ** 설명 : 위 의 예 는 100 - RTN 을 만났 을 때 100 - RTN 에 기술 된 GO TO 문 을 GO TO A - RTN 으로 간주 하 여 A - RTN 으로 실행 을 옮긴다 . 2 . GO TO 문 - 프로그램 의 실행 은 기술 되 어 있 는 명령문 의 순서 대로 실행 하 는 것 이 일반 적 이나 실행 순서 의 방향 을 달리 하 고자 할 때 사용 되 는 명령 이 다 . 프로그램 수행 은 원칙 적 으로 기술 된 명령 의 순서 대로 수행 하 나 때로 는 한 부분 에서 다른 부분 으로 이동 하 여 수행 해야 할 때 가 있 다 . 이 처럼 다른 부분 으로 제어 를 이동 시키 는 명령 이 GO TO 이 다 . 형식 1 GO TO procedure - name 형식 2 GO TO procedure - name - 1 procedure - name - 2 . .. DEPENDING ON identifier - procedure - name : GO TO 명령문 에 의해 프로그램 의 진행 을 지시 하 는 진행 명 으로 , 영문자 나 숫자 로 구성 되 어도 관계없 다 . TO 를 생략 하 고 GO 만 기술 할 수 있 다 . - 주의 : GO TO 문 을 잘 못 사용 하 면 무한 LOOP 에 빠져서 시스템 을 정지 시킬 수 있 다 . - DEPENDING on 구 ⓐ DEPENDING on 구가 기술 되 면 identifier 의 값 에 따라 procedure - name 을 선택 하 여 분기 한다 . ⓑ identifier 값 은 1 , 2 , 3 . .. 의 순 으로 순차 적 으로 부여 되 어야 하 며 identifier 의 값 이 1 이 면 procedure - name - 1 으로 분기 하 고 identifier 의 값 이 2 이 면 procedure - name - 2 로 분기 한다 . ⓒ identifier 의 값 에 해당 하 는 procedure - name 이 없 으면 다음 문장 을 실행 한다 . GO TO 예제 77 KI PIC 9 ( 01 ) . . .. MOVE 1 TO K . READ - RTN . GO 100 - RTN 200 - RTN DEPENDING ON K . DISPLAY " INVALID VALUE K ". 100 - RTN . READ IN - F AT END MOVE 2 TO K . GO TO READ - RTN . 200 - RTN . CLOSE IN - F . STOP RUN . ** 설명 : K 값 이 1 이 면 100 - RTN 으로 분기 하 고 2 이 면 200 - RTN 으로 분기 한다 . 3 . STOP , GOBACK 문 STOP , GOBACK 형식 STOP RUN { identifier - 1 / literal - 1 }. STOP " literal - 2 ". GOBACK . - 프로그램 의 실행 을 완전히 종료 시키 거나 프로그램 수행 시 일시 정지 시키 고자 할 때 사용 하 는 명령 이 다 . - STOP RUN : 프로그램 실행 을 완전히 종료 시키 는 명령 으로 , 프로그램 의 종료 를 컴퓨터 에 지시 하 고자 하 는 위치 에 기술 하 며 , 일반 적 으로 프로그램 의 흐름 의 맨 마지막 에 기술 한다 . - STOP literal : 프로그램 의 실행 을 일시 적 으로 중단 시키 고자 할 때 사용 되 는 명령 으로 , 컴퓨터 가 실행 도중 에 이 명령 을 접하 게 되 면 STOP 다음 에 기술 된 리터럴 이 콘솔 화면 에 나타나 며 실행 을 멈추 게 된다 . 이 경우 오퍼레이터 에 의해 다시 실행 을 계속 시킬 수 있 다 . - STOP literal 지정 시 이 문 을 만나 면 literal 로 지정 된 문자 가 화면 에 표시 되 고 일시 정지 하 며 그 다음 행 에 " Continue ( Y / N ) " 이 란 메시지 가 나타난다 . 이 때 " Y " 를 선택 하 면 프로그램 은 계속 실행 되 고 N 을 선택 하 면 그 지점 에서 프로그램 은 종료 된다 . - GOBACK 문 은 STOP 문 과 같 은 명령 이 며 , DB ( DATA BASE ) 를 사용 하 는 프로그램 에서 사용 되 어야 한다 . 4 . IF 문 - IF 문 은 조건 에 대한 판단 여부 에 따라 프로그램 의 실행 순서 를 바꾸 고자 할 때 사용 되 는 명령문 이 다 . IF condition THEN { statement - 1 / NEXT SENTENCE } [ ELSE ] { statement - 2 . ... / { NEXT SENTERCE . } } [ END - IF . ] - condition : 조건 을 비교 하 고자 하 는 내용 - NEXT SENTENCE : 다음 명령문 으로 실행 을 옮기 라는 내용 으로 IF 명령문 에서 마침표 ( . ) 가 있 는 다음 문장 을 의미 한다 . - ELSE , OTHERWISE 는 ELSE 이전 의 내용 은 조건 이 올바른 경우 에 실행 하 는 명령문 이 며 , 뒤 의 내용 은 조건 을 만족 하 지 못했 을 경우 수행 해야 할 명령문 이 다 . - END - IF 문 은 IF 문 의 마지막 임 을 가리키 는 명령문 으로 사용 안 해도 되 지만 프로그램 의 쉬운 이해 와 여러 개 의 IF 문 을 사용 시 필요 하 다 . ( 1 ) IF 문 ( 크 거나 , 작 거나 같 은 비교 판단 ) <- 대소 관계 를 비교 하 는 조건 형식 IF { identifier - 1 / literal - 1 / 연산 식 - 1 } IS [ NOT ] { GREATER THAN / > LESS THAN / < / EQUAL TO / = / GRATER THAN OR EQUAL TO / >= / LESS THAN OR EQUAL TO / <= } { identifier - 2 / literal - 2 / 연산 식 - 2 } - 두 항목 간 에 대소 조건 을 판단 하 며 관계 연산자 를 사용 한다 . 관계 연산자 좌우 에 는 데이터 항목 , literal , 연산 식 중 하나 가 기술 되 면 NOT 을 사용 하 면 부정 의 뜻 이 된다 . 관계 연산자 와 단어 사이 에 는 하나 이상 의 공백 을 두 어야 한다 . - 비교 를 판단 하 기 위해서 는 관계 연산자 [ =, >, < ] 를 좌우 로 하 여 기억 장소 명 , 수치 , 수식 을 사용 할 수 있 다 . 대소 관계 를 비교 하 는 조건 예제 IF WK - CNT IS GREATER THAN 1000 GO TO END - RTN . IF WK - CNT GREATER 1000 GO TO END - RTN . IF WK - CNT > 1000 GO TO END - RTN . IF WK - CNT > 1000 GO TO END - RTN ELSE NEXT SENTENCE END - IF . ** 설명 : 위 의 네 가지 IF 문 은 모두 같 은 결과 이 다 . ( 2 ) IF 문 ( 수 의 음수 , 양수 비교 하 는 조건 ) 음 . 양수 를 비교 하 는 조건 형식 IF { identifier / 연산 식 } IS [ NOT ] { POSITIVE / NEGATIVE / ZERO } 음 . 양수 를 비교 하 는 조건 예제 IF WK - NUM 01 IS POSITIVE GO TO 100 - RTN . IF ( A - B ) IS NEGATIVE GO TO 200 - RTN . - 판단 하 고자 하 는 기억 장소 나 수식 의 결과 가 양수 , 음수 , 영 ( ZERO ) 인가 를 비교 판단 하 는 내용 이 며 , 음수 인가 를 판단 하 기 위해 사용 되 는 기억 장소 는 양수 , 음수 를 기억 할 수 있 는 PICTURE 로 정의 되 어 있 어야 한다 . ( 3 ) IF 문 ( 데이터 형태 비교 ) - 어떤 데이터 항목 의 값 이 숫자 또는 영문자 인가 를 판단 할 때 사용 하 며 영문자 판 단시 에 는 공백 ( SPACE ) 도 영문자 로 취급 하 여 판단 한다 . 형태 를 비교 하 는 조건 형식 IF identifier IS [ NOT ] { NUMERIC / ALTHABETIC / ALPHABETIC - LOWER / ALPHABETIC - UPPER } - 기억 장소 내 에 기억 되 어 있 는 값 이 숫자 인가 영문자 인가 를 비교 하 기 위해 사용 되 는 형태 로 입력 데이터 의 오류 를 점검 하 는 데 사용 된다 . 이 조건 에 는 identifier 이외 체 lieteral 이나 연산 식 을 기술 할 수 없 다 . ALPHABETIC - LOWER 는 영문자 소문자 인가 를 판단 한다 . ( 4 ) 조건 이름 을 비교 하 는 조건 - DATA DIVISION 에서 레벨 넘버 88 로 정의 한 항목 을 비교 할 때 사용 한다 . 조건 이름 을 비교 하 는 조건 형식 88 condition - name { VALUE IS / VALUE ARE } literal - 1 [ { THROUGH / THRU } literal - 2 ] . .. 조건 이름 을 비교 하 는 조건 예제 01 IN - REC . 03 SCORE PIC 9 ( 03 ) . 88 SCORE - LEVEL 1 VALUE 1 THRU 49 . 88 SCORE - LEVEL 2 VALUE 50 THRU 100 . ... IF SCORE - LEVEL 1 DISPLAY ' SCORE FAIL ! '. ( 5 ) IF 문 ( 복합 논리 조건 비교 ) 복합 논리 비교 하 는 조건 형식 IF condition - 1 [ NOT ] { AND / OR } condition - 2 . .. 복합 논리 비교 하 는 조건 예제 IF NOT ( K > 5 AND K < 10 ) GO TO 100 - RTN . - IF 문 에서 2 개 이상 의 조건 을 비교 판단 하 고자 할 때 , 논리 연산자 인 OR , AND , NOT 를 이용 하 여 구성 되 는 문장 이 다 . OR 는 복합 조건 중 에서 하나 의 조건 만 만족 해도 조건 이 성립 됨 을 의미 하 며 , AND 는 복합 조건 전부 를 만족 해야 조건 이 성립 됨 을 의미 한다 . - AND 는 condition - 1 과 condition - 2 의 조건 이 모두 만족 할 때 전체 의 조건 이 성립 한다 . OR 는 condition - 1 과 condition - 2 의 조건 중 어느 한 조건 만 만족 하 면 전체 의 조건 이 성립 한다 . AND 와 OR 이 여러 번 기술 되 면 사용 한 논리식 이 먼저 처리 되 고 그 다음 OR 를 사용 한 논리식 이 처리 된다 . 이것 을 확실 하 게 구별 하 기 위해서 ( ) 괄호 를 사용 한다 . ( 6 ) 다중 IF 문장 의 표현 IF condition - 1 [ 무조건 명령 - 1 ] IF condition - 2 [ 무조건 명령 - 2 ] IF condition - 3 [ 무조건 명령 - 3 ] ELSE [ 무조건 명령 - a ] ELSE [ 무조건 명령 - b ] ELSE [ 무조건 명령 - c ] IF condition - 1 [ 무조건 명령 - 1 ] IF condition - 2 [ 무조건 명령 - 2 ] IF condition - 3 [ 무조건 명령 - 3 ] ELSE [ 무조건 명령 - a ] END - IF ELSE [ 무조건 명령 - b ] END - IF ELSE [ 무조건 명령 - c ] END - IF . - 하나 의 IF 문장 속 에 여러 개 의 IF 문장 이 속해 있 는 경우 이 며 , 복잡 한 프로그램 이 되 는 원인 이 된다 . END - IF 문장 은 여러 개 의 IF 문 에 대한 명확 한 범위 를 정하 기 위해서 는 필요 하 다 . 5 . PERFORM 문 - PERFORM 명령문 은 GO TO 명령 과 달리 , PERFORM 으로 지시 하 는 단원 명 ( paragraph - name ) 에 포함 되 어 있 는 명령문 을 1 회 이상 반복 수행 하 고 다시 정상 적 인 순서 로 되돌아와 PERFORM 문 의 다음 명령 을 수행 한다 . PERFORM 형식 형식 1 ① PERFORM [ procedure - name - 1 [ { THROUGH / THRU } procedure - name - 2 ] [ 무 조건문 END - PERFORM ] 형식 2 ② PERFORM [ procedure - name - 1 [ { THROUGH / THRU } procedure - name - 2 ] { data - name / literal } [ TIMES ] [ 무 조건문 END - PERFORM ] 형식 3 ③ PERFORM [ procedure - name - 1 [ { THROUGH / THRU } procedure - name - 2 ] [ WITH TEST { BEFORE / AFTER } ] UNTIL condition [ 무 조건문 END - PERFORM ] 형식 4 ④ PERFORM [ procedure - name - 1 [ { THROUGH / THRU } procedure - name - 2 ] VARYING { identifier - 1 / data - name - 1 } FROM { identifier - 2 / literal - 1 / index - name - 2 } BY { identifier - 3 / literal - 2 } UNTIL condition - 1 [ AFTER { identrifer - 4 / index - name - 4 } from { identifier - 5 / literal - 3 / index - name - 5 } BY { identifier - 5 / literal - 4 } UNTIL condition - 2 ] . .. [ 무 조건문 END - PERFORM ] ① 형식 1 번 설명 - procedure - name - 1 만 지정 되 면 procedure - name - 1 으로 지정 된 부분 을 한 번 만 수행 하 고 돌아와 PERFORM 문 다음 문장 을 실행 한다 . - procedure - name - 1 과 procedure - name - 2 가 모두 지정 되 면 procedure - name - 1 부터 procedure - name - 2 까지 수행 한 다음 PERFROM 문 다음 문 을 수행 한다 . 지정 된 procedure - name 의 수행 범위 는 다음 procedure - name 을 만날 때 까지 이나 EXIT 문 을 만나 면 범위 의 끝 으로 간주 한다 . PERFORM 문 형식 1 번 예제 PERFORM 100 - RTN . PERFORM 200 - RTN THRU 300 - RTN . . .. STOP RUN . 100 - RTN . DISPLAY ' 100 - ROUTINE '. 200 - RTN . DISPLAY ' 200 - ROUTINE '. 300 - RTN . DISPLAY ' 300 - ROUTINE '. RTN - EXIT . EXIT . ② 형식 2 번 설명 - 형식 1 의 PERFORM 문 을 TIMES 앞 에서 지정 한 횟수 만큼 지정 된 부분 을 반복 수행 하 고 돌아와 PERFORM 다음 문장 을 실행 한다 . - identifier 나 literal 은 소 숫 점 이 없 는 정수 로 지정 해야 한다 . 만일 0 이나 음수 값 으로 지정 하 면 perform 문 다음 문장 을 실행 한다 . - identifier 나 literal 의 지정 된 수 만큼 반복 수행 할 때 마다 지정 된 수 에서 1 씩 감소 되 어 지정 된 수 가 0 이 되 면 PERFORM 다음 문장 을 실행 한다 - PERFORM 문 이 수행 되 는 동안 지정 된 반복 횟수 를 변경 시켜서 는 안 된다 . - procedure - name 이 생략 되 면 PERFORM 과 END - PERFORM 사이 를 지정 된 횟수 만큼 반복 수행 한다 . - PERFORM ~ END PERFORM 지정 시 PERFORM 과 END - PERFORM 사이 의 문장 들 에 있 어서 마침표 ( . ) 를 찍 으면 안 된다 . 그러나 END - PERFORM 문 은 필요 에 따라 마침표 를 찍 어야 하 는 경우 도 있 다 . PERFORM 문 형식 2 번 예제 PERFORM 100 - SUM - RTN 100 TIMES . PERFORM 200 - RTN THRU 300 - RTN 2 TIMES . . .. STOP RUN . 100 - SUM - RTN . ADD 1 TO CNT . ADD CNT TO SUM - T 100 . 100 - SUM - RTN - EXIT . EXIT . . .. 200 - RTN . DISPLAY ' 200 - ROUTINE '. 300 - RTN . DISPLAY ' 300 - ROUTINE '. 300 - RTN - EXIT . EXIT . PERFORM 5 TIMES DISPLAY " ROOP 5 TIMES " END - PERFORM . ** PERFORM ~ END - PERFORM 을 이용 한 1 부터 100 까지 의 합 계산 ( 아래 ) MOVE 0 TO I - CNT SUM - TOT 100 . PERFORM 100 TIMES ADD 1 TO I - CNT ADD I - CNT TO SUM - TOT 100 END - PERFORM . DISPLAY ' TOT 100 = ' SUM - TOT 100 . ③ 형식 3 번 설명 - 형식 1 의 PERFORM 문 에 특정 한 조건 을 주 어 PERFORM 문 을 수행 시킨다 . - UNTIL 에서 주어진 조건 이 만족 될 때 까지 PERFORM 으로 지시 하 는 내용 을 반복 수행 한다 . - WITH TEST BEFORE 나 AFTER 을 지정 시 에 는 procedure - name 을 기술 할 수 없 다 . - WITH TEST BEFORE 는 UNTIL 의 조건 을 먼저 검사 한 후 에 PERFORM 과 END - PERFORM 의 내용 을 수행 한다 . 생략 시 에 는 TEST BEFORE 로 간주 한다 . - WITH TEST AFTER 는 PERFORM 과 END - PERFORM 의 내용 을 먼저 수행 한 후 에 UNTIL 의 조건 을 검사 한다 . - procedure - name 이 기술 되 면 WITH TEST AFTER 로 간주 되 어 처리 된다 . - porcedure - name 이 생략 되 면 PERFORM 과 END - PERFORM 사이 을 지정 된 횟수 만큼 반복 수행 한다 . - PERFORM ~ END - PERFORM 지정 시 PERFORM 에서 END - PERFORM 사이 문장 들 에 있 어서 마침표 를 찍 으면 안 된다 . 그러나 END - PERFORM 문 은 필요 에 따라 마침표 ( . ) 를 찍 어야 하 는 경우 도 있 다 . PERFORM 문 형식 3 번 예제 MOVE 0 TO I . PERFORM 100 - RTN UNTIL I = 10 . STOP RUN . 100 - RTN . ADD 1 TO I 100 - RTN - EXIT . EXIT . *** 설명 : 100 - RTN 의 내용 을 먼저 수행 후 UNTIL 의 조건 을 검사 하 므로 100 - RTN 을 10 회 반복 수행 한다 . MOVE 0 TO I SUM - T 100 . PERFORM 100 - TOT - RTN UNTIL I = 100 . DISPLAY ' TOT - SUM = ' SUM - T 100 . STOP RUN . 100 - TOT - RTN . ADD 1 TO I . ADD I TO SUM - T 100 . 100 - TOT - RTN - EXIT . EXIT . ** 설명 : 1 부터 100 까지 의 합 을 구함 . MOVE 10 TO I PERFORM WITH TEST BEFORE UNTIL I = 10 DISPLAY ' NO SKIPPED " END - PERFORM . ** 설명 : UNTIL 이하 의 조건 을 먼저 검사 하 므로 " NO SKIPPED " 이 라는 결과 가 표시 되 지 않 는다 . ④ 형식 4 번 설명 - PERFORM 으로 지시 하 는 porcedure 를 일정 한 값 만큼 증가 또는 감소 하 면서 지정 된 프로시저 를 until 조건 이 만족 할 때 까지 반복 수행 한다 . - VARYING 뒤 에 는 값 이 변화 되 는 데이터 항목 을 기술 한다 . - FROM 뒤 에 는 시작 되 는 초기 치 를 지정 하 고 BY 뒤 에 는 FROM 뒤 에 기술 한 초기 치가 일정 한 값 으로 증가 또는 감소 됨 을 지정 하 는 증분 치 를 기술 한다 . - 수행 은 UNTIL 의 조건 을 먼저 검사 한 후 그 조건 이 만족 하 지 않 으면 지정 된 procedure 수행 하 고 만족 하 면 PERFORM 다음 명령 을 수행 한다 . - AFTER 가 기술 되 면 다중 LOOP 로서 제일 끝 의 AFTER 조건 이 만족 할 때 까지 지정 된 procedure 문 을 수행 한 후 AFTER 앞 의 조건 이 수행 된다 . - 증가 치가 0 이어서 는 안 된다 . porcedure - name 이 생략 되 면 PERFORM 과 END - PERFORM 사이 을 지정 된 횟수 만큼 반복 수행 한다 . - PERFORM ~ END - PERFORM 지정 시 PERFORM 에서 END - PERFORM 사이 문장 들 에 있 어서 마침표 를 찍 으면 안 된다 . 그러나 END - PERFORM 문 은 필요 에 따라 마침표 ( . ) 를 찍 어야 하 는 경우 도 있 다 . PERFORM 문 형식 4 번 예제 PERFORM 100 - RTN THRU 200 - RTN VARYING K FROM 1 BY 1 UNTIL K > 10 . ** 설명 : 이 예 는 K 가 1 부터 시작 하 여 1 씩 증가 하 면서 I 가 10 보다 클 때 까지 100 - RTN 부터 200 - RTN 까지 반복 수행 하 므로 총 10 번 반복 한다 . UNTIL 의 조건 을 검사 후 수행 하 므로 수행 후 K 는 11 이 된다 . MOVE 0 TO SUM - T 100 . PERFORM 100 - SUM - RTN VARYING K FROM 1 BY 1 UNTIL K > 100 . DISPLAY ' 100 - HAP VALUE = ' SUM - T 100 100 - SUM - RTN . ADD 1 TO SUM - T 100 . 100 - SUM - RTN - EXIT . EXIT . ** 설명 : 조건 을 먼저 검사 후 100 - SUM - RTN 을 수행 하 므로 1 부터 100 가지 의 합 을 구할 수 있 다 . 수행 후 에 K 값 은 101 이 된다 . PERFORM 문 형식 4 번 예제 ( 구구단 작성 ) ** 설명 : 구구단 을 작성 하 는 perform 문 MOVE 0 TO I J GUGU . PERFORM GUGU - DAN - RTN VARYING I FROM 2 BY 1 UNTIL I > 9 AFTER J FROM 1 BY 1 UNTIL J > 9 . STOP RUN . GUGU - DAN - RTN . MULTIPLY I BY J GIVING GUGU . DISPLAY I " * " J " = " GUGU . GUGU - DAN - RTN - EXIT . EXIT . PERFORM 실행 예 PERFORM 100 - MAIN - RTN . . .. 100 - MAIN - RTN . . .. 100 - MAIN - RTN - EXIT . EXIT . 100 - MAIN - RTN 을 한 번 만 실행 시킨다 . PERFORM TOT - RTN VARYING I FROM 1 BY 1 UNTIL I > 5 . ... TOT - RTN . ** 각 과목 의 점수 가 과락 인지 검사 하 고 점수 를 각각 누적 시킨다 . MOVE I - JUMSU ( I ) TO O - KJUMSU ( I ) . IF I - JUMSU ( I ) > 40 MOVE SPACE TO O - KWARAK ( I ) ELSE MOVE ' BUL ' TO O - KWARAK ( I ) MOVE ' X ' TO T - SIMSA END - IF . ADD I - JUMSU ( I ) TO TOTAL - TOTAL ( I ) . TOT - REXIT . EXIT . TOT - RTN ROUTINE 을 I 의 값 을 1 부터 5 까지 증가 시키 면서 5 번 실행 한다 . 6 . EVALUATE 문 . - IF 명령 은 지정 된 조건 을 만족 하 는가 , 그렇 지 않 는 가의 2 개 의 처리 로 나누 어 지 지만 EVALUATE 문 은 여러 곳 으로 다 분기 할 수 있 는 명령 이 다 . EVALUATE 형식 EVALUATE 설명 EVALUATE identifier - 1 ALSO identifier - 2 리터럴 - 1 리터럴 - 2 TRUE TRUE FALSE FALSE ANY ANY 조건문 - 1 조건문 - 1 [ WHEN identifier - 3 무조 건문 - 1 ] [ WHEN OTHER 무조건 문 - 2 ] [ END - EVALUATE ] - OTHER 구 : 검사 하 는 조건문 이 없 을 때 수행 하 는 명령문 을 기술 한다 . - TRUE . FALSE 구 : 이 구 를 사용 하 기 위해서 는 identifier 를 레벨 넘버 88 로 정의 해야 한다 . - ALSO 구 : 어떤 두 개 의 조건 을 체크 할 때 사용 하 며 , IF 문 에서 AND 와 같 은 작용 을 한다 . - ANY 구 : 특정 항목 의 값 을 고려 하 지 않 을 때 사용 한다 . EVALUAT 사용 예제 77 AVE - PUNGKA PIC 9 ( 3 ) . 88 AVEA VALUES 90 THRU 100 . 88 AVEB VALUES 80 THRU 89 . 88 AVEC VALUES 70 THRU 79 . 88 AVED VALUES 60 THRU 69 . 88 AVEF VALUES 0 THRU 59 . ...***** 평균 에 따라서 ABCDF 등급 을 화일 에 출력 88 LEVEL NUMBER 적용 . MOVE LINE - AVE TO AVE - PUNGKA . EVALUATE TRUE WHEN AVEA MOVE ' A 우수 ' TO O - PUNGKA WHEN AVEB MOVE ' B 보통 ' TO O - PUNGKA WHEN AVEC MOVE ' C 부족 ' TO O - PUNGKA WHEN AVED MOVE ' D 열심 ' TO O - PUNGKA WHEN AVEF MOVE ' F 권총 ' TO O - PUNGKA WHEN OTHER MOVE ' 기타 ' TO O - PUNGKA END - EVALUATE . . .. 7 . CALL 문 - CALL 문 은 부프로그램 ( Sub - Program ) 을 호출 할 때 사용 하 는 명령문 이 다 . CALL 문 사용 형식 CALL { identifier / literal } [ USING 데이터 - 이름 - 1 [ 데이터 - 이름 - 2 ] . .. ] [ on OVERFLOW 무조건 명령문 ] [ END - CALL ] CALL 문 사용 예제 CALL " SUB - PGM 01 ". ① identifier 이나 리터럴 은 호출 될 부프로그램 이름 이 며 영 숫자 ( alphanumeric ) 데이터 항목 이 다 . ② CALL 문 에 의하 여 identifier 나 리터럴 로 지정 된 프로그램 으로 제어 가 이동 된다 . ③ USING 뒤 의 데이터 이름 들 은 WORKING - STORAGE SECTION , FILE SECTION , LINKAGE SECTION 내 에 정의 된 데이터 항목 으로 호출 된 부프로그램 에 넘 결 줄 매개변수 ( parameter ) 이 며 이 항목 들 은 레벨 넘버 01 또는 77 로 정의 되 어야 한다 . ④ 부프로그램 에서 또 다른 부프로그램 을 호출 할 수 는 있 으나 자신 을 호출 한 프로그램 을 CALL 명령 으로 호출 할 수 없 으며 EXIT PROGRAM 명령 을 이용 하 여 자신 을 호출 한 주 프로그램 으로 실행 을 옮길 수 있 다 . ( 1 ) USING 구 ① 호출 된 부프로그램 에 매개변수 를 넘기 고자 할 때 사용 한다 . ② 주프로그램 ( main program ) 과 부프로그램 ( sub program ) 사이 의 관련 성 을 주 려면 부프로그램 의 PROCEDURE DIVISION 에 가상 인수 ( dummy argument ) 를 기술 한다 . ③ CALL 문의 USING 구 에서 기술 된 데이터 항목 과 부프로그램 의 PROCEDURE DIVISION USING 구 에서 기술 된 데이터 항목 들 은 기술 된 순서 와 갯 수 가 일치 해야 하 지만 데이터 항목 의 이름 은 틀려도 된다 . ( 2 ) OVERFLOW 구 CALL 문 에서 호출 한 부프로그램 너무 커서 주 기 억 장치 에 기억 되 지 못할 때 실행 될 명령문 을 기술 한다 . CALL " SUBPGM 1 " on OVERFLOW STOP RUN .