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

COBOL(コボル)言語の平成26年度春期問題の解き方とは

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

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

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

平成26年度春期に出題された問題は、英語の検定テストを実施し、従業員ごとの採点ファイルをマスタファイルに記録するプログラムが出題されています。COBOLでも使用頻度が高い個別の記録ファイルを、マスタファイルに書き込むファイル操作がメインとなります。出題されるプログラムもわかりやすく難易度は高くないと言えるでしょう。

しかし、配列にレコードを更新する処理も含まれており、配列操作についてもよく理解していないと、誤った解答を導き出してしまう可能性もありますので注意が必要です。

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

ここでは平成26年度春期に出題された、プログラムに必要な内容を穴埋めしていく問題について解説していきます。

■プログラムの説明

X社では、従業員の英語力向上のために、定期的に英語の検定テストを実施しています。従業員は誰でも希望すれば受検することができ、直近の5回分の検定結果が得点マスタファイルに記録される。このプログラムは、1回分の検定結果が記録された採点ファイルを読み込み、検定結果を得点マスタファイルに反映します。

(1) 得点マスタファイルは、図1に示すレコード様式の順ファイルで、従業員の得点履歴を管理する。

試験-平成26年度春期-得点マスタファイルのレコード様式

① 全ての従業員に対するレコードが、従業員番号の昇順に格納されている。

② 平均得点には、得点履歴に記録された得点の平均点が小数点以下切捨てで格納される。

③ 得点履歴には、直近5回分の受検日と得点が,受検日の降順に格納される。受検回数が5回に満たない場合、残りの得点履歴の受検日及び得点にはゼロが格納される。

④ 受検日には、年,月,日が,それぞれ4桁,2桁,2桁の西暦で格納される。

⑤ 得点には、当該受検日の得点が格納される。得点は000~100である。

(2) 採点ファイルは、図2に示すレコード様式の順ファイルで、英語の検定テストの都度、作成される。

試験-平成26年度春期-採点ファイルのレコード様式

① ファイルの先頭レコードには、様式1のレコードが1レコードだけ格納される。受検日には、年,月,日が,それぞれ4桁,2桁,2桁の西暦で格納される。

② 2レコード目以降には、様式2のレコードが、従業員番号の昇順に格納される。
なお、受検は希望者だけなので、この回に受検しなかった従業員のレコードは存在しない。

■プログラム(1 / 2)

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

■プログラム(2 / 2)

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

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

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

a, bに関する解答群

ア TEST AFTER UNTIL SCR-ENUM = MST-ENUM

イ TEST AFTER VARYING W-CNT FROM ZERO BY 1 UNTIL W-CNT R > 5

ウ TEST BEFORE UNTIL SCR-ENUM NOT = MST-ENUM

エ TEST BEFORE VARYING W-CNT FROM 1 BY 1 UNTIL W-CNT > 4

オ TEST BEFORE VARYING W-CNT FROM 4 BY -1 UNTIL W-CNT = ZERO

a、bに関する解答群では大きく分けてTEST AFTER、TEST BEFOREの2パターンがあります。(AFTERは後判定型となりC言語のdo-while文、BEFOREは前判定型の処理となりC言語のwhile文と同様の動作を行います。)

cに関する解答群

ア MST-DATE(W-CNT) = ZERO

イ MST-DATE(W-CNT) NOT = ZERO

ウ MST-SCORE(W-CNT) = ZERO

エ MST-SCORE(W-CNT) NOT = ZERO

dに関する解答群

ア 1    イ 5    ウ HST-NUM    エ W-CNT

■解答

設問1(a) :ア

MATCHING-PROCの処理では採点ファイルのレコードを1つずつ読み込んでいきます。aの処理ではPERFORMの処理で、何らかの条件が真の場合にマスタファイルを読み込む処理が記述され、その後更新処理UPDATE-PROCが呼び出されます。

マスタファイルでは従業員の直近の5回分の得点を記録する必要がありますので、aの処理では読み込んだ採点ファイルからマスタファイルの項目と一致する情報が必要となります。

そのため、aの解答は採点ファイルとマスタファイルの従業員番号を比較しているアの「TEST AFTER UNTIL SCR-ENUM = MST-ENUM 」となります。

設問1(b) :オ

UPDATE-PROCの処理では、得点マスタファイルに最新の情報を上書きしていく処理を行います。

