Как переместить последнюю цифру в первую позицию числа в коболе - PullRequest
0 голосов
/ 06 декабря 2018

Скажите, у меня есть номер 123456, как я могу переместить 6 в начало, чтобы оно стало 612345?

должно работать, если число меньше цифр, например, 123 становится 312.

большое спасибо заранее.

Ответы [ 3 ]

0 голосов
/ 06 декабря 2018

Это решение.Просто MOVE ваш вклад в VAR-INPUT.Это буквенно-цифровое предложение изображения, но это не имеет значения, потому что вы хотите строку в качестве вывода.

Также я выбрал случайные длины предложения изображения, вы можете выбрать любую длину, какую захотите.

 WORKING-STORAGE SECTION.

           01  VAR-INPUT    PIC X(20).
           01  VAR1         PIC X(10).
           01  VAR2         PIC X(10).
           01  RESULT       PIC X(20).
           01  L            PIC 9(02).
           01  OFFSET       PIC 9(02).

 PROCEDURE DIVISION.

               COMPUTE L      = LENGTH OF VAR-INPUT
               COMPUTE OFFSET = L - 1

               MOVE VAR-INPUT(1:L)      TO VAR1
               MOVE VAR-INPUT(OFFSET:1) TO VAR2

               STRING VAR1 DELIMITED BY SPACE
                      VAR2 DELIMITED BY SPACE
               INTO   RESULT
0 голосов
/ 07 декабря 2018

Вот рабочий пример из OpenCobolIDE

   IDENTIFICATION DIVISION.
   PROGRAM-ID. YOUR-PROGRAM-NAME.
   DATA DIVISION.
   FILE SECTION.

   WORKING-STORAGE SECTION.
    01 A PIC X(37).
    01 B PIC 9(2).
    01 C PIC X(1).
    01 D PIC 9(2).
    01 E PIC 9(2).

   PROCEDURE DIVISION.
      ACCEPT A.
      INSPECT A TALLYING B FOR CHARACTERS BEFORE SPACE.
      MOVE A(B:) TO C.

      PERFORM VARYING D FROM B BY -1 UNTIL D = 1
         MOVE D TO E
         SUBTRACT 1 FROM E
         MOVE A(E:1) TO A(D:1) 
      END-PERFORM.

      MOVE C TO A(1:1).
      DISPLAY A.
   END PROGRAM YOUR-PROGRAM-NAME.

Вставьте DISPLAY A в цикл PERFORM, чтобы увидеть, как идет рабочий процесс.

0 голосов
/ 06 декабря 2018

Это метод общего назначения, который будет работать с любым целым числом от 2 до 32 цифр.Номер должен быть usage display.

   working-storage section.
   1 a-number pic 9(6) value 123456.
   1 b-number pic 9(3) value 123.
   1 work pic x(32).
   1 len-of-number binary pic 9(4).
   procedure division.
   begin.
       display a-number
       move a-number (1:) to work
       perform swap-digit
       move work to a-number (1:)
       display a-number
       display space
       display b-number
       move b-number (1:) to work
       perform swap-digit
       move work to b-number (1:)
       display b-number
       stop run
       .
   swap-digit.
       move 0 to len-of-number
       inspect work tallying
           len-of-number for characters before space
       move function reverse (work (1:len-of-number))
           to work
       move function reverse (work (2:len-of-number - 1))
           to work (2:len-of-number - 1)
       .

Выход:

123456
612345

123
312
...