【COBOL言語】基本情報技術者試験と過去問題-平成24年度春期-|合格対策

基本情報技術者試験(平成24年度春期)午後問題(COBOL言語)の解き方とは

※情報処理推進機構(IPA)は、午後の試験で選択できるプログラミング言語のうち、「COBOL」の出題を令和元年秋期試験で廃止しました。

試験-平成24年度春期-イメージ

COBOL(コボル)言語の平成24年度春期の出題内容

基本情報技術者試験(平成24年度春期)COBOL言語の午後問題は、遊園地におけるICカードを利用した施設利用料金精算システムから、入園者の情報を表示するプログラムの穴埋め問題と、その応用問題でした。出題形式は、はじめにプログラムの説明を読み仕様を理解し、その仕様を実現したプログラムを読み込んでから、設問に解答する形式で、複数の解答の中から正しい解答を選択します。

入園者のICカード利用状況(イベント)が格納された順編成のイベントファイルから、遊園地の滞在者数を時刻と年齢層で集計し、表示するプログラムを読み解かせることにより、2次元配列の利用方法と集計のアルゴリズムの理解度が試される出題内容です。

配列を使用した集計処理は、実際の業務プログラムでもよく用いられる基本的な技術ですので、しっかりと習得しておきましょう。

COBOL(コボル)言語の平成24年度春期問題

この章では、基本情報技術者試験(平成24年度春期)COBOL言語の午後問題の問10の設問1(2次元配列を使用した集計の問題)について解説しますので、2次元配列の利用方法と、PERFORM文での繰り返しによる集計処理の定石を理解しましょう。

■プログラムの説明

ある遊園地では、ICカードを利用した精算システムを導入した。入園児に、入園者から入園料を受け取ると、入園者番号を記録したICカードを渡し、入園者番号と年齢層の情報を入園者ファイルに格納する。各施設では、提示されたICカードから入園者番号を読み取り、施設利用実績をイベントファイルに格納する。退園時に、入園者からICカードが返却されたときに、施設利用料金を一括で徴収する。

このプログラムは、入園者ファイル、およびイベントファイルに格納されたデータを読み込み、入園者に関する情報を集計して表示する。

(1) 入園者ファイルは、図1に示すレコード様式の、入園者番号を主レコードキーとする索引ファイルである。ファイルは、営業日ごとに作成する。

試験-平成24年度春期-入園者ファイルのレコード様式

図1.入園者ファイルのレコード様式

① 入園者番号は、営業日ごとに一意となる、1から始まる4桁の数字である。

② 年齢層コードには、4~12歳は1、13~18歳は2、19~29歳は3、30~49歳は4、50歳以上は5を格納する。4歳未満は入園料、および遊戯施設利用料金が無料となるので、ICカードは発行せず、入園者ファイルにも格納しない。

(2) イベントファイルは、図2に示すレコード様式の順ファイルである。入園者のICカード利用状況(以下、イベントという)を格納する。ファイルは、営業日ごとに作成する。

試験-平成24年度春期-イベントファイルのレコード様式

図2.イベントファイルのレコード様式

① イベントコードには、発生したイベントに応じて、表1に示すイベントコードを格納する。

表1.イベントとイベントコード

試験-平成24年度春期-イベントとイベントコード

② 時刻には、イベントが発生した時刻の時、分、秒を24時間表記で格納する。時系列で格納するので、レコードは時刻の昇順になっている。
なお、この遊園地は10時に開園し、全ての入園者は20時になるまでに退園する。20時台の時刻が格納されることはない。

③ 金額には、該当するイベントを利用した際の金額を格納する。
なお、入退園(イベントコード01、02)の場合は、0を格納する。

④ 一旦退園した入園者が、その日のうちに同じ入園者番号で再入園することはない。

(3) 集計結果の表示例を図3に示す。

試験-平成24年度春期-集計結果の表示例

図3.集計結果の表示例

① TOTAL GUESTSには、入園者数を表示する。1日の入園者数が5,000人を超えることはない。

