戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

基本情報技術者 2014年 春期 午後 問10


次のCOBOLプログラムの説明及びプログラムを読んで、設問1,2に答えよ。

〔プログラムの説明〕  X社では、従業員の英語力向上のために、定期的に英語の検定テストを実施している。従業員は誰でも希望すれば受検することができ、直近の5回分の検定結果が得点マスタファイルに記録される。このプログラムは、1回分の検定結果が記録された採点ファイルを読み込み、検定結果を得点マスタファイルに反映する。   (1) 得点マスタファイルは、図1に示すレコード様式の順ファイルで、従業員の得点履歴を管理する。
基本情報技術者試験(平成26年 午後 問10 図1)
 ① 全ての従業員に対するレコードが、従業員番号の昇順に格納されている。  ② 平均得点には、得点履歴に記録された得点の平均点が小数点以下切捨てで格納される。  ③ 得点履歴には、直近5回分の受検日と得点が、受検日の降順に格納される。受検回数が5回に満たない場合、残りの得点履歴の受検日及び得点にはゼロが格納される。  ④ 受検日には、年、月、日が、それぞれ4桁、2桁、2桁の西暦で格納される。  ⑤ 得点には、当該受検日の得点が格納される。得点は000〜100である。
(2) 採点ファイルは、図2に示すレコード様式の順ファイルで、英語の検定テストの都度、作成される。
基本情報技術者試験(平成26年 午後 問10 図2)
 ① ファイルの先頭レコードには、様式1のレコードが1レコードだけ格納される。受検日には、年、月、日が、それぞれ4桁、2桁、2桁の西暦で格納される。  ② 2レコード目以降には、様式2のレコードが、従業員番号の昇順に格納される。   なお、受検は希望者だけなので、この回に受検しなかった従業員のレコードは存在しない。
基本情報技術者試験(平成26年 午後 問10 プログラム)

設問1:

問題文を見る
 プログラム中のに入れる正しい答えを、解答群の中から選べ。   a, bに関する解答群  ア:TEST AFTER UNTIL SCR-ENUM = MST-ENUM  イ:TEST AFTER VARYING W-CNT FROM ZERO BY 1 UNTIL W-CNT > 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   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

模範解答

a:ア、b:オ、c:イ、d:ア

解説

解答の導き方

この問題では、採点ファイルの各受検者について、得点マスタファイルの該当する従業員を見つけ、得点履歴と平均得点を更新する方法を考えます。
COBOL(Common Business-Oriented Language:事務処理向けのプログラミング言語)では、READはファイルから次のレコード(1件分のデータ)を読み込む命令です。また、PERFORMは指定した処理を繰り返す命令です。
まず、採点ファイルの先頭レコードには受検日が入っています。プログラムは最初のREADでそれを読み、TEST-DATEに保存します。その後に読み込むレコードが、受検者の従業員番号と得点です。
a:従業員番号が一致するまでマスタを読む
得点マスタファイルには全従業員のレコードが従業員番号の昇順で格納されています。一方、採点ファイルにも受検者のレコードが従業員番号の昇順で格納されています。
そのため、採点ファイルから読み込んだSCR-ENUMと、マスタから読み込んだMST-ENUMを比べ、番号が一致するまでマスタを先へ進めれば該当者を見つけられます。
aの処理では、マスタを読むREADを少なくとも1回実行してから、従業員番号を比較する必要があります。PERFORM TEST AFTERは、繰り返す処理を先に1回実行し、その後で終了条件を確認します。したがって、「SCR-ENUM = MST-ENUMになるまで繰り返す」という条件のアが適切です。
b:履歴を新しい位置へ移す順番
得点履歴は受検日の降順、つまり新しいものが先に並びます。新しい受検結果を1番目に入れるので、古い履歴を後ろへずらします。
ただし、前から順に移すと、移動先のデータで、まだ移していない履歴を上書きしてしまいます。そのため、後ろから前へ移します。
bの処理は、W-CNTを4から1ずつ減らします。W-CNTが0になる前に終了するので、実際に処理する値は4、3、2、1です。
W-CNT移動元移動先
4MST-ELM(4)MST-ELM(5)
3MST-ELM(3)MST-ELM(4)
2MST-ELM(2)MST-ELM(3)
1MST-ELM(1)MST-ELM(2)
MST-ELMは受検日と得点の組を指すので、この移動では履歴の両方が移ります。W-CNTを4から減らしていくオの指定が適切です。
c:過去の受検回数を数える
得点の合計SCR-TOTALと、過去の受検回数HST-NUMは、最初にどちらも0にします。履歴のうち、受検記録があるものだけを数え、得点も合計します。
記録があるかどうかの判定には、受検日を使います。問題文では、受検回数が5回に満たない場合、残りの受検日と得点はゼロになるとあります。したがって、MST-DATE(W-CNT)がゼロでなければ、その位置には受検記録があります。
得点ではなく受検日で判定することも重要です。得点は000〜100なので、実際の得点が000である可能性があります。得点がゼロだからといって、受検記録がないとは判断できません。
このため、cにはMST-DATE(W-CNT) NOT = ZEROを指定するイが入ります。
d:新しい受検結果を入れる位置
履歴は新しいものから順に並びます。過去の履歴を後ろへ移した後、新しい受検日と得点を先頭に入れます。したがって、MST-DATEとMST-SCOREの添字はどちらも1です。dにはアが入ります。
最後に平均得点を計算します。履歴は5回分までなので、新しい受検結果に加える過去の得点は、移動後の履歴のうち1番目から4番目までです。古い5番目の履歴は、今回の受検結果を入れると履歴から外れます。
そのため、HST-NUMには過去の受検記録のうち残る分の回数が入り、SCR-TOTALにはそれらの得点の合計が入ります。新しい得点SCR-SCOREを加え、受検回数HST-NUMに1回分を加えた数で割ることで平均を求めます。得点マスタファイルの平均得点は小数点以下切捨てなので、計算結果はMST-AVGに格納されます。

