2016年11月21日月曜日

[平成28年度秋] 午後 問9 解説

[問題文・解答]


平成28年度10月に実施された基本情報技術者試験の午後試験の問題・解答はIPA公式ページからダウンロード出来ます。(以下リンク)

[問題概要]


この問題は、選択問題で問9〜問13のうち1問を選択する必要があります。
問題の題材は、サブシステムの開発作業順序(C言語)です。
複数のサブシステムの開発順序を遅延日数が最小となるように並べ替えるプログラムについて問われます。


[設問1]


プログラム1は処理の流れとしては、バブルソートに近いです。順序を入替える際の条件が数値の大きさではなく、JOB構造体に格納された開発作業日数と目標作業日数を基に計算される遅延日数の合計に置き換わっています。
関数job_scheduling内の各変数の役割は以下の通りです。
・i:配列job_schのインデックス変数。
・j:配列job_schの隣り合う項目の比較用インデックス。
・ft:0〜i-1番目までのサブシステムの開発作業日数。
・ft_a:0〜i+1番目までのサブシステムの開発作業日数。
・ft_b:i番目とi+1番目のサブシステムの順序を入替えた際の0〜i+1番目までの開発作業日数。
・wt_a:0〜i+1番目までのサブシステムの開発遅延日数の合計。
・wt_b:i番目とi+1番目のサブシステムの順序を入替えた際の0〜i+1番目までのサブシステムの開発遅延日数の合計。
・job_no:サブシステムの順序を入替える際に使用する一時変数。

a) P.42中段では、開発の実施順序を入替える場合とそうでない場合の遅延日数の合計を求めています。ft_bやwt_bはi番目とi+1番目のサブシステムの順序を入替えた際の作業日数や遅延日数を指すため、j=0の時はa=i+1、j=1の時はa=iとなる必要があります。従って、aにはi+1-jが当てはまるため「エ」が適切です。

b) P.42下段では、実際に作業順序を入替える処理をしています。具体的にはこれまでjob_sch[i+1]に格納されていた値をjob_sch[i]に代入し、job_sch[i]に格納されていた値をjob_sch[i+1]に代入しています。従って、bにはi+1が当てはまるため「ア」が正解です。

c) cの行ではP.41(5)の⑤の処理とftの再計算を行っています。作業順序の入替えを行った際は、インデックスがi-1に戻り、ftを0〜i-2番目までの開発作業日数とする必要があるため、cには--iが当てはまります。よって、「カ」が適切です。

d) dの行は入替えが行われなかった場合の処理です。P.41(5)の⑥よりインデックスはi+1に進み、ftにはi番目の開発作業日数が加算されます。よって、dには+=が入るため「イ」が正解です。

[答] a) エ b) ア c)カ  d) イ

[設問2]


関数print_scheduleでは、job_schに格納された開発順序に従って、番号(i+1)、サブシステムの開発コード、0〜i番目までのサブシステム開発が終了した時の遅延日数の合計(wt)、wtの累積値(wt_sum)が1行ごとに表示されます。

i=0 → ft=job[0].job_term = 25、wt=0、wt_sum=0
i=1 → ft=25+job[2].job_term=46、wt=46-job[2].target_term=16、wt_sum=16
i=2 → ft=46+job[1].job_term=73、wt=73-job[1].target_term=44、wt_sum=16+44=60

よって、eには44、fには60が当てはまります。

[答] e) ウ f) カ

上記の解説は問題と解答を元に自分なりの考え方を記述しており、間違っている部分もあるかと思いますので、ご了承願います。また、誤りについては正しい考え方をご指摘・ご教授頂けると助かります。


0 件のコメント:

コメントを投稿