② STAY GUESTSには、左端に表示した時間帯の滞在者数を、年齢層別に棒グラフで表示する。例えば、10時ちょうどに入園し、11時ちょうどに退園した者は10時台と11時台の滞在者として数える。

③ 棒グラフを構成する各記号は、表2に示すとおり滞在者の年齢層と対応している。記号1つは100人を表し、100人未満の端数は切り捨てる。

表2.年齢層と対応する記号

試験-平成24年度春期-年齢層と対応する記号

■プログラム

試験-平成24年度春期-プログラム

出典:平成24年度春期 COBOL 試験区分 午後 問10 設問1

■設問1 プログラムの中の[ ]に入れる正しい答えを、解答群の中から選べ。

aに関する解答群

(ア)MOVE STAY-CNT(CR-HH) TO PRT-AGE(CR-HH - 8, E-HH)

(イ)MOVE STAY-CNT(CR-HH - 8) TO PRT-TIME(CR-HH)

(ウ)MOVE STAY-GUEST TO PRT-TIME(CR-HH - 8)

(エ)MOVE ZERO TO PRT-AGE(CR-HH - 8, CR-HH)

b~dに関する解答群

(ア)CR-HH

(イ)I

(ウ)J

(エ)PRT-AGE(CR-HH - 9, G-AGE)

(オ)PRT-AGE(G-AGE, CR-HH - 9)

(カ)STAY-CNT(CR-HH)

(キ)STAY-CNT(G-AGE)

(ク)TOTAL-GUEST

eに関する解答群

(ア)ADD J TO MARK-CNT

(イ)ADD J TO MARK-POS

(ウ)ADD MARK-CNT TO MARK-POS

(エ)ADD MARK-POS TO MARK-CNT

■解答

設問1-a:(ウ)

設問1-b~d:(エ)、(キ)、(ク)※順不同

設問1-e:(ウ)

【aの解説】

aでは、WORKING-STORAGE SECTIONに定義した配列の目的と利用方法の理解度が試されています。

このプログラムは、遊園地の滞在者数を時間帯別、年齢層別に集計する仕様ため、集団項目「PRT-GUEST」の下位レベルを1次元目を時間帯、2次元目を年齢層とした10×5の2次元配列「PRT-AGE」として定義し、滞在者数を時間帯別、年齢層別に集計しています。また、イベント発生時点での滞在者数は、1次元目を年齢層とした1次元配列「STAY-CNT」に集計しています。

60行目のIF文では、時替わり処理を行うか、行わないかの判定をしています。時替わり処理とは、時刻順に並んでいるデータの何時何分の「時」が変わったとき行う処理で、このプログラムでは61~64行目のPERFORM文が時替わり処理です。時替わり処理では、時間帯別、年齢層別の集計先である2次元配列「PRT-AGE」に、イベント発生時点での年齢層別の滞在者数「STAY-CNT」を、イベント発生時間帯まで設定する必要があります。年齢層別の滞在者数「STAY-CNT」、および時間帯別、年齢層別の集計先である2次元配列「PRT-AGE」には、上位レベルの定義がありますので、配列の要素数が一致するレベル間で移送を行うと、プログラムコードが1行になります。

従って、解答は「(ウ)MOVE STAY-GUEST TO PRT-TIME(CR-HH - 8)」になります。

【b~dの解説】

b~dを含む処理ブロック「SUM-PROC」は、集計処理をしています。集計しなければならない項目は、時間帯別、年齢層別の滞在者数、イベント発生時点での年齢層別の滞在者数、入園者数の3項目です。

時間帯別、年齢層別の滞在者数は、2次元配列「PRT-AGE」に集計します。配列の要素番号は、1次元目が時間帯ですから「イベント発生時(CR-HH)-9時間」になり、2次元目が年齢層ですから入園者ファイルの年齢層コード「G-AGE」になります。

イベント発生時点での年齢層別の滞在者数は、1次元配列「STAY-CNT」に集計します。配列の要素番号は、入園者ファイルの年齢層コード「G-AGE」になります。

