平成12年秋
問8 次のCOBOLプログラムの説明及びプログラムを読んで、設問に答えよ。
〔プログラムの説明〕
店舗別、部門別に部門販売額を登録した販売ファイルから、部門ごとに部門販売額の大きい順に順位を付け、販売成績ファイルを作成する。
(1) 販売ファイルのレコード様式は、次のとおりである。
@各店舗には、部門 A〜E の 5 部門がある。
A販売ファイル中に同一の店舗コードをもつレコードは、ないものとする。
B部門販売額は、9けたを超えないものとする。
C販売ファイルのレコード数は、9,999件以下とする。
(2) 販売成績ファイルのレコード様式は、次のとおりである。
@各部門の部門順位は、各店舗の同一部門の部門販売額の大きい順に1から付ける。
A部門販売額が同一の店舗が複数ある場合は、同じ部門順位とする。同じ部門順位を付けた後の順位は、それまでに順位をつけた店舗数より1だけ大きい数とする。
(3) 部門別の部門販売額の順位を求めるため、作業用のファイルを用いる。
〔プログラム〕←クリック
設問 プログラム中のに入れる正しい答えを、解答群の中から選べ。a、d に関する解答群 ア BANGO-BAN イ BANGO-SOR ウ BUMON-BAN エ BUMON-SOR オ GAKU-BAN カ GAKU-SOR キ TENPO-BAN ク TENPO-SOR b に関する解答群 ア MOVE BANGO-REC TO SORT-REC イ MOVE GAKU-WRK TO GAKU-SOR ウ READ SORT-FILE エ RELEASE SORT-REC オ RETURN SORT-FILE カ WRITE SORT-REC c に関する解答群 ア MOVE BUMON-SOR TO LCN イ MOVE LCN TO BUMON-SOR ウ MOVE X TO BANGO-BAN エ MOVE X TO Y オ MOVE Y TO BANGO-BAN カ MOVE Y TO X e に関する解答群 ア TENPO-SEI = TENPO-BAN イ TENPO-SEI NOT = TENPO-BAN ウ TENPO-SEI = TENPO-SOR エ TENPO-SEI NOT = TENPO-SOR オ TENPO-SOR = TENPO-BAN カ TENPO-SOR NOT = TENPO-BAN 【解答】 a:ク b:エ c:エ d:エ e:エ 【解説】時間なかったのである解説書からのパクリました。暇になったらわかり易く書き直します。次問題はちゃんと私が解説してますので。これよりは理解できるかと思いますが。 このCOBOLプログラムでは、SORT命令により2回のソートが行われている。 (1)1回目のSORT文では、 @ソート前に入力手続としてBUNKAI-RTNを行った後 ASORT-FILEを部門BUMON-SORの昇順に、部門販売額GAKU-SORの降順にソート Bソート後に出力手続としてBANGO-RTNを行っている (2)2回目のSORTでは、 @USING句により作業用のBANGO-FILEを入力ファイルとしてSORT-FILE に書出し、 A空欄aをソートキーとして昇順にソート Bソート後に出力手続としてMATOME-RTNを行っている 1回目のSORT文における入力手続BUNKAI-RTNについて 販売ファイルHANBAI-FILEのレコードを1件ずつ読み、AT ENDになるまで 以下の処理を繰り返している。HANBAI-FILEの1レコード中の5つの部門の 部門別販売額を、店舗別部門別に5つのレコードに分解して、SORT-FILEに 書出している処理が空欄bを含むPERFORM文の処理に相当する。したがっ て空欄bは、RELEASE文によるSORT-FILEへの書出しに該当し、RELEASE SORT-RECつまり解答群のエが正解。 1回目のSORT文における出力手続BANGO-RTNについて ソート済みSORT-FILEのレコードを1件ずつ読み、AT ENDになるまで以下 の処理を繰り返している。 @LCN=BUMON-SORのとき、つまり部門が同じレコードが出現するごとに 1)変数Xをカウントアップ 2)GAKU-WRK>GAKU-SORのときだけ SORT-FILEから読込んだ部門別販売額GAKU-SORをその保存エリア GAKU-WRKにセットし、さらに空欄cの処理を行っている 3)このIF文直後のMOVE文により、変数Yが作業ファイルの部門順位 BANGO-BANにセットされている。 したがって変数Yは同一部門内での販売額の部門順位をカウントする変数 であり、直前の部門販売額GAKU-WRKより小さくなったときにだけ、同一 部門内のそれまで順位をつけた店舗数より1だけ大きな数で順位Yを更新 する必要がある。これが空欄cでの処理に該当する。 同一部門内のそれまでに順位をつけた店舗数は、COMPUTE文により変数 Xがカウントアップされている。したがって空欄cでこの変数Xを変数Y にセットすればよく、“MOVE X TO Y”つまり解答群のエが正解。 ALCN≠BUMON-SORのとき、つまり異なる部門のレコードが出現したとき 1)部門別販売額GAKU-SORをその保存エリアにセット 2)部門BUMON-SORを保存エリアLCNのにセット 3)変数X、Y、部門順位BANGO-BANを1に初期設定 B作業用ファイルBANGO-FILEに出力している 2回目のSORT文について USING句により作業用のBANGO-FILEを入力ファイルとしてSORT-FILEに 書出して、ソート後、出力手続MATOME-RTNで成績ファイルSEISEKI-FILE に出力するためには、店舗コードTENPO-SORの昇順にSORT-FILEをソート しておく必要がある。したがって空欄aにおけるソートキーはTENPO-SORの 昇順とすればよく、解答群のクが正解。 2回目のSORT文における出力手続MATOME-RTNについて 店舗コードTENPO-SORの昇順にソート済みのSORT-FILEを1レコードずつ 読み、各店舗ごとに5つの部門のレコードを1レコードに合成し、各店舗コード ごとに成績ファイルSEISEKI-FILEとして出力している処理に相当する。 SORT-FILEのレコードは、店舗コードTENPO-SORごとに、1〜5の部門コー ドBUMON-SORとその部門販売額GAKU-SORが出現するので、SEISEKI-FILE の店舗コードTENPO-SEIごとに、出現した部門コードBUMON-SORに応じて、 出現順にBANGO-SEI(BUMON-SOR)、GAKU-SEI(BUMON-SOR)に5部門の 部門コードと部門販売額をセットすればよい。したがって空欄dはBUMON-SOR つまり解答群のエが正解。 空欄eは、成績ファイルにレコードを出力するタイミングに関する条件で、 SORT-FILEのレコードの店舗コードTENPO-SORが直前の店舗コードと変わっ たときに出力すればよい。直前の店舗コードは成績ファイルのTENPO-SEIにセ ットされているので、IF文の条件は、“TENPO-SEI NOT = TENPO-SOR” とすればよい。したがって解答群のエが正解。 <参考> このプログラムでは、SORT命令が使用されているので、SORT命令について復習します。COBOLにおけるSORT命令の一般的な形式は以下の4つのパターンに分類されます。ソートの直前、直後にデータを加工する処理があるか否かにより、以下に分類されます。 (1)単純ソート(ソートの直前、直後に入力手続、出力手続がないソート) SORT ソートファイル名 ON ASCENDING KEY ソートキー (昇順ソートの場合) USING 入力ファイル名 GIVING 出力ファイル名 SORT ソートファイル名 ON DESCENDING KEY ソートキー (降順ソートの場合) USING 入力ファイル名 GIVING 出力ファイル名 (2)ソートの直前、直後にそれぞれ入力手続、出力手続があるソート) SORT ソートファイル名 ON ASCENDING KEY ソートキー (昇順ソートの場合) INPUT PROCEDURE IS 入力手続名 OUTPUT PROCEDURE IS 出力手続名 入力手続名. RELEASE ソートファイルのレコード名 FROM 〜 (入力手続で処理されたレコードをソートファイルに書き出せる) 出力手続名. RETURN ソートファイル名 AT END 〜 (ソート済みファイルを出力手続で読込むことができる) (3)ソートの直前に入力手続があり、直後には出力手続がないソート) SORT ファイル名 ON ASCENDING KEY ソートキー (昇順ソートの場合) INPUT PROCEDURE IS 入力手続名 GIVING 出力ファイル名 入力手続名. RELEASE ソートファイルのレコード名 FROM 〜 (4)ソートの直前には入力手続がなくて、直後には出力手続があるソート) SORT ファイル名 ON ASCENDING KEY ソートキー (昇順ソートの場合) USING 入力ファイル名 OUTPUT PROCEDURE IS 出力手続名 出力手続名. RETURN ソートファイル名 AT END 〜 |