dポイントプレゼントキャンペーン実施中!

下記の内容を実行するときのコーディングを教えてください。
01 WORK-TABLE.
 03 ITEM  PIC X(02)OCCURS 10.
テーブルの中身。
02,01,03,04,05,06,04,03,02,01の時、
(1)ITEMの最大値を求める→答え:06
(2)ITEMの種類をカウントする→答え:01~06の6種類
(3)降順に3つだけ他のテーブルに転記する→答え:01,02,03
本当に教えて君で申し訳ありませんが宜しくお願いします。

A 回答 (2件)

スペースが詰まって見にくくなってしまったので



01 WORK-TABLE.
 03 ITEM      PIC X(02) OCCURS 10.
 03 ITEM-ASC    PIC X(02) OCCURS 10.
 03 ITEM-DESC   PIC X(02) OCCURS 10.
 03 ITEM-OTHER   PIC X(02) OCCURS 3.
*
 03 WK-ITEM    PIC X(02).
 03 MAX-ITEM    PIC X(02).
 03 WK-COUNT    PIC 9(02).

01 WORK-INDEX.
 03 IX-I      PIC 9(02).
 03 IX-J      PIC 9(02).


***********************************************************************
* ITEM の内容を ITEM-DES に降順で並び替える             *
***********************************************************************
*
     MOVE   ITEM TO ITEM-ASC.
               ITEM-DESC.
*
     PERFORM IX-I   FROM 1      TO 10
      UNTIL IX-I  > 10
*
       PERFORM IX-J  FROM (IX-I + 1) TO 10
        UNTIL IX-J > 10
*
*  昇順並び替え
        IF ITEM-ASC(IX-I)     >  ITEM-ASC(IX-J)
          MOVE ITEM-ASC(IX-J)  TO WK-ITEM
          MOVE ITEM-ASC(IX-I)  TO ITEM-ASC(IX-J)
          MOVE WK-ITEM     TO ITEM-ASC(IX-J)
        END-IF
*
*  降順並び替え
        IF ITEM-DESC(IX-I)    <  ITEM-DESC(IX-J)
          MOVE ITEM-DESC(IX-J) TO WK-ITEM
          MOVE ITEM-DESC(IX-I) TO ITEM-DESC(IX-J)
          MOVE WK-ITEM     TO ITEM-DESC(IX-J)
        END-IF
*
       END-PERFORM
*
     END-PERFORM.
*
     MOVE ITEM-DESC(1)       TO MAX-ITEM.
*
*
***********************************************************************
* ITEM の種類をカウントする                     *
***********************************************************************
*
     MOVE ZERO           TO WK-COUNT.
     PERFORM IX-I  FROM 1    TO 10
      UNITL IX-I > 10
      IF   ITEM-ASC(IX-I) = ITEM-ASC(IX-I + 1)
          CONTINUE
      ELSE 
          COMPUTE WK-COUNT = WK-COUNT + 1
      END-IF
     END-PERFORM.
*
***********************************************************************
* ITEM の内容を無条件に転記する場合(昇順)             *
***********************************************************************
*
     PERFORM IX-I  FROM 1    TO 3
      UNITL IX-I > 3

      MOVE  ITEM-ASC(IX-I)     TO ITEM-OTHER(IX-I)

      END-IF
     END-PERFORM.
*
***********************************************************************
* ITEM の内容をダブりなしで転記する場合(昇順)           *
***********************************************************************
*
     MOVE 1            TO IX-J.
     MOVE ITEM-ASC(1)       TO ITEM-OTHER(IX-J).
*
     PERFORM IX-I  FROM 1   TO 10
      UNITL IX-J > 3
      IF   ITEM-ASC(IX-I) = ITEM-OTHER(IX-J)
          CONTINUE
      ELSE
        MOVE   ITEM-ASC(IX-I)  TO ITEM-OTHER(IX-J)
        COMPUTE IX-J = IX-J  +  1
      END-IF
     END-PERFORM.
    • good
    • 0
この回答へのお礼

よりご丁寧な形でご回答いただきましてありがとうございます。

お礼日時:2005/03/19 23:14

こんな感じでしょうか?


実際にコンパイルしたわけではありませんので、
カスタマイズしてください。

01 WORK-TABLE.
03 ITEM PIC X(02) OCCURS 10.
03 ITEM-ASC PIC X(02) OCCURS 10.
03 ITEM-DESC PIC X(02) OCCURS 10.
03 ITEM-OTHER PIC X(02) OCCURS 3.
*
03 WK-ITEM PIC X(02).
03 MAX-ITEM PIC X(02).
03 WK-COUNT PIC 9(02).

01 WORK-INDEX.
03 IX-I PIC 9(02).
03 IX-J PIC 9(02).


***********************************************************************
* ITEM の内容を ITEM-DES に降順で並び替える *
***********************************************************************
*
MOVE ITEM TO ITEM-ASC.
ITEM-DESC.
*
PERFORM IX-I FROM 1 TO 10
UNTIL IX-I > 10
*
PERFORM IX-J FROM (IX-I + 1) TO 10
UNTIL IX-J > 10
*
* 昇順並び替え
IF ITEM-ASC(IX-I) > ITEM-ASC(IX-J)
MOVE ITEM-ASC(IX-J) TO WK-ITEM
MOVE ITEM-ASC(IX-I) TO ITEM-ASC(IX-J)
MOVE WK-ITEM TO ITEM-ASC(IX-J)
END-IF
*
* 降順並び替え
IF ITEM-DESC(IX-I) < ITEM-DESC(IX-J)
MOVE ITEM-DESC(IX-J) TO WK-ITEM
MOVE ITEM-DESC(IX-I) TO ITEM-DESC(IX-J)
MOVE WK-ITEM TO ITEM-DESC(IX-J)
END-IF
*
END-PERFORM
*
END-PERFORM.
*
MOVE ITEM-DESC(1) TO MAX-ITEM.
*
*
***********************************************************************
* ITEM の種類をカウントする *
***********************************************************************
*
MOVE ZERO TO WK-COUNT.
PERFORM IX-I FROM 1 TO 10
UNITL IX-I > 10
IF ITEM-ASC(IX-I) = ITEM-ASC(IX-I + 1)
CONTINUE
ELSE
COMPUTE WK-COUNT = WK-COUNT + 1
END-IF
END-PERFORM.
*
***********************************************************************
* ITEM の内容を無条件に転記する場合(昇順) *
***********************************************************************
*
PERFORM IX-I FROM 1 TO 3
UNITL IX-I > 3

MOVE ITEM-ASC(IX-I) TO ITEM-OTHER(IX-I)

END-IF
END-PERFORM.
*
***********************************************************************
* ITEM の内容をダブりなしで転記する場合(昇順) *
***********************************************************************
*
MOVE 1 TO IX-J.
MOVE ITEM-ASC(1) TO ITEM-OTHER(IX-J).
*
PERFORM IX-I FROM 1 TO 10
UNITL IX-J > 3
IF ITEM-ASC(IX-I) = ITEM-OTHER(IX-J)
CONTINUE
ELSE
MOVE ITEM-ASC(IX-I) TO ITEM-OTHER(IX-J)
COMPUTE IX-J = IX-J + 1
END-IF
END-PERFORM.
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。週明けに実装してみます。

お礼日時:2005/03/19 23:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!