• ベストアンサー

COBOLのコーディングについて

下記の内容を実行するときのコーディングを教えてください。 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 本当に教えて君で申し訳ありませんが宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • raphel_7
  • ベストアンサー率34% (86/252)
回答No.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.

xkano999
質問者

お礼

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

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • raphel_7
  • ベストアンサー率34% (86/252)
回答No.1

こんな感じでしょうか? 実際にコンパイルしたわけではありませんので、 カスタマイズしてください。 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.

xkano999
質問者

お礼

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

すると、全ての回答が全文表示されます。

関連するQ&A