排序少量项目

时间:2015-04-16 11:21:04

标签: cobol

我试图做一个程序,将3个数字转换成变量并按升序输出。

我的意思是(例子):

accept num1
accept num2 
accept num3

然后对其进行排序。

1 个答案:

答案 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动词,如果你应该使用它,但它对于三个项目来说是“过度杀伤”。