誤りやすいポイント

  • aで、マスタのレコードを読む前に番号を比較すること
    受検者を探すには、まずマスタからレコードを読み込む必要があります。TEST AFTERなら、比較の前にREADを少なくとも1回実行できます。
  • bで、W-CNTを1から増やすこと
    履歴を前から移すと、移動先のデータで、まだ移していない履歴を上書きするおそれがあります。後ろから前へ移すため、W-CNTを4から減らします。
  • cで、得点がゼロかどうかを記録の有無の判定に使うこと
    得点000も有効な得点です。記録の有無は、未使用の履歴ではゼロになる受検日で判定します。
  • 平均に過去の5回分すべてを加えること
    新しい受検結果を加えると、最も古い履歴は5回分の範囲から外れます。平均には、残る過去の履歴と新しい得点を使います。

FAQ

Q: TEST AFTERとTEST BEFOREは、どう使い分けますか?
A: TEST AFTERは、処理を先に1回実行してから条件を確認します。TEST BEFOREは、処理を始める前に条件を確認します。この問題では、マスタを少なくとも1レコード読む必要があるため、TEST AFTERを使います。
Q: 受検日がゼロでないことを確認するのはなぜですか?
A: 問題文では、使っていない履歴の受検日にはゼロが格納されます。一方、得点000は実際の得点としてあり得るため、得点だけでは記録の有無を判断できません。
Q: 平均得点を計算するとき、過去の履歴をすべて使わないのはなぜですか?
A: 履歴は直近5回分までです。新しい受検結果を加えると、過去の5回のうち最も古い1回分は履歴に残りません。そこで、残る過去の履歴と新しい得点で平均を計算します。

関連キーワード: 順ファイル、逐次探索、配列、ループ制御、平均値計算

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

 検定結果の反映時に、今回の検定における得点の上位10名の従業員番号と得点を表示するようプログラムを変更する。このとき、10人目の受検者と同得点の受検者が複数いた場合は、当該受検者を全て表示する。表中のに入れる正しい答えを、解答群の中から選べ。
基本情報技術者試験(平成26年 午後 問10 表1)
eに関する解答群  ア:行番号34と35の間  イ:行番号41と42の間  ウ:行番号43と44の間  エ:行番号53と54の間   fに関する解答群  ア:W-CNT = 10 AND SRT-SCORE = PREV-SCORE  イ:W-CNT = 10 AND SRT-SCORE > PREV-SCORE  ウ:W-CNT > 10 AND SRT-SCORE < PREV-SCORE  エ:W-CNT > 10 AND SRT-SCORE = PREV-SCORE   gに関する解答群  ア:ADD 1 TO W-CNT  イ:ADD SRT-SCORE TO PREV-SCORE  ウ:MOVE PREV-SCORE TO SRT-SCORE  エ:MOVE SRT-SCORE TO PREV-SCORE

