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