2015-04-16 8 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 
     . 

Решает заказ ели t два числа, затем работает там, где должен идти третий. Это эффективно комбинированный обмен/вставка сортировки :-)

Те же результаты, что и выше, конечно.

У COBOL есть глагол SORT, если это то, что вы должны использовать, но это «перебор» для трех предметов.

Смежные вопросы