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

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

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

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

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

基本情報技術者試験(平成28年度)COBOL言語の午後問題は、企業の従業員用の福利厚生施設の客室予約管理プログラムに関する穴埋め問題と、その応用問題でした。出題形式は、まずプログラムの説明を読み仕様を理解し、その仕様を実現したプログラムを読み込んでから、設問に解答する形式で、複数の解答の中から正しい解答を選択します。

福利厚生施設の客室予約情報が格納されている索引が付いた予約ファイルを検索し、希望する部屋数を予約するプログラムを読み解くことにより、COBOL言語プログラムの基本であるファイルアクセス方法の理解度が試される問題です。プログラムを読むことに慣れていないと難しいと感じるかもしれませんが、まずプログラムの説明をよく読み、仕様を理解することで、プログラムが読み解きやすくなります。

ファイルアクセスはCOBOL技術者の必須のスキルで、索引ファイルのアクセスは、実際の業務プログラムでもよく用いられますので、しっかりと習得しておくと実務でも役に立つでしょう。

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

この章では、基本情報技術者試験(平成28年度春期)COBOL言語の午後問題の問10の設問1(索引ファイルのアクセス問題)について解説しますので、索引ファイルのアクセス方法と、PERFORM文による繰り返し処理の定石を理解しましょう。

■プログラムの説明

Z社では、従業員向けの福利厚生施設として、6部屋の客室を有する保養所を運営している。1部屋には4人まで宿泊可能で、宿泊希望者は1~6までの部屋数を指定できる。宿泊日数は1泊だけである。このプログラムは宿泊予約を管理するサブプログラムであり、予約情報を受け取り、予約結果を呼び出し元へ返す。

(1)  このプログラムのパラメタは二つであり、各パラメタの様式は、図1のとおりである。

試験-平成28年度春期-パラメタの様式

図1.パラメタの様式

①予約番号には、予約希望に対して一意に割り振られた000001~999999の番号が格納されている。

②希望日には、宿泊する日の年、月、日が、それぞれ西暦の4桁、2桁、2桁で格納されている。

③部屋数には、希望する部屋数が格納されている。

④結果には、希望どおりに予約できた場合は0を、できなかった場合は9を設定する。

⑤空き部屋数には、希望どおりに予約できなかった場合に、希望日の空き部屋数を設定する。例えば、3部屋を希望している場合に2部屋しか空きがなかったときには、2を設定する。希望どおりに予約できた場合は、0を設定する。

⑥予約情報に誤りはないものとする。

(2)  予約ファイルは、日付を主キーとする図2に示すレコード様式の索引ファイルであり、予約状況を管理する。

試験-平成28年度春期-予約ファイルのレコード様式

図2.予約ファイルのレコード様式

①日付には、年、月、日が、それぞれ西暦の4桁、2桁、2桁で格納されている。

②部屋1~6のうち、予約済みの部屋には予約番号が格納される。予約が入っていない部屋には0が格納されている。

③予約が1部屋も入っていない日のレコードは存在しない。

■プログラム

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

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

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

aに関する解答群

(ア)ADD 1 TO GET-ROOM

(イ)ADD 1 TO  PRM-FREE

(ウ)MOVE PRM-NO TO RSV-NO(CNT)

(エ)MOVE ZERO TO RSC-NO(CNT)

b、cに関する解答群

(ア)CNT > 6

(イ)CNT > GET-ROOM

(ウ)CNT > PRM-ROOM

(エ)GET-ROOM < PRM-ROOM

(オ)GET-ROOM = PRM-ROOM

(カ)GET-ROOM > PRM-ROOM

■解答

設問1-a:(ウ)

設問1-b:(ア)

設問1-c:(オ)

【aの解説】

段落RSV-PROCは、予約ファイル中に検索キーである「日付」が存在しない場合に実行される処理ブロックです。レコードが存在しないため、段落RSV-PROCでは、新規レコードに日付と予約状況を設定し、予約ファイルに挿入(WRITE)しなければなりません。設問1-aがあるPERFORM文では、パラメタで渡された「予約情報」の「部屋数」の回数分、パラメタで渡された「予約情報」の「予約番号」を、レコードの「予約状況」に繰り返し設定する処理を行っています。

従って、解答は「(ウ)MOVE PRM-NO TO RSV-NO(CNT)」になります。

【bの解説】

段落CHK-PROCは、予約ファイルに検索キーである「日付」が存在する場合に実行される処理ブロックです。すでにレコードが存在するため、段落CHK-PROCでは、予約番号が設定されていない部屋(予約されていない部屋)を探し、予約番号を設定して、予約ファイルを更新(REWTITE)しなければなりません。設問1-bがあるPERFORM文では、レコードの「予約状況」の部屋数分(6個)の繰り返しを行いながら、予約番号が設定されているか、いないかを判定し、設定されていないところに、パラメタで渡された「予約番号」を、パラメタで渡された「予約情報」の「部屋数」分、設定する処理を行っています。

従って、解答は「(ア)CNT > 6」になります。

【cの解説】

段落CHK-PROCの47行目から始まるIF文では、出力パラメタの「予約結果(結果、空き部屋数)」の設定を行っています。38行目から始まるPERFORM文の42行目でカウントしたGET-ROOM(予約できた部屋数)と、パラメタで渡された「予約情報」の「部屋数」が等しい場合、希望する部屋数の予約ができたことになり、レコードを更新(REWTITE)し、出力パラメタの「予約結果」の「結果」と「空き部屋数」にそれぞれ0を設定します。GET-ROOM(予約できた部屋数)と、パラメタで渡された「予約情報」の「部屋数」が異なる場合、空き部屋数が足りず予約ができなかったことになり、レコードの更新を行わず、出力バラメタの「予約結果」の「結果」に9を設定します。

従って、解答は「(オ)GET-ROOM = PRM-ROOM」になります。

練習問題

前章の「COBOL(コボル)言語の平成28年度春期問題」では、基本情報技術者試験(平成28年度)COBOL言語の午後問題の問10の設問1について解説しました。この章では、その解説を踏まえて、さらに理解を深めるための練習問題に挑戦してみましょう。

■問

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

■答え

予約ファイルを更新モードでオープンし、パラメタで指定された「予約状況」の「希望日」を検索キーにして、レコードを読み込む。

当該レコードがない場合、段落RSV-PROCにて、レコードに「日付」をキーとした予約状況を設定し、予約ファイルにレコードを挿入する。当該レコードがある場合、段落CHK-PROCにて、空き部屋に予約番号を設定し、予約ファイルを更新する。

予約ファイルをクローズする。

基本情報技術者試験の午後問題(COBOL言語)は、ファイルアクセスやソート、マージ、繰り返し制御などといったCOBOL言語の基本的な機能が出題される傾向にあります。平成28年度春期では、索引ファイルのアクセスが出題されましたが、COBOL言語のファイルアクセスの基本と、PERFORM文による繰り返し制御を理解していれば、それほど難しい問題ではありません。何度か過去問題にチャレンジし出題傾向に慣れておくと、試験のときに慌てずに問題を解くことができるでしょう。

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

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

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

COBOL入門のカテゴリー

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