COBOL表结构和输出

时间:2016-12-17 00:46:35

标签: cobol

我试图向用户说明这是如何运作的:

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. DISPLAY语句将在监视器上显示值_____   答案:未知

  2.   
  3. 当PERFORM语句中的SUB值等于9时,PERFORM执行前PAY-VALUE(SUB)中的值将等于:
      回答:10

  4.   
  5. 当LOAD-TABLE例程最后一次执行时,PAY-VALUE(25)中的值将为:
      答案:26

  6.   

我曾尝试阅读有关表格的教程,但仍然不了解此示例的工作原理。

1 个答案:

答案 0 :(得分:0)

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

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

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

3)与#2一样,在相同的警告中,答案应为零。由于LOAD-TABLE段落仅在 SUB 大于10时执行,因此 PAY-VALUE(25)永远不会从其初始值更改。

另请注意,该程序写得不好 - 在STOP RUN.末尾没有MAINLINE-ROUTINE,程序将继续并执行DISPLAY-ROUTINELOAD-TABLE最后一段。

还有一些拼写错误,最明显的是 PAY-VALUES 的定义( S )以及 PAY-VALUE <的使用/ strong>(没有 S )。

以下是一个示例运行(我在MOVELOAD-TABLE语句之前和之后添加了显示,并在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意味着有一个隐含的小数位和两个它右边的数字。

希望这有帮助!