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

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

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

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

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

平成25年度春期に出題された問題は、社員の勤続年数や役職によって特別給を支給するプログラムが出題されました。

支給係数の決定表によって特別給を算出するプログラムのため、一見難解に感じますが、COBOLのファイル処理、演算処理、条件分岐、繰り返しなどの基本処理を理解していれば、全体的に難易度は低いと言えます。

プログラム最後の空欄b、cに関しても、プログラムの説明で解説している処理仕様と、繰り返し処理で何を行っているかを理解できれば、正しい答えを導き出すことができるでしょう。

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

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

■プログラムの説明

1993年4月1日に創立したX社では、創立20周年の記念日である2013年4月1日に、 勤続年数が0~ 20年の全ての従業員に特別給を支給することにした。

特別給は基本給に、表1に示す決定表によって導出される支給係数を掛け合わせて百円未満を切り捨てた金額であり、創立記念日に上司が現金の入った封筒を部下に手渡す。

このプログラムは、従業員ファイルに格納されている従業員の情報を読み込み、各従業員への支給金額と、各金種の必要数を支給ファイルに出力する。

ここで、金種は1万円紙幣、5千円紙幣、千円紙幣、5百円硬貨、百円硬貨の5種類とする。

試験-平成25年度春期-支給係数の決定表

(1) 従業員ファイルは,図1に示すレコード様式の順ファイルである。

試験-平成25年度春期-従業員ファイルのレコード様式

① 役職には、一般職の場合は0、管理職の場合は1を格納する。

② 入社日には、入社した年,月,日を、それぞれ4桁,2桁,2桁の西暦で格納する。 表1に示す支給係数の決定表の条件1(勤続年数)は、入社日から2013年4月1日までの経過年数とする。例えば、入社日が2012年4月1日の場合は1年であり、2012年4月2日の場合は0年である。

試験-平成25年度春期-支給ファイルのレコード様式

(2) 支給ファイルは、図2に示すレコード様式の順ファイルである。

① 支給金額には、基本給と支給係数から算出した支給金額を格納する。

② 金種別必要数には、それぞれの金種の必要数を格納する。 ここで、必要数の合計が最少となるようにする。

■プログラム(1 / 2)

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

■プログラム(2 / 2)

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

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

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

aに関する解答群

ア E-MMDD < 0401

イ E-MMDD > 0401

ウ W-YEAR < 20

エ W-YEAR >= 20

b,c に関する解答群

ア ADD 1 TO CNT

イ ADD CNT TO P-CUR(CNT)

ウ MOVE CUR-KIND(CNT) TO P-CUR(CNT)

エ SUBTRACT CUR-KIND(CNT) FROM W-PAY

オ SUBTRACT P-CUR(CNT) FROM W-PAY

■解答

設問1(a) :イ

設問1(b) :エ

設問1(c) :ア

【aの解説】

DEC-PROCでは入社日から経過年数を取得し、支給金額を支給係数から算出する処理となります。

47行目の処理で経過年数W-YEARを取得し、aのIF文の条件が真の場合は経過年数を1で減算しています。IF文の判定によって経過年数を減算していることから、プログラムの説明で解説していた、2012年4月1日の場合は1年であり、 2012年4月2日の場合は0年の判定処理がaの処理に入ることがわかります。そのため、aの処理はイの「E-MMDD > 0401 」となります。

【b解説】

70行目のPERFORM文の繰り返し処理では、金種別必要数P-CURを取得する処理を行っています。IF文の条件式では取得した支給金額から金種CUR-KINDの各種別([10000][05000][01000][00500][00100])の比較処理を行います。支給金額が等しいまたは上回っている場合に、ADDの処理で必要数をカウントしていますが、連続して必要数をカウントしないために、支給金額を金種CUR-KINDから差し引く処理を行う必要があります。そのため、bの処理はエの「SUBTRACT CUR-KIND(CNT) FROM W-PAY」となります。

【c解説】