入園者数は、「TOTAL-GUEST」に集計します。

従って、解答は「(エ)PRT-AGE(CR-HH - 9, G-AGE)」、「(キ)STAY-CNT(G-AGE)」、「(ク)TOTAL-GUEST」になります。

【eの解説】

91~97行目までのPERFORM文では、年齢層別の滞在者数の棒グラフを作成しています。

92行目では、棒グラフに設定する年齢層を表す記号の数を「MARK-CNT」に算出しています。その上で、94行目の棒グラフの年齢層を表す記号を「LHD-MARK」に設定する命令が、設定開始位置を「MARK-POS」としていることに着目してください。PERFORM文で繰り返しをしながら、「LHD-MARK」に記号を設定するためには、設定開始位置を設定した記号の数分進めなくてはなりません。

従って、解答は「(ウ)ADD MARK-CNT TO MARK-POS」になります。

練習問題

前章の「COBOL(コボル)言語の平成24年度春期問題」では、基本情報技術者試験(平成24年度春期)COBOL言語の午後問題の問10の設問1について解説しました。この章では、その解説を読みデータ項目の目的と利用方法を理解した上で、さらにプログラムを理解するための練習問題に挑戦してみましょう。

問)

基本情報技術者試験(平成24年度春期)午後問題の問10のCOBOL言語プログラムを読み、手続き部(PROCEDURE DIVISION)全体の処理内容と各処理ブロックの処理内容を簡単に説明せよ。

答え)

【全体】

入園者のICカード利用状況を格納したイベントファイルを読み込み、EOFになるまで、入園者数を集計しながら、時間帯別、年齢層別に滞在者数を集計したのち、集計結果を棒グラフとして表示する。

【MAIN-PROC】

入園者ファイルとイベントファイルを読み出しモードでオープンし、イベントファイルをシーケンシャルに読み込み、EOFになるまで、繰り返し処理で入園者数を集計しながら、時間帯別、年齢層別に滞在者数を集計する。

入園者ファイルとイベントファイルをクローズする。

集計結果を棒グラフとして表示する処理(PRT-PROC)を行う。

【SUM-PROC】

入園者番号をキーに入園者ファイルを読み込み、イベントファイルのイベントコードが入園の場合、時間帯別、年齢層別の滞在者数、イベント発生時点での年齢層別の滞在者数、入園者数の3項目に1を加算する。イベントファイルのイベントコードが退園の場合、イベント発生時点での年齢層別の滞在者数から1を減算する。

【PRT-PROC】

集計結果の1行目に入園者数を、2行目、3行目に滞在者数のグリッド線(スケール)を表示したのち、(1)~(3)を10回繰り返すことにより、1時間帯を1行とした集計結果を棒グラフとして表示する。

(1) 行の編集エリアに時間帯を設定する。

(2) 以下を5回繰り返すことにより、当該時間帯の年齢層別の滞在者数を表す記号を行の編集エリアに設定する。
100人(100未満は切り捨て)を記号1個として、該時間帯の年齢層別の滞在者数から記号数を算出し、年齢層に対応した記号を、記号数分、行の編集エリアに設定する。

(3) 行の編集エリアを表示する。

基本情報技術者試験(平成24年度春期)では、配列の目的と利用方法が試される設問がありましたが、その設問は他の設問と比較すると正答率が低く、受験者が配列の目的と利用方法を理解していない傾向が見受けられました。基本情報技術者試験(平成24年度春期)に出題された2次元配列を使用する集計処理は、COBOL言語の集計処理でよくある処理パターンです。しっかりと配列の使い方を覚えて、このパターンの集計処理をマスターしましょう。

この記事を読んだ人は、こちらの記事も読んでいます

【未経験者歓迎】COBOLプログラマー・システムエンジニアの募集

株式会社COBOLの求人・転職・募集情報を見る

COBOL入門のカテゴリー

取引企業様 募集中
COBOL技術者 募集
COBOL魂
読者採用
COBOL入門