使用 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.
显然这是行不通的,因为这样写会导致语法错误。谁可以帮我这个事?我只能使用 IF
和 GO 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.
我需要在不使用 '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.
显然这是行不通的,因为这样写会导致语法错误。谁可以帮我这个事?我只能使用 IF
和 GO 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.