COBOL - Tuyên bố có điều kiện
Các câu lệnh điều kiện được sử dụng để thay đổi luồng thực thi tùy thuộc vào các điều kiện nhất định do người lập trình quy định. Câu lệnh điều kiện sẽ luôn luôn đánh giá đúng hoặc sai. Các điều kiện được sử dụng trong các câu lệnh IF, Đánh giá và Thực hiện. Các loại điều kiện khác nhau như sau:
- Tuyên bố điều kiện IF
- Tình trạng quan hệ
- Điều kiện ký
- Điều kiện lớp học
- Điều kiện-Tên Điều kiện
- Điều kiện cần thiết
- Điều kiện kết hợp
Tuyên bố điều kiện IF
Câu lệnh IF kiểm tra các điều kiện. Nếu một điều kiện là đúng, khối IF được thực thi; và nếu điều kiện sai, khối ELSE được thực thi.
END-IFđược sử dụng để kết thúc khối IF. Để kết thúc khối IF, một dấu chấm có thể được sử dụng thay cho END-IF. Nhưng sử dụng END-IF cho nhiều khối IF luôn được ưu tiên hơn.
Nested-IF- Các khối IF xuất hiện bên trong một khối IF khác. Không có giới hạn về độ sâu của các câu lệnh IF lồng nhau.
Cú pháp
Sau đây là cú pháp của câu lệnh điều kiện IF:
IF [condition] THEN
[COBOL statements]
ELSE
[COBOL statements]
END-IF.
Example
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NUM1 PIC 9(9).
01 WS-NUM2 PIC 9(9).
01 WS-NUM3 PIC 9(5).
01 WS-NUM4 PIC 9(6).
PROCEDURE DIVISION.
A000-FIRST-PARA.
MOVE 25 TO WS-NUM1 WS-NUM3.
MOVE 15 TO WS-NUM2 WS-NUM4.
IF WS-NUM1 > WS-NUM2 THEN
DISPLAY 'IN LOOP 1 - IF BLOCK'
IF WS-NUM3 = WS-NUM4 THEN
DISPLAY 'IN LOOP 2 - IF BLOCK'
ELSE
DISPLAY 'IN LOOP 2 - ELSE BLOCK'
END-IF
ELSE
DISPLAY 'IN LOOP 1 - ELSE BLOCK'
END-IF.
STOP RUN.
JCL để thực hiện chương trình COBOL ở trên -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:
IN LOOP 1 - IF BLOCK
IN LOOP 2 - ELSE BLOCK
Tình trạng quan hệ
Điều kiện quan hệ so sánh hai toán hạng, một trong hai toán hạng có thể là một biểu thức định danh, chữ hoặc số học. So sánh đại số của các trường số được thực hiện bất kể kích thước và mệnh đề sử dụng.
For non-numeric operands
Nếu hai toán hạng không phải số có kích thước bằng nhau được so sánh, thì các ký tự được so sánh từ bên trái với các vị trí tương ứng cho đến khi đạt đến cuối cùng. Toán hạng chứa số lượng ký tự lớn hơn được khai báo lớn hơn.
Nếu hai toán hạng không phải số có kích thước không bằng nhau được so sánh, thì mục dữ liệu ngắn hơn sẽ được thêm vào với khoảng trắng ở cuối cho đến khi kích thước của toán hạng trở nên bằng nhau và sau đó so sánh theo các quy tắc đã đề cập ở điểm trước.
Cú pháp
Dưới đây là cú pháp của câu lệnh điều kiện quan hệ -
[Data Name/Arithmetic Operation]
[IS] [NOT]
[Equal to (=),Greater than (>), Less than (<),
Greater than or Equal (>=), Less than or equal (<=) ]
[Data Name/Arithmetic Operation]
Example
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NUM1 PIC 9(9).
01 WS-NUM2 PIC 9(9).
PROCEDURE DIVISION.
A000-FIRST-PARA.
MOVE 25 TO WS-NUM1.
MOVE 15 TO WS-NUM2.
IF WS-NUM1 IS GREATER THAN OR EQUAL TO WS-NUM2 THEN
DISPLAY 'WS-NUM1 IS GREATER THAN WS-NUM2'
ELSE
DISPLAY 'WS-NUM1 IS LESS THAN WS-NUM2'
END-IF.
STOP RUN.
JCL để thực hiện chương trình COBOL ở trên -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:
WS-NUM1 IS GREATER THAN WS-NUM2
Điều kiện ký
Điều kiện dấu được sử dụng để kiểm tra dấu của một toán hạng số. Nó xác định xem một giá trị số nhất định lớn hơn, nhỏ hơn hoặc bằng ZERO.
Cú pháp
Sau đây là cú pháp của câu lệnh điều kiện Sign:
[Data Name/Arithmetic Operation]
[IS] [NOT]
[Positive, Negative or Zero]
[Data Name/Arithmetic Operation]
Example
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NUM1 PIC S9(9) VALUE -1234.
01 WS-NUM2 PIC S9(9) VALUE 123456.
PROCEDURE DIVISION.
A000-FIRST-PARA.
IF WS-NUM1 IS POSITIVE THEN
DISPLAY 'WS-NUM1 IS POSITIVE'.
IF WS-NUM1 IS NEGATIVE THEN
DISPLAY 'WS-NUM1 IS NEGATIVE'.
IF WS-NUM1 IS ZERO THEN
DISPLAY 'WS-NUM1 IS ZERO'.
IF WS-NUM2 IS POSITIVE THEN
DISPLAY 'WS-NUM2 IS POSITIVE'.
STOP RUN.
JCL để thực hiện chương trình COBOL ở trên -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:
WS-NUM1 IS NEGATIVE
WS-NUM2 IS POSITIVE
Điều kiện lớp học
Điều kiện lớp được sử dụng để kiểm tra xem một toán hạng chỉ chứa các bảng chữ cái hoặc dữ liệu số. Khoảng trắng được xem xét trong ALPHABETIC, ALPHABETIC-LOWER và ALPHABETIC-UPPER.
Cú pháp
Sau đây là cú pháp của câu lệnh điều kiện lớp:
[Data Name/Arithmetic Operation>]
[IS] [NOT]
[NUMERIC, ALPHABETIC, ALPHABETIC-LOWER, ALPHABETIC-UPPER]
[Data Name/Arithmetic Operation]
Example
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NUM1 PIC X(9) VALUE 'ABCD '.
01 WS-NUM2 PIC 9(9) VALUE 123456789.
PROCEDURE DIVISION.
A000-FIRST-PARA.
IF WS-NUM1 IS ALPHABETIC THEN
DISPLAY 'WS-NUM1 IS ALPHABETIC'.
IF WS-NUM1 IS NUMERIC THEN
DISPLAY 'WS-NUM1 IS NUMERIC'.
IF WS-NUM2 IS NUMERIC THEN
DISPLAY 'WS-NUM2 IS NUMERIC'.
STOP RUN.
JCL để thực hiện chương trình COBOL ở trên -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:
WS-NUM1 IS ALPHABETIC
WS-NUM2 IS NUMERIC
Điều kiện-tên Điều kiện
Tên điều kiện là tên do người dùng xác định. Nó chứa một tập hợp các giá trị do người dùng chỉ định. Nó hoạt động giống như các biến Boolean. Chúng được định nghĩa với cấp số 88. Nó sẽ không có điều khoản PIC.
Cú pháp
Sau đây là cú pháp của câu lệnh điều kiện do người dùng xác định:
88 [Condition-Name] VALUE [IS, ARE] [LITERAL] [THRU LITERAL].
Example
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NUM PIC 9(3).
88 PASS VALUES ARE 041 THRU 100.
88 FAIL VALUES ARE 000 THRU 40.
PROCEDURE DIVISION.
A000-FIRST-PARA.
MOVE 65 TO WS-NUM.
IF PASS
DISPLAY 'Passed with ' WS-NUM ' marks'.
IF FAIL
DISPLAY 'FAILED with ' WS-NUM 'marks'.
STOP RUN.
JCL để thực hiện chương trình COBOL ở trên -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:
Passed with 065 marks
Điều kiện cần thiết
Điều kiện được cung cấp bằng cách sử dụng từ khóa NOT. Nếu một điều kiện là đúng và chúng ta đã đưa ra KHÔNG ở trước nó, thì giá trị cuối cùng của nó sẽ là sai.
Cú pháp
Sau đây là cú pháp của câu lệnh điều kiện được phân bổ:
IF NOT [CONDITION]
COBOL Statements
END-IF.
Example
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NUM1 PIC 9(2) VALUE 20.
01 WS-NUM2 PIC 9(9) VALUE 25.
PROCEDURE DIVISION.
A000-FIRST-PARA.
IF NOT WS-NUM1 IS LESS THAN WS-NUM2 THEN
DISPLAY 'IF-BLOCK'
ELSE
DISPLAY 'ELSE-BLOCK'
END-IF.
STOP RUN.
JCL để thực hiện chương trình COBOL ở trên -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:
ELSE-BLOCK
Điều kiện kết hợp
Một điều kiện kết hợp chứa hai hoặc nhiều điều kiện được kết nối bằng cách sử dụng toán tử logic AND hoặc OR.
Cú pháp
Sau đây là cú pháp của các câu lệnh điều kiện kết hợp:
IF [CONDITION] AND [CONDITION]
COBOL Statements
END-IF.
Example
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NUM1 PIC 9(2) VALUE 20.
01 WS-NUM2 PIC 9(2) VALUE 25.
01 WS-NUM3 PIC 9(2) VALUE 20.
PROCEDURE DIVISION.
A000-FIRST-PARA.
IF WS-NUM1 IS LESS THAN WS-NUM2 AND WS-NUM1=WS-NUM3 THEN
DISPLAY 'Both condition OK'
ELSE
DISPLAY 'Error'
END-IF.
STOP RUN.
JCL để thực hiện chương trình COBOL ở trên -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:
Both condition OK
Đánh giá động từ
Đánh giá động từ là một thay thế của một loạt câu lệnh IF-ELSE. Nó có thể được sử dụng để đánh giá nhiều hơn một điều kiện. Nó tương tự như câu lệnh SWITCH trong chương trình C.
Example
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-A PIC 9 VALUE 0.
PROCEDURE DIVISION.
MOVE 3 TO WS-A.
EVALUATE TRUE
WHEN WS-A > 2
DISPLAY 'WS-A GREATER THAN 2'
WHEN WS-A < 0
DISPLAY 'WS-A LESS THAN 0'
WHEN OTHER
DISPLAY 'INVALID VALUE OF WS-A'
END-EVALUATE.
STOP RUN.
JCL để thực hiện chương trình COBOL ở trên -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:
WS-A GREATER THAN 2