我试图向用户说明这是如何运作的:
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).
我将此代码作为书中的评论代码。根据这段代码有几个问题,但答案是,我真的不明白为什么它应该是这个答案。
DISPLAY语句将在监视器上显示值_____ 答案:未知
当PERFORM语句中的SUB值等于9时,PERFORM执行前PAY-VALUE(SUB)中的值将等于:
回答:10- 醇>
当LOAD-TABLE例程最后一次执行时,PAY-VALUE(25)中的值将为:
答案:26
我曾尝试阅读有关表格的教程,但仍然不了解此示例的工作原理。
答案 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-ROUTINE
和LOAD-TABLE
最后一段。
还有一些拼写错误,最明显的是 PAY-VALUES 的定义( S )以及 PAY-VALUE <的使用/ strong>(没有 S )。
以下是一个示例运行(我在MOVE
中LOAD-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意味着有一个隐含的小数位和两个它右边的数字。
希望这有帮助!