COBOL table 结构和输出

COBOL table structure and output

我正在尝试让用户了解它是如何工作的:

WORKING-STORAGE SECTION.
01 PAY-TABLE.
    05 PAY-VALUES OCCURS 25 TIMES PIC 9(3)V99.
01 WORKING-VALUES.
    05 SUB PIC 9(2) VALUE ZERO.

PROCEDURE DIVISION.
INITIALIZE-ROUTINE.
INITIALIZE PAY-TABLE

MAINLINE-ROUTINE.
PERFORM LOAD-TABLE
    VARYING SUB FROM 1
        BY 1
              UNTIL SUB>10.
DISPLAY-ROUTINE.
DISPLAY PAY-VALUE (SUB)

LOAD-TABLE.
MOVE SUB TO PAY-VALUE (SUB). 

我在书里有这段代码作为复习代码。根据这段代码有几个问题,有答案,但是,我真的不明白为什么要完全是这个答案。

  1. The DISPLAY statement will display the value _____ on the monitor.
    Answer: unknown

  2. When the value of SUB in the PERFORM statement is equal to 9, the value in PAY-VALUE (SUB), before the PERFORM executes, will be equal to:
    Answer:10

  3. When the LOAD-TABLE routine has executed for the last time, the value in PAY-VALUE (25) will be:
    Answer: 26

我已经尝试阅读有关表的教程,但仍然不明白这个示例是如何工作的。

请注意,这在很大程度上取决于环境——一些 COBOL 编译器的行为不同,而且平台之间也存在差异。 (我从 HP3000 COBOL 到 Linux NetCOBOL 的移植代码中获得了很多乐趣。)但一般来说...

1) 这本书可能会说答案是 "unknown" 因为编译器可能会以不同的方式初始化事物。 INITIALIZE PAY-TABLE 可以将 PAY-VALUE 的每个实例设置为零,或者它可以设置 PAY-TABLE (125 字节由 25 PAY-VALUEs) 到空格组成的字符字段。然而,它应该是零(如前一种情况)。

2) 这是不正确的。同样,存在差异的可能性(由于 #1 中提到的原因),但它应该为零。因为 PAY-VALUE 还没有发生任何事情(在 PERFORM for SUB=9 之前),它仍然是它被初始化的值。

3) 与#2 一样,具有相同的注意事项,答案应为零。因为 LOAD-TABLE 段只执行到 SUB 变得大于 10,所以 PAY-VALUE (25) 永远不会改变它的初始化价值。

另请注意,该程序写得不好 -- MAINLINE-ROUTINE 末尾没有 STOP RUN.,程序将继续执行 DISPLAY-ROUTINE 和 [=12] =] 段落最后一次。

还有一些拼写错误,最明显的是 PAY-VALUES 的定义(带有 S)和用法PAY-VALUE(无 S)。

这是一个示例 运行(我在 LOAD-TABLE 中的 MOVE 语句之前和之后以及 PERFORM LOAD-TABLE 语句完成之后添加了显示。请注意额外的显示.)

Before move -- Sub: 01   PV: 00000
After move  --           PV: 00100

Before move -- Sub: 02   PV: 00000
After move  --           PV: 00200

Before move -- Sub: 03   PV: 00000
After move  --           PV: 00300

Before move -- Sub: 04   PV: 00000
After move  --           PV: 00400

Before move -- Sub: 05   PV: 00000
After move  --           PV: 00500

Before move -- Sub: 06   PV: 00000
After move  --           PV: 00600

Before move -- Sub: 07   PV: 00000
After move  --           PV: 00700

Before move -- Sub: 08   PV: 00000
After move  --           PV: 00800

Before move -- Sub: 09   PV: 00000
After move  --           PV: 00900

Before move -- Sub: 10   PV: 00000
After move  --           PV: 01000

Completed Perform of LOAD-TABLE.
PAY-VALUE(25): 00000
00000

Before move -- Sub: 11   PV: 00000
After move  --           PV: 01100

请记住,PAY-VALUE 值显示为百(例如,00100 而不是 1),因为该字段定义为 9(03)V99,这意味着有一个隐含的小数位和它右边的两位数。

希望对您有所帮助!