2015-04-16 97 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動詞,如果這是你應該使用的,但它對三個項目是「過度殺傷」。

相關問題