平成24年秋期試験午後問題 問5

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】

問5 ソフトウェア設計

通信講座を提供している企業の受講管理システムに関する次の記述を読んで,設問1,2に答えよ。

 A社では資格を取得するための通信講座を提供している。資格には上級,中級,初級の3種類があり,各講座の修了判定で合格すると合格証が発行され,資格取得となる。上級資格向けの講座を受講するには,中級資格を取得している必要がある。A社通信講座の概要を表1に示す。
pm05_1.png
〔通信講座運用の概要〕
 A社では,受講者の受講状況や成績を,受講管理システムを使って管理し,修了判定を行っている。通信講座運用の概要を次に示す。
  • 各講座は毎月初めに開始する。
  • テキストと課題が,受講期間中の毎月初めに受講者に到着するように送付される。
  • 学習後の受講者から,課題に対する答案がA社に提出される。答案の提出期限は,受講者が課題を受け取った月の25日とする。
  • A社に答策が到着した日を提出日として,受講管理システムに入力する。
  • 到着から3日以内に,答案を添削して100点満点で採点し,添削済み答案と模範解答を受講者に返送する。
  • 点数と返送日を受講管理システムに入力する。
 提出された答案の処理の流れを,図1に示す。
pm05_2.png
〔初級,中級資格向けの講座の修了判定処理の概要〕
  • 毎月初めに,前月で受講期間が終了した受講者を対象に,答案の提出回数と平均点を算出し,修了判定処理を行う。平均点は,全ての答案の合計点を受講期間の月数で除算して求める。答案が未提出の場合,及び提出期限を過ぎて答案が到着した場合は,提出回数に含めず,点数は0点とする。
  • 判定区分には,優秀,合格,不合格の3種類がある。
  • 初級資格向けの講座では,4回以上答案を提出し,かつ,平均点が60点以上の 受講者を合格と判定する。
  • 中級資格向けの講座では,7回以上答策を提出し,かつ,平均点が60点以上の 受講者を合格と判定する。
  • 全ての答案を提出し,かつ,平均点が 90点以上の受講者は優秀と判定する。
  • (3),(4)の条件を満たさない受講者は,不合格と判定する。
 (1)~(6)の処理は,成績ファイルと講座ファイルを修了判定プログラムに入力して行われる。

〔初級,中級資格向けの講座の修了判定後の処理の概要〕
  • 合格者には合格証を発行する。
  • 優秀者には優秀者用の合格証を発行する。優秀者は,修了判定した月の翌月1日(以下,起算日という)から24か月間,上位の講座(初級資格向けの講座の場合は中級資格向けの講座,中級資格向けの講座の場合は上級資格向けの講座)を半額で受講することができる。優秀者には優秀者用の合格証と併せて割引受講案内を送付する。
  • 不合格者には,起算日から12か月間,同じ講座を半額で再受講することができる割引受講案内を送付する。
 (1)~(3)の処理は,修了判定処理の結果に基づき,受講者ファイルと成績ファイルを参照して行われる。

 受講者ファイル,講座ファイル,成績ファイルのレコード様式を,図2~4に示す。各ファイルは,全て索引順編成ファイルである。初級,中級資格向けの講座の修了判定プログラムの流れを図5に,主なモジュールの処理内容を表2に示す。
pm05_3.png

設問1

図5中の に入れる正しい答えを,解答群の中から選べ。ここで,日付については早い方が小さい数として扱われる。
a に関する解答群
  • 講座レコードの開始年月日<現在日付
  • 講座レコードの答案iの提出期限<現在日付
  • 講座レコードの終了年月日<現在日付
  • 成績レコードの答案iの提出日<現在日付
  • 成績レコードの答案iの返送日<現在日付
b に関する解答群
  • 成績レコードの答案iの提出日=講座レコードの答案iの提出期限
  • 成績レコードの答案iの提出日≠講座レコードの答案iの提出期限
  • 成績レコードの答案iの提出日>講座レコードの答案iの提出期限
  • 成績レコードの答案iの提出日≦講座レコードの答案iの提出期限
  • 成績レコードの答案iの提出日の前日>講座レコードの答案iの提出期限
c に関する解答群
  • 平均点=60
  • 平均点<60
  • 60<平均点<90
  • 平均点>90
  • 平均点≧90
d,e に関する解答群
  • "合格"
  • "不合格"
  • "優秀"
解答選択欄
  • a:
  • b:
  • c:
  • d:
  • e:
  • a=
  • b=
  • c=
  • d=
  • e=

解説

aについて〕
まず選択肢として変数iが使用された条件式がありますが、流れ図を見ると変数iは副プログラム〔提出回数と合計点の計算〕内で使用され、aの時点では未使用(未定義)の状態です。未使用の変数を使用している条件式は明らかに不適切ですので、まず「イ」「エ」「オ」については選択肢から除外することができます。

残る選択肢は、
  • 「ア」講座レコードの開始年月日<現在日付
  • 「ウ」講座レコードの終了年月日<現在日付
の2つですが、修了判定プログラムの対象は前月までに受講期間が終了した成績レコードであるため、処理対象は現在読み込んでいる成績レコードの"講座番号"が参照する講座レコードの"終了年月日"が前月であるものだけとなります。流れ図を見るとaの時点で"Yes"と判定されたものだけがその後の処理に移り、No"と判定されるものは処理対象から外れることがわかるため、aには「終了年月日が現在の月よりも前である」という条件式が入るのが適切です。

a=ウ:講座レコードの終了年月日<現在日付

