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

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

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

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

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

平成27年度春期に出題された問題は、従業員の勤怠管理を元に従業員別に勤務時間を集計して、勤怠管理ファイルに出力するプログラムが出題されました。

出題されるプログラムの主な内容としては、出退勤記録ファイルに記録された従業員別の勤務時間を勤怠管理ファイルに出力する処理を行います。

設問a、bに関してはPICTURE句の桁数を選択する問題ですので、プログラムの説明を理解していれば、問題を解くのは難しくありません。

また、出題されるプログラムの内容もわかりやすく、難易度は低めであるといえます。

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

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

■プログラムの説明

C社では、全従業員の出社時刻と退社時刻を入口のゲートで自動的に記録し、出退勤記録ファイルに格納しています。このプログラムは、1か月分の出退勤記録ファイルを読み込み、出社した従業員の勤務管理ファイルに書き込んでいます。

1.出退勤記録ファイルは、図1に示すレコード様式の順ファイルで、ある月の1か月分の 出退勤記録が格納されている。

試験-平成27年度春期-出退勤記録ファイルのレコード様式

① レコードは日付、時刻、出退勤フラグの昇順に格納されている。

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

③ 時刻には、出社又は退社の時刻の時、分が、それぞれ2 桁の24時間表記で格納されている。

④ 出退勤フラグには、出社時は0が、退社時は1が格納されている。

⑤ 従業員番号には、従業員ごとに一意な 6 桁の番号が格納されている。

⑥ 同一従業員の出社時の記録と退社時の記録は、必ず対になっている。同じ日付のレコードは1組だけである。

⑦ 出社時刻は6時から22時までである。退社時刻は同じ日付の24時までである。

2.勤務管理ファイルは、図2に示すレコード様式の従業員番号をキーとする索引ファイルである。

試験-平成27年度春期-勤務管理ファイルのレコード様式

① 勤務履歴1 ~ 31には、当該月の1 ~ 31日の出社時刻及び退社時刻が格納される。
出社しなかった日と暦にない日の出社時刻及び退社時刻には、9999 が格納される。

② 出社時刻及び退社時刻には、時、分が、それぞれ 2 桁の 24 時間表記で格納される。

③ 勤務時間には、1か月の勤務時間の合計が、3 桁の時間と2桁の分で格納される。
毎日の出社時刻から退社時刻までの時間が1日の勤務時間である。 途中の休み時間も勤務時間に含める。

■プログラム(1 / 2)

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

■プログラム(2 / 2)

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

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

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

a,b に関する解答群

ア PIC 9(2)       イ PIC 9(3)       ウ PIC 9(4)

エ PIC 9(5)       オ PIC 9(6)

c に関する解答群

ア INITIALIZE ATD-HST

イ INITIALIZE ATD-HST REPLACING NUMERIC BY 9999

ウ MOVE 9999 TO ATD-HST

エ MOVE ALL ZERO TO ATD-HST

d に関する解答群

ア ATD-OUT(IDX)     イ HA

ウ W-MINUTE       エ W-TIME-ACCUM

■解答

設問1(a) :オ

設問1(b) :イ

設問1(c) :イ

設問1(d) :エ

【aの解説】

空欄aではPICTURE句の中から正しいサイズを選択する問題となります。aの処理では一時的にデータを格納する集団項目W-DATEと配下のデータ項目FILLERとIDXを定義しています。

集団項目W-DATEはUPDATE-PROCの「MOVE LOG-DATE TO W-DATE」の処理でLOG-DATEの値をW-DATEに転記しています。

転記元のLOG-DATEは数字の8桁のデータ項目として定義されています。集団項目W-DATEのIDXにはPICTURE句で数字の2桁である9(2)を指定していますので、項目FILLERには数字の6桁を指定します。そのため、aの解答はオの「PIC 9(6)」になります。

【bの解説】

空欄bもaと同様にPICTURE句の正しいサイズを選択する問題となります。bの処理では集団項目W-TIME-ACCUMと配下のデータ項目HAとMAを定義しています。

W-TIME-ACCUMは、UPDATE-PROCのEVALUATEの分岐処理「MOVE ATD-SUM TO W-TIME-ACCUM」でATD-SUMの値を転記しています。

ATD-SUMは勤怠管理レコードの勤務時間を格納する項目で、3桁の時間と2桁の分が格納されています。

集団項目W-TIME-ACCUMのMAは分の項目となりますので、HAは3桁の時間が格納されます。そのため、bの解答はイの「PIC 9(3)」になります。

【cの解説】

空欄cは勤怠管理レコードの更新処理UPDATE-PROCで、プログラムの解説のとおり、出社しなかった日と歴にない出社、退社時刻には9999を格納するための初期処理が入ります。そのため、cの解答はイの「INITIALIZE ATD-HST REPLACING NUMERIC BY 9999」となります。INITIALIZEは初期化処理を行う文で、ATD-HST(勤務履歴)が9999で初期化されます。

【dの解説】

空欄dはEVALUATEの条件で出退勤記録ファイルの出退勤フラグ(退社時)が真の場合に出退勤記録ファイルから時刻を取得する処理で、dでは計算処理CALC-PROCのDIVIDE文によって計算された時間と分の計算結果を取得します。計算結果の転記は集団項目W-TIME-ACCUMに格納します。そのため、dの解答はエの「W-TIME-ACCUM」になります。

練習問題

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

問)

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

答え)

プログラムの内容としては、出退勤記録ファイルのレコードから勤務時間を計算して勤怠管理ファイルのレコードに更新していく処理となります。

MAIN-PROCでは出退勤記録ファイルを開き、勤怠管理ファイルをI-O(入出力両方)で指定します。

READ-PROCでは主にファイルの読込み処理を行い、レコードの終端になるまで出退勤記録ファイルから1レコードずつ読込み、レコードが終了したら終端フラグにTRUEを指定し、終端ではない場合は1レコードずつ更新処理であるUPDATE-PROCの処理を行います。

UPDATE-PROCでは、出退勤記録ファイルの従業員番号を勤怠管理ファイルの従業員番号に転記を行い、出退勤フラグ(出社)をTRUEにセットします。

その後、勤怠管理ファイルを読込み、出退勤フラグ(出社)をTRUEにセットし、INITIALIZEで勤務履歴ATD-HSTを9999で初期化及び、勤務時間をZEROで初期化を行います。

レコードの読み込み後は、出退勤記録レコードの日付データを中間結果の項目W-DATEに格納します。

EVALUATEの条件分岐では、出退勤記録レコードの出退勤フラグ(出社)が真の場合、時刻を勤務管理レコードの出社時刻に転記します。

出退勤フラグ(退社)が真の場合は、出退勤記録レコードの時刻を勤務管理レコードの退社時刻の時間と分で管理する項目W-TIME-TOに転記します。

また、勤務管理レコードの出社時刻を時間と分で管理するW-TIME-FROMに転記し、勤怠管理レコードの勤務時間を3桁の時間と2桁の分で管理するW-TIME-ACCUMに転記します。

計算処理CALC-PROCでは、COMPUTE文とDIVEDE文で勤務時間の合計の算出を行い、計算結果をATD-SUMに格納します。

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

今回の問題は他の過去問題に比べて、プログラムの説明をしっかりと理解しておけば、問題を解くのは難しくないと言えます。

特に時間と分から勤務時間を集計する処理について理解していれば、プログラムの流れもわかりやすい内容でした。

今回の出題内容のように、レコードから取得した値を集計してファイルを更新するような処理はよく使われますので、処理の流れを把握できるようにしておきましょう。

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

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

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

COBOL入門のカテゴリー

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