2016-12-17 48 views
0

我想userstand是如何工作的: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. 当SUB的在PERFORM语句的值等于9,在PAY-VALUE(SUB)的值,则PERFORM执行之前,将等于:
    答案:10

  3. 当LOAD-TABLE例程最后一次执行时,在PAY-VALUE(25)的值将是:
    答案:26

我试过阅读关于表格的教程,但仍不明白这个例子如何工作。

+1

必须缺少代码 - 样本不应该编译,因为1)缺少标题和2个缺失的时间段。 离开这个我仍然会说,*所有*给出的答案是错误的。 –

+0

@SimonSobisch,谢谢你的回答!这些答案给我,这部分代码给我... – Abc

+0

@SimonSobisch,第一个问题也有变种:5; 0; 10; 4.第二次:12; 0; 7;没有。第三名:25; 0; 10;没有。你认为其中有些是正确的吗? – Abc

回答

0

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

1)本书可能会说答案是“未知”,因为编译器可能会初始化不同的东西。 INITIALIZE PAY-TABLE可以PAY-VALUE的每个实例设置为零,或者它可以设置PAY-TABLE为空格(即由25 PAY-VALUE S的125字节的字符字段)。但是,它应该是(如前一种情况)为零。

2)这是不正确的。再一次,可能存在差异(由于#1中提到的原因),但它应该是零。因为付费价值尚未发生(在SUB = 9的PERFORM之前),它仍然是它初始化的值。

3)在#2中,同样的注意事项,答案应该是零。由于LOAD-TABLE段落只执行到SUB变得大于10,PAY-VALUE(25)永远不会改变其初始值。

还要注意程序写得不好 - 没有一个STOP RUN.MAINLINE-ROUTINE结束时,程序会继续并执行DISPLAY-ROUTINELOAD-TABLE段落最后一面。

还有,一些错别字,的PAY-VALUES最显着的定义(与小号)和PAY-VALUE的使用(无小号)。

下面是一个样品运行(我加了显示器前后MOVE声明LOAD-TABLEPERFORM 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 

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

希望这会有所帮助!

+0

只有一个不符合COBOL标准的编译器才会有INITIALIZE的变体结果,我想你可能还会考虑这种可能性。 –