我需要在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.
显然这不起作用,因为以这种方式写入会导致语法错误。谁可以帮我这个事?我只能使用IF
和GO TO
。
答案 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.