2015-04-16 65 views
0

我正在尝试执行一个程序,将3个数字输入变量并以升序输出。对少量项目进行排序

我的意思是(例如):

accept num1 
accept num2 
accept num3 

,然后排序。

+0

如果您显示代码并描述您遇到的问题,我们可能会提供很多帮助。 (另外,是否有你用ibm-midrange和cobol85标记的原因?他们似乎没有连接好。) – user2338816

+0

我没有代码,我正在计划这个想法。 这很简单(我猜)有人介绍3个数字(如3 7和4)和程序按升序排序(结果:3 4 7) 问题是我该如何做到这一点,让COBOL得到了函数那还是什么? –

回答

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(或无论你来自ACCEPT):

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

相关问题