使用GO TO循环

时间:2016-01-15 13:13:40

标签: cobol

我需要在COBOL中编写一个“for循环”而不使用'PERFORM ... THRU ...'结构。我的想法是添加一个段落,一旦满足某些条件,我就可以跳回去。以下是我提出的建议:

       PROGRAM-BEGIN.
       PAR-A.
       IF I <= 10 THEN
           SET J TO 1
           PAR-B.
               IF J <= 10 THEN
                   DISPLAY ARRAY(I,J)
                   SET J UP BY 1
                   GO TO PAR-B
               END-IF.
           SET I UP BY 1
           GO TO PAR-A
       END-IF.
       PROGRAM-DONE.

显然这不起作用,因为以这种方式写入会导致语法错误。谁可以帮我这个事?我只能使用IFGO TO

2 个答案:

答案 0 :(得分:3)

这是您现有结构所需要的。您没有显示I的初始化,但您需要一个。{1}}。您试图避免明确的终止条件/ GO TO,

   PROGRAM-BEGIN.
       SET I TO 1
   PAR-A.
       IF I <= 10 THEN
           SET J TO 1
       ELSE
           GO TO PROGRAM-DONE
       END-IF
       .
   PAR-B.
       IF J <= 10 THEN
           DISPLAY ARRAY(I,J)
           SET J UP BY 1
           GO TO PAR-B
       END-IF
       SET I UP BY 1
       GO TO PAR-A
       .
   PROGRAM-DONE.

请注意使用句号/句号。你应该为你的代码采用它,你会遇到更少的麻烦。

这个逗号也试图将自己伪装成屏幕上的一个句号/句号/标记,如果你把所有东西都塞进对方,为什么还要包括它:

DISPLAY ARRAY ( I J )

那里,不是更好吗?

从一开始,就要处理你的名字。使用描述性名称。我和J只是愚蠢的,在一些奇妙的情况下,你甚至会把它们与数字1混淆。

       SET first-level-index 
           second-level-index       TO 1
       .
   output-results.
       IF second-level-index 
           NOT GREATER THAN 10
            DISPLAY 
                    ">"
                    the-data
                     ( first-level-index 
                       second-level-index )
                    "<"
            SET second-level-index  UP BY 1
            GO                      TO output-results
       END-IF
       IF first-level-index 
           NOT GREATER THAN 10
            SET second-level-index  TO 1
            SET first-level-index   UP BY 1
            GO                      TO output-results
       END-IF
       .

或者

   set-up-for-loop.
       SET first-level-index        TO 1
       .
   outer-loop.
       SET second-level-index       TO 1
       .
   inner-loop.
       IF second-level-index 
           NOT GREATER THAN 10
            DISPLAY 
                    ">"
                    the-data
                     ( first-level-index 
                       second-level-index )
                    "<"
            SET second-level-index  UP BY 1
            GO                      TO inner-loop
       END-IF
       IF first-level-index 
           NOT GREATER THAN 10
            SET first-level-index   UP BY 1
            GO                      TO outer-loop
       END-IF
       .

你会给那些描述实际任务的paragrpah-names。

请注意,将索引(您的I和J)与文字进行比较需要为编译器提供一些曲折。

答案 1 :(得分:0)

修复因插入段落名称而导致的语法错误 if,你可以使用GOTO将PARB段落移出第一个IF语句:

   PROGRAM-BEGIN.
   PAR-A.
   IF I <= 10 THEN
       SET J TO 1
       GOTO PAR-B
   END-IF

   PAR-B.
   IF J <= 10 THEN
      DISPLAY ARRAY(I,J)
      SET J UP BY 1
      GO TO PAR-B
   END-IF.
   SET I UP BY 1
   GO TO PAR-A

   PROGRAM-DONE.