• ベストアンサー

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

  • COBOLについて

    今高校でCOBOLの勉強をしています。 教科書の練習問題が宿題に出されたのですが、わからないところがありました。 (1)数字項目2桁、テーブル名SUUJI-TBL、データ名SUUJI、要素数20個のテーブルを確保しなさい。 (2)手続き部で、(1)で確保したテーブルに、先頭から1,3,5・・・の値を転記しなさい。ただし、PERFORM文を用いること。 という問題です。 (1)は、 01 SUUJI-TBL.   02 SUUJI PIC X(2) OCCURS 20. と書けたのですが、(2)がさっぱりわかりません。 わかる方、教えてもらえますか?

  • COBOL OCCURSで指定したデータの参照の仕方

    IBM COBOL でプログラムを作成しています。 初歩的な質問で恥ずかしいのですが、どなたか教えていただけますか。 まず、以下のようなTABLEを定義しました。 01 A-TABLE. 03 B OCCURS 100. 05 C PIC X(08) VALUE SPACE. 05 D PIC X(02) VALUE SPACE. 05 E PIC X(08) VALUE SPACE. 05 F PIC X(05) VALUE SPACE. 05 G PIC X(05) VALUE SPACE. 05 H PIC X(05) VALUE SPACE. その後に、INPUTファイルからREADしたデータのうち、必要な部分だけを 該当のTABLEに添え字を使用して代入していく処理を作成したいと思っています。 その場合に、上記の「C」~「H」に代入するにはどうすればよいでしょうか? また後続の処理で直接その値を参照したいのですが、どうすれば良いでしょうか? 私の考えられる範囲で以下のようにプログラムしましたが、 実行時に「OUTSIDE THE REGION OF THE TABLE.」というようなエラーが出力されてしまいました。 MOVE I TO C(IDX1) MOVE J TO D(IDX1) MOVE K TO E(IDX1) MOVE L TO F(IDX1) MOVE M TO G(IDX1) MOVE N TO H(IDX1) どなたかよろしくお願いします。

  • 【COBOL】文字列から数値項目に転記するにあたって

    こんにちは。 早速ですがCOBOLのプログラミングで困っています。 MOVEを使って文字列を数値項目に転記する際についてなのですが、 私の今の困っている現状を報告します。 ↓  ↓   ↓ W-A PIC X(5). ←中身は12345 上記のW-Aをの中味が、文字列で'12345'となっている場合に、 このW-Aの中味を、12.345と数値項目で表示するにはどうすればいいのでしょうか?ちなみに小数点第3位まで表示したいのです。 色々参考書とか見ても分からなかったので困っています。。 今日中に終わらせなくてはならない事なので、どうかアドバイスの方を頂けたらと思っています。。 基本的な部分で申し訳ないのですが、どうぞ宜しくお願いします。

  • COBOL初心者です。

    COBOL初心者です。 プログラミング自体初めて1か月です。 いかんせん本当に初心者なので どう質問したらイイのか分からないんですがヨロシクです。 実行したらなんか固まってしまう?んです。 記述がおかしいんでしょうけど、何がおかしいのか分からなくて… どう書けばイイのか分からないのでソースをそのまま貼り付けます。 IDENTIFICATION DIVISION. PROGRAM-ID. 000. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT IN-FILE ASSIGN TO "x.txt". DATA DIVISION. FILE SECTION. FD IN-FILE. 01 IN-REC. 03 X PIC X(10). WORKING STORAGE SECTION. 01 WORK. 03 WK-X PIC X(10). 01 END-FLAG PIC 9 VALUE 0. PROCEDURE DIVISION. MAIN-SEC SECTION. MAIN-010. OPEN INPUT IN-FILE. PERFORM UNTIL END-FLAG = 1 READ IN-FILE AT END MOVE 1 TO END-FLAG NOT AT END MOVE X TO WK-X DISPLAY WK-X END-PERFORM. CLOSE IN-FILE. STOP RUN. MAIN-SEC-END. EXIT. なんしか、"x.txt"を読み込みたいんです。 勉強中なのでとりあえず読み込みたいデータはちっちゃくしました。 うーんどう伝えたらイイんでしょう~ よろしくお願いします。

  • COBOLのプログラムがビルドできません;;

    今年の4月からシステム関係の会社に就職する者です。 就職にあたって会社からの課題としてCOBOLのプログラムを転記して実行するというものが出たのですが、どうしてもビルドエラーになってしまい困っています。 IDENTIFICATION DIVISION. PROGRAM-ID.  KADAI005 ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. / DATA DIVISION. FILE SECTION. / WORKING-STORAGE SECTION. 01 W-九九TBL. 03 W-行 OCCURS 9. 05 W-列 OCCURS 9. 07 W-積 PIC 9(02). 01 W-指標1 PIC 9(02). 01 W-指標2 PIC 9(02). 01 W-合計 PIC 9(04). / PROCEDURE DIVISION. メインコントロール        SECTION. メインコントロールS. メインコントロール   PERFORM 初期処理. PERFORM 主処理. PERFORM 終了処理. メインコントロールE. EXIT. 初期処理             SECTION. 初期処理S. ワークエリアの初期化 MOVE ZERO TO W-九九TBL W-合計. 初期処理E. EXIT. 主処理              SECTION. 主処理S. PERFORM VARYING W-行 FROM 1 BY 1 UNTIL W-行 > 9 PERFORM VARYING W-列 FROM 1 BY 1 UNTIL W-列 > 9 COMPUTE W-積(W-行,W-列) = W-行 * W-列      COMPUTE W-合計 = W-合計 + W-行 * W-列    END-PERFORM END-PERFORM. DISPLAY "合計 =" W-合計. DISPLAY "5×4=" W-積(5,4). DISPLAY "2×7=" W-積(2,7). 主処理E. EXIT. 終了処理             SECTION. 終了処理S. プログラム終了 STOP RUN. 終了処理E. EXIT. 提出期限が明日に迫っていて焦っています; 回答よろしくお願いします。

  • COBOLでのランダムアクセス

    すみませんCOBOL初心者です。 FILE-CONTROL. SELECT URIAGE-MOKUHYOU ASSIGN TO "c:\dat\mokuhyou.dat" ORGANIZATION IS INDEXED ACCESS MODE IS RANDOM RECORD KEY IS UM-SHITEN-CODE. DATA DIVISION.   FILE SECTION.   FD URIAGE-MOKUHYOU.   01 UM-REC.    05 UM-SHITEN.     10 UM-SHITEN-CODE PIC X(4).     10 UM-SHITEN-MEI PIC X(20).    05 UM-KINGAKU PIC 9(10) OCCURS 12. WORKING-STORAGE SECTION.   01 TSUKI PIC 9(2).   01 WK-SHITEN-CODE PIC X(4). PROCEDURE DIVISION.   DISPLAY "支店コードを入力してください --> : "   ACCEPT WK-SHITEN-CODE   OPEN INPUT URIAGE-MOKUHYOU   READ URIAGE-MOKUHYOU    INVALID KEY     DISPLAY "ERROR; 支店コード = " WK-SHITEN-CODE    NOT INVALID KEY     DISPLAY WK-SHITEN-CODE " の売上げ目標は " UM-REC   END-READ.   STOP RUN. というプログラムを作成し、"mokuhyou.dat"という入力ファイルに正しくデータが格納されているのですが、コンパイルは問題なく、実行すると、 JMP0310I-U OPEN ERROR FILE=mokuhyou.dat. 'ACC-METHOD'. PGM=TEST046 ADR=00401258 とまず画面にでて、OKを押すと、 JMP0099I-U FORCED TERMINATION CODE=0310 というエラーになります。 おそらくファイルが正常に読み込めないものと推測されますが、解決法を教えてください。お願いします。

  • COBOL85のコーディングについて

    COBOL85のコーディングについて教えてください。 以下のようなレコードを持つテーブルで、CD1="B"のレコードを、(1)→(2)→(3)の降順で読み込むには、どのようにコーディングすれば可能でしょうか? コーディング例をお願いします。   CD1|CD2|DATE   ――――――――――――――――   A  |1  |20120101   A  |2  |20991231 (3) B  |1  |20120101 (2) B  |2  |20131231 (1) B  |3  |20991231   C  |1  |20120101   C  |2  |20991231

  • 【Access VBA】クエリ・テーブルのエクスポートについて

    MSOffice2003を使用しています。 マクロにてクエリやテーブルをエクスポートする際、 ------------------------------------------- アクション名:ワークシート変換 変換の種類:エクスポート ワークシートの種類:Microsoft Excel 3 テーブル名:クエリQ(クエリ及びテーブル名) ファイル名:C:\XXXX.XLS ------------------------------------------- としています。 今回、ファイル名(エクスポート先のファイル)に変数を使用したく、 VBAでのコーディングが必要と考えています。 ファイル名は、XXXX_yyyymmdd.XLS(yyyymmddは処理日付)にしたいのです。 この場合、どうコーディングすればよろしいでしょうか?

  • Accessフォームでレベルメーター

    Accessのフォームにボタンを作成し、クリックするとテーブルのデータをDAOで1件づつ読込んで、Excelワークシートを新規に作成し、そこに転記するVBAを作成しました。それはそれで動くのですが、レコード件数とフィールド数が多いので10分程度かかります。その間、このパソコン固まったのではないかと不安を誘います。 そこで、処理の進行に合わせて、そのフォームにレベルメータがあって棒が伸びていくとか、処理中のレコード数がどんどんカウントアップ表示されるとか、「ちゃんと動いてるぞ」みたいな表示するにはどうしたら良いのでしょうか?

  • アクセス2000 複数のテーブルに同じクエリの処理をかけたい

    いつもお世話になります。 アクセスに"DB1"~"DB20"までの20コのテーブルがあり、レイアウトは全て同じです。 "店名" "アイテム数" "数量" "金額 "・・・ "グループ化" "カウント" "合計" "合計"・・・ それを上記のクエリで集計して、"集計1"~"集計20"のテーブルを作りたいのですが、現在はDB1が終わったらDB2を表示させて1項目ずつテーブル名を変えてDB1を消してクエリ実行・・・と行っています。 ミスも結構あります。 マクロか何かで出来るのならと思い、ご質問させていただきました。 以上宜しくお願い致します。

このQ&Aのポイント
  • GoogleChromeで印刷する際にページの左に綴じ白(余白)をつけたいのですが、設定方法がわかりません。何か方法がありましたらご教授下さい。
  • 使用環境はWindows10で、接続は有線LANです。関連するソフト・アプリはGoogleChromeです。電話回線はひかり回線です。
  • GoogleChromeの印刷設定から余白を調整する方法について教えてください。
回答を見る