まずは採点ファイルに関わる項目をZEROで初期化し、PERFORMのbの処理で何らかの条件が真の場合に、現在読み込んでいる得点履歴を要素数を+1した得点履歴に更新していきます。

マスタファイルには最新の情報を1つずつ更新していくわけですので、配列MST-ELMの要素は終端にシフト(要素を右側に1つずつ移動)することになります。

MST-ELM[1][2][3][4][5] → MST-ELM[][1][2][3][4]

要素を1つずつシフトするには4回分の処理が必要になるため、配列MST-ELMの要素数を表すW-CNTを1ずつ増やしていき、終了したら0にする必要があります。

そのため、解答群で該当する処理はオの「TEST BEFORE VARYING W-CNT FROM 4 BY -1 UNTIL W-CNT = ZERO 」となります。

設問1(c) :イ

cの処理はIF文の何らかの条件式が真の場合に受験回数HST-NUMに1を加算し、得点MST-SCORE(W-CNT)を1つずつ得点の合計SCR-TOTALに加算しています。プログラムの説明のとおり、受験回数が5回に満たない場合、残りの得点履歴の受検日及び得点にはゼロが格納されますが、cの判定後はマスタファイルの情報が更新されています。

そのため、cの解答は受験回数がゼロでなかったら更新処理を行うことになり、解答はイの「MST-DATE(W-CNT) NOT = ZERO」になります。

設問1(d) :ア

dの箇所では得点マスタファイルに最新の情報(MST-DATE受験日とMST-SCORE得点)を更新する作業になります。

最新の情報は配列の要素の最初の位置で更新しますので、dの解答はアの「1」となります。

練習問題

ここでは練習問題にチャレンジしてみましょう。

問)

平成26年度春期COBOLのプログラムにおいて、手続き部(PROCEDURE DIVISION)から始まる処理内容について簡単に説明してください。

答え)

MAIN-PROCの処理では、まず採点ファイルと得点マスタファイルをそれぞれ開き、採点ファイルを読み込みます。

30行目の処理では、採点ファイルの受験日が記録されているSCR-DATEを一時的に採点ファイルの最新の受験日を格納するTEST-DATEに転記し、その後MATCHINC-PROCの処理に移動します。

MATCHING-PROCの処理では、PERFORMの繰り返し処理で採点ファイルのレコードを全て読み込んでいきます。

AT ENDはレコードを全て読み込んだ場合に、SCR-EOFをTRUEに指定してPERFORMの処理が終了します。

NOT AT ENDでは読み込んだ採点ファイルの従業員番号と、マスタファイルの従業員番号が一致した場合にマスタファイルの読み込みを行い、UPDATE-PROCの処理で更新処理が実施されます。

UPDATE-PROCの処理では得点マスタファイルに最新の情報を書き込んでいきます。

47行目の処理では、採点ファイルに関わる項目である得点の合計SCR-TOTAL、得点履歴HST-NUMをZEROで初期化しておきます。

得点マスタファイルには最新の情報を配列MST-ELMの最初の要素に1つずつ更新していきますので、古い情報を4回分移動する必要があります。そのため、50行目のPERFORMの条件式では配列MST-ELMの要素数W-CNTが4回に達するまで、「MOVE MST-ELM(W-CNT)TO MST-ELM(W-CNT + 1)」の処理で要素をずらしていきます。

50行目の条件式は受験日がゼロ以外の場合が真となり、受験回数と得点回数をADD文で加算していきます。

55行目と56行目の処理ではマスタファイルに最新の受験日と得点を格納していきますので、得点履歴MST-ELM配下のMST-DATEとMST-SCOREは最初の要素数である1を指定します。

57行目のCOMPUTE文では最新の情報を含めた平均点を算出し、最後にREWRITE文で得点マスタファイルに書き込みを行います。

ここでは、平成26年度春期のCOBOLの出題内容について解説しました。

今回は特に検定結果をマスタファイルに上書きする処理で、COBOLのファイルの処理や配列、演算処理といった基礎的な理解やプログラムの説明内容をしっかりと理解していれば問題を解くのはそう難しくはないと言えるでしょう。

配列は最新の情報を更新するために、古い情報を終端へシフトする必要がありますが、この処理を理解していないと正しい解答を導き出すのは困難です。

ここでは特に配列の処理が重要となりますので、実際に自分でプログラムを作成して動作を確認しておきましょう。

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

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

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

COBOL入門のカテゴリー

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