使用 GO TO 循环

Loop using GO TO

我需要在不使用 'PERFORM ... THRU ...' 结构的情况下用 COBOL 编写 "for loop"。我的想法是添加一个段落,一旦满足某些条件我就可以跳回。这是我想出的:

       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.

这是您现有结构所需要的。您没有显示 I 的初始化,但您需要一个。您已尝试避免显式终止 condition/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.

注意 full-stops/periods 的用法。你应该在你的代码中采用它,你会遇到更少的麻烦。

那个逗号也试图在屏幕上伪装成 full-stop/period/mark,如果你把所有东西都互相干扰,为什么还要包括它:

DISPLAY ARRAY ( I J )

那里,不是更好吗?

从一开始,就为您的名字下功夫。使用描述性名称。 I 和 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)与文字进行比较需要编译器进行一些曲折。

修复将段落名称放入其中导致的语法错误 如果,您可以使用 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.