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).
我在书里有这段代码作为复习代码。根据这段代码有几个问题,有答案,但是,我真的不明白为什么要完全是这个答案。
The DISPLAY statement will display the value _____ on the monitor.
Answer: unknown
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
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,这意味着有一个隐含的小数位和它右边的两位数。
希望对您有所帮助!
我正在尝试让用户了解它是如何工作的:
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).
我在书里有这段代码作为复习代码。根据这段代码有几个问题,有答案,但是,我真的不明白为什么要完全是这个答案。
The DISPLAY statement will display the value _____ on the monitor.
Answer: unknownWhen 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:10When 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,这意味着有一个隐含的小数位和它右边的两位数。
希望对您有所帮助!