71行目のIF文の条件式では金種CUR-KINDごとに比較を行い、真の場合は金種別必要数P-CURの加算及びbの処理で支給金額W-PAYを金種ごとに減算しています。金種ごとの必要数を全て取得したあとは必然的にELSEの分岐に入ることになりますので、cの処理では次の金種を比較するために、CUR-KINDの配列の要素数を1ずつ加算する処理が必要となります。そのため、cの処理はアの「ADD 1 TO CNT」となります。

練習問題

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

問)

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

答え)

MAIN-PROCでは主に従業員ファイルと支給ファイルを開き、従業員ファイルをPERFORMで終端になるまで1レコードずつ読み込み、DEC-PROCとCUR-PROCの処理後、支給ファイルP-RECに書き込む処理を行っています。

DEC-PROCでは入社日からの勤続年数の取得及び、支給金額を算出するための支給係数の判定処理を行います。

47行目では2013年のからの勤続年数を取得するため、2013年から入社した年E-YEARを差し引いた値を、勤続年数W-YEARに格納しています。

48行目のaの処理では、条件が真の場合に経過年数を1で減算していることから、4月1日より大きい場合は1年としてカウントしない判定を行う「E-MMDD > 0401 」が入ります。

51行目の多岐分岐処理では勤続年数や役職によって支給係数を決定する処理を行います。

  • 勤続年数が3年以下で一般職なら支給係数を0.05に設定
  • 勤続年数が3年以下で管理職、勤続年数が4~9年で一般職なら支給係数を0.10に設定
  • 勤続年数が4~9年で管理職、勤続年数が10年以上の一般職なら支給係数を0.15に設定
  • 勤続年数が10年以上の管理職の場合は支給係数を0.20に設定

63行目からの処理では、基本給E-BASEと支給係数PAY-RATEを掛け合わせて、支給金額P-PAYを取得、100円未満を切り捨てた金額を取得するため、除算処理や乗算処理を行います。

CUR-PROCでは、DEC-PROCの処理で取得した支給金額から、支給ファイルレコードの金種別必要数を取得していく処理になります。

まずは、金種別必要数P-CUR-TBLのレコードを初期化し、配列の要素数CNTを1で初期化、支給金額から金種別必要数を算出するため、項目W-PAYを支給金額P-PAYから取得しています。

70行目のPERFORM文では、支給金額が0になるまで繰り返し処理を行います。

IF文の条件式には支給金額W-PAYが金種CUR-KINDの各要素([10000][05000][01000][00500][00100])と等しいまたは上回っている場合に、金種別必要数P-CURに1ずつ加算していきます。

また、bの処理ではPERFORM文の繰り返し処理で、連続して金種別必要数をカウントしないために、支給金額W-PAYを、金種CUR-KINDから減算する処理「SUBTRACT CUR-KIND(CNT) FROM W-PAY」が入ります。

ELSE文では支給金額W-PAYが金種CUR-KINDと等しい、または上回っている以外の場合の処理を行います。

IF文の条件式では金種CUR-KINDごとに比較を行い、真の場合は金種別必要数P-CURのカウント及びbの処理で支給金額W-PAYを金種ごとに減算していますので、金種ごとの必要数を全て取得したあとは必然的にELSEの分岐に入ることになります。

ELSEのcの処理では次の金種を比較するために、CUR-KINDの配列の要素数を1ずつ加算する処理である「ADD 1 TO CNT」が入ります。

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

今回は社員の勤続年数や役職によって支給係数を求め、支給金額を算出するプログラムの処理が出題されました。プログラムの説明で表がでてきましたので、一見複雑な処理に感じますが、COBOLの基本的なファイル入出力処理や配列、演算処理を理解していれば問題を解くのはそう難しくなく、難易度も低めだったと言えるでしょう。

EVALUATE文による分岐処理も、表の内容を理解していればどのような処理をしているのかは一目瞭然です。

プログラム最後のPERFORMの繰り返し処理もプログラムの動きを把握していれば、空欄に当てはめる処理が何か?正しい解答を導き出すのはそう難しくないでしょう。

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

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

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

COBOL入門のカテゴリー

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