模範解答

e:ウ、f:ウ、g:エ

解説

解答の導き方

この変更では、受検者の記録を得点の高い順に並べ、上位10名を表示します。さらに、10人目と同じ得点の受検者が続く場合は、その人たちも表示します。空欄ごとに、処理を置く位置や条件を確認します。
e:並べ替え用の記録を追加する位置
変更後のSORTは、入力側のMATCHING-PROCで並べ替える記録を受け取り、出力側のDISPLAY-PROCで並べ替えた記録を取り出します。SORTは、レコードを指定した順序に並べる処理です。
「MOVE SCR-REC TO SRT-REC」で今回の受検者の記録を並べ替え用のレコードに移し、「RELEASE SRT-REC」でそのレコードをSORTに渡します。
MATCHING-PROCでは「PERFORM UPDATE-PROC」によって得点マスタファイルを更新します。並べ替え用のレコードは、その処理の後にSORTへ渡します。したがって、追加位置は行番号43の「PERFORM UPDATE-PROC」の後、行番号44の「END-READ」の前です。解答群ではウです。
f:表示を終える条件
「SORT SRT-FILE DESCENDING KEY SRT-SCORE」によって、得点の高い順に記録が取り出されます。DISPLAY-PROCでは、W-CNTで取り出した記録が何番目かを数えます。
10人目までは表示します。10人目と同じ得点の人も表示するには、10人目を過ぎた後、得点が初めて下がったところで表示を終えます。
PREV-SCOREには、直前に表示した人の得点を保存します。10人目と同じ得点の人が続いている間は、現在の得点SRT-SCOREとPREV-SCOREは同じです。得点が下がったときは、現在の得点が直前の得点より小さくなります。
よって、終了条件は、10人目を過ぎていて、かつ現在の得点が直前の得点より小さいことです。条件は「W-CNT > 10 AND SRT-SCORE < PREV-SCORE」となり、解答群ではウです。この条件が成立した記録は表示せず、表示を終了します。
g:直前の得点を保存する処理
次の記録の得点と比べられるよう、現在の得点をPREV-SCOREに保存します。したがって、「MOVE SRT-SCORE TO PREV-SCORE」とします。解答群ではエです。
この処理は、表示を続けるたびに行われます。たとえば、10人目と同じ得点の人がいれば、その人を表示して得点を保存します。その後、得点が下がった記録が出てきたときに、fの条件で表示を終えます。

誤りやすいポイント

  • 10人目を表示した時点で終了すると、10人目と同じ得点の人を表示できません。終了条件は、10人目を過ぎた後に得点が下がったかどうかで判断します。
  • 得点が同じときに終了するのではありません。同点の人も表示するため、得点が下がるまで処理を続けます。
  • PREV-SCOREは得点を加算する変数ではありません。直前の得点を保存するので、ADDではなくMOVEを使います。
  • RELEASEは、並べ替え対象のレコードをSORTに渡す処理です。得点マスタファイルを書き換えるREWRITEとは役割が異なります。

FAQ

Q: なぜ10人目より低い得点が出たら終了できるのですか?
A: 得点の高い順に並んでいるため、10人目より低い得点が出た後に、10人目と同じ得点の人が現れることはありません。したがって、得点が初めて下がった時点で終了できます。
Q: PREV-SCOREはいつ更新しますか?
A: 記録を表示するたびに、現在の得点を保存します。次の記録の得点を比較するときに、直前の得点として使います。
Q: RELEASEとRETURNは何をする処理ですか?
A: RELEASEは並べ替え前の記録をSORTに渡し、RETURNは並べ替え後の記録を取り出します。

関連キーワード: ソート処理、降順、順ファイル、レコード、ループ制御

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

戦国ITクイズ機能

\ せっかくなら /

基本情報技術者を
クイズ形式で学習しませんか?

クイズ画面へ遷移する→

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について