bについて〕
修了判定処理の概要には「答案が未提出の場合,及び提出期限を過ぎて答案が提出された場合は,提出回数に含めず,点数は0点とする」という記述があります。bを含む副プログラムでは提出回数と合計点の計算を行っていますが、bの条件がYes"と判定されたものは提出回数と合計点が加算、"No"の判定されたものは何も処理しないという分岐になっているため、条件式bには答案の提出が期限内であるかを確認する式が入るのが適切です。

答案ごとの提出期限は講座レコードの答案iの"提出期限"に格納されているため、これと答案が到着する度に記録される成績ファイルの答案iの"提出日"を比較することで判定を行うことになります。提出日が期限内であれば「提出日≦提出期限」、期限後、又は未提出であれば「提出日>提出期限」となっているはずなので、条件bに「提出日≦提出期限」を指定することで期限内に提出された答案だけを加算対象とすることができます。

b=エ:成績レコードの答案iの提出日≦講座レコードの答案iの提出期限

図4「成績ファイルのレコード形式」の注記部分に「提出日の初期値は提出期限の翌日の日付が設定されている」とあるため
pm05_5.png


cdeについて〕
条件式cの1つ上の分岐で「平均点≧60」という条件式で分岐があり"Yes"、つまり合格判定されたものが条件式c以下での処理対象となっていて、deにて成績レコードの判定区分を設定していることから、この3つの空欄がある部分では合格者の中から"優秀"と判定されるものを選ぶ処理が行われると判断できます。

"優秀"の判定基準は「全ての答案を提出し,かつ,平均点が90点以上」なので、この2つを条件を共に満たす受講者のみを"優秀"と判定しなくてはなりません。流れ図を見ると条件cの1つ下の「提出回数=受講期間の月数」の条件式で「全ての答案を期限内に提出したか」を判定しているので、cにはもう1つの条件である「平均点が90点以上であるか」を判定する式が入ると考えるのが筋です。したがってcは「平均点≧90」になります。
また、この判定部分で2つの条件が共に"Yes"だった場合にd、それ以外ではeが設定されることから、dが"優秀"、eが"合格"になるとわかります。

c=オ:平均点≧90
 d=ウ:"優秀"
 e=ア:"合格"

設問2

割引を使用した受講の利用率を向上させるために,割引対象期間の残り月数(以下,割引残存期間という)が少なくなっている受講者に,ダイレクトメールを発送することになった。割引を使用した受講の利用状況を調べるために,割引対象受講者と割引残存期間を全て抽出し,結果ファイルに書き込む,割引残存期間抽出プログラムを作成する。割引対象期間を過ぎている場合,割引残存期間に 99 を入れる。結果ファイルのレコード様式を図6に,割引残存期間抽出プログラムの流れを図7に示す。 に入れる正しい答えを,解答群の中から選べ。
pm05_4.png
f に関する解答群
  • 起算日の月+(起算日の年-現在日付の年)×12
  • 起算日の月+(現在日付の年-起算日の年)×12
  • 現在日付の月+(起算日の年-現在日付の年)×12
  • 現在日付の月+(現在日付の年-起算日の年)×12
  • 現在日付の月-(現在日付の年-起算日の年)×12
g に関する解答群
  • 起算日の月
  • 起算日の月-割引対象期間
  • 割引対象期間
  • 割引対象期間+起算日の月
  • 割引対象期間-起算日の月
解答選択欄
  • f:
  • g:
  • f=
  • g=

解説

「現在の日付の年=起算日の年」で"Yes"で判定された場合に、変数mに現在の日付の月が設定され、割引残存期間が「g-変数m」で計算されていることから、現在の日付が8月1日、起算日が3月1日、割引対象期間が12カ月のケースを例として考えてみます。

このケースでは、まず変数mには8が代入されます。さらに現在は起算日から5カ月が経過しているため割引残存期間は7ヵ月(割引対象期間内)と計算されなくてはなりません。このことから逆算すると、

 7=g-8
 g15

gの値は15でなければならないことがわかります。これを利用して割引対象期間=12、起算日の月=3のときに選択肢の式から生成される値が15になるかを検証することで正解を導くことが可能です。
  • 起算日の月の値は3なので誤りです。
  • 3-12=-9 なので誤りです。
  • 割引対象期間の値は12なので誤りです。
  • 正しい。12+3=15 となるので適切な条件式だと判断できます。
  • 12-3=9 なので誤りです。
g=エ:割引対象期間+起算日の月

fについても同様に仮の値を用意することで正答を導いていきます。fが設定されるケースは「現在の日付の年≠起算日の年」の場合なので、現在の日付が2016年8月1日、起算日が2015年3月1日、割引対象期間が12カ月のケースを例で考えてみます。

現在は起算日から17カ月が経過しているため割引残存期間は-5ヵ月(割引対象期間が過ぎている)と計算されなくてはなりません。上記からgには「割引対象期間+起算日の月」である15が使用されるので、逆算を行うと、

 -5=15-f
 f20

fの値は20でなければならないことがわかります。これを利用して選択肢の式から生成される値が20になるかを検証することで正解を導くことが可能です。
  •  3+(2015-2016)×12
    =3+(-12)
    =-9 (誤り)
  •  3+(2016-2015)×12
    =3+12
    =15 (誤り)
  •  8+(2015-2016)×12
    =8+(-12)
    =-4 (誤り)
  •  8+(2016-2015)×12
    =8+12
    20
    このケースでのfの値の20と一致するため正しい式と判断できます。
  •  8-(2016-2015)×12
    =8-12
    =-4 (誤り)
f=エ:現在日付の月+(現在日付の年-起算日の年)×12

Pagetop