我试图做一个程序,将3个数字转换成变量并按升序输出。
我的意思是(例子):
accept num1
accept num2
accept num3
然后对其进行排序。
答案 0 :(得分:1)
对于数量非常有限的商品,简单的“交换分类”就可以了。使用带有OCCURS的表,将数据放入表中,然后继续传递表,交换相邻的项,直到表的传递中没有更多的更改。
对于三个数字,你可能想要考虑这样的事情,这实际上并不是一种排序,而是会给你你想要的订单。
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NUM1 PIC 9.
01 NUM2 PIC 9.
01 NUM3 PIC 9.
01 SNUM1 PIC 9.
01 SNUM2 PIC 9.
01 SNUM3 PIC 9.
PROCEDURE DIVISION.
ACCEPT NUM1
ACCEPT NUM2
ACCEPT NUM3
COMPUTE SNUM1 = FUNCTION
MIN
(
NUM1
NUM2
NUM3
)
COMPUTE SNUM2 = FUNCTION
MEDIAN
(
NUM1
NUM2
NUM3
)
COMPUTE SNUM3 = FUNCTION
MAX
(
NUM1
NUM2
NUM3
)
DISPLAY
">"
SNUM1
"<"
DISPLAY
">"
SNUM2
"<"
DISPLAY
">"
SNUM3
"<"
GOBACK
.
在SYSIN上(或者你接受的任何地方):
4
2
3
它会产生:
>2<
>3<
>4<
就个人而言,我会选择这样的事情:
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NUM1 PIC 9.
01 NUM2 PIC 9.
01 NUM3 PIC 9.
01 SNUM1 PIC 9.
01 SNUM2 PIC 9.
01 SNUM3 PIC 9.
PROCEDURE DIVISION.
ACCEPT NUM1
ACCEPT NUM2
ACCEPT NUM3
IF ( NUM2
LESS THAN NUM1 )
MOVE NUM2 TO SNUM1
MOVE NUM1 TO SNUM2
ELSE
MOVE NUM2 TO SNUM1
MOVE NUM1 TO SNUM2
END-IF
EVALUATE TRUE
WHEN NUM3
LESS THAN SNUM1
MOVE SNUM2 TO SNUM3
MOVE SNUM1 TO SNUM2
MOVE NUM3 TO SNUM1
WHEN NUM3
LESS THAN SNUM2
MOVE SNUM2 TO SNUM3
MOVE NUM3 TO SNUM2
WHEN OTHER
MOVE NUM3 TO SNUM3
END-EVALUATE
DISPLAY
">"
SNUM1
"<"
DISPLAY
">"
SNUM2
"<"
DISPLAY
">"
SNUM3
"<"
GOBACK
.
决定前两个数字的顺序,然后确定第三个数字的位置。这实际上是一种组合的交换/插入排序: - )
当然,结果与上述相同。
COBOL确实有一个SORT动词,如果你应该使用它,但它对于三个项目来说是“过度杀伤”。