2017-06-06 20 views
7

Tôi đang cố gắng lập trình một số loại Caesar Cipher trong Cobol. Nhưng bằng cách nào đó tôi nhận được lỗi sau biên dịch:Chức năng chỉ hoạt động đôi khi nhưng đôi khi không phải

Numeric function "INTEGER FUNCTION ORD" was not allowed in this context.

Lỗi này bị sa thải ở đây (cả hai dòng)

000048     MOVE FUNCTION ORD("A") TO a 
000049     display function ord("A") 

nhưng KHÔNG đây

000054    MOVE FUNCTION CHAR(FUNCTION MOD(
000055     FUNCTION ORD(outstring (i:1)) 
000056      - a + offset, 26) + a) 
000057    TO outstring (i:1) 

i là vị trí của các outstring chúng tôi đang xem xét. a là giá trị của "a" hoặc "A" cần thiết để đảm bảo chúng tôi ở lại trong 26 chữ cái, định nghĩa là

000018   03 a pic S9(3). 

đâu là sự khác biệt? Tại sao công việc thứ hai và thứ nhất không?

+0

Chỉ cần nói: Tôi không thể giải quyết được vấn đề vì chúng tôi không sử dụng ascii nhưng một trường hợp khác không phải theo thứ tự nhưng với khoảng trống .. – inetphantom

Trả lời

5

Ví dụ thứ hai hoạt động và ví dụ đầu tiên không phải vì bạn được phép biểu thức dạng số dưới dạng đối số hàm nhưng bạn không thể có biểu thức dạng số làm chủ đề của câu lệnh MOVE. Trong trường hợp của bạn, trình biên dịch của bạn (IBM?) xem xét một cuộc gọi hàm số nội tại là một biểu thức số. Vì vậy, bạn cần phải thay thế MOVE bằng COMPUTE và thay đổi cuộc gọi chức năng trong số DISPLAY thành a.

000048     COMPUTE a = FUNCTION ORD("A") 
000049     DISPLAY a 
Các vấn đề liên quan