平成28年秋期試験午前問題 午後問9

問9 ソフトウェア開発(C)

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

〔プログラム1の説明〕
 U社では,半年ごとに社内システムの見直しを行い,4月と10月に新たに開発又は改修するサブシステム(以下,対象サブシステムという)を決定し,開発又は改修作業(以下,開発作業という)を実施している。対象サブシステムは複数あり,それぞれに対して目標作業終了日が設定される。二つ以上の対象サブシステムの開発作業を同時に実施することはない。各対象サブシステムについて,開発リソースの制約があるので,必ずしも目標作業終了日までに開発作業を終了できるとは限らない。しかし,開発作業の終了が目標作業終了日よりも遅れる日数(以下,遅延日数という)の合計はできるだけ少なくしたい。そこで,対象サブシステムの開発作業順序を求める関数 job_scheduling を作成した。
  • 関数 job_scheduling の仕様は次のとおりである。ここで,引数の値に誤りはないものとする。
    機能:
    対象サブシステムの開発作業順序を求める。
    引数:
    num_s  対象サブシステム数
    job   対象サブシステム情報(JOB型の配列)
    job_sch 開発作業順序(int型の配列)
  • 構造体を使ったJOB型の定義は次のとおりである。
    pm09_1.gif
    1. 開発コードは,対象サブシステムごとに一意となる長さが8の文字列
    2. 開発作業日数は,開発作業に掛かる日数
    3. 目標作業期間は,半年ごとの一連の開発作業を開始する日からこの対象サブシステムの目標作業終了日までの日数
  • 対象サブシステム情報 job には,次の①~③の順で,データが格納されている。
    1. 目標作業期間の昇順
    2. 目標作業期間が同じならば,開発作業日数の昇順
    3. 目標作業期間も開発作業日数も同じならば,開発コードの昇順
  • (5)の手順で,開発作業順序を求めると,開発作業順序 job_sch の要素 job_sch[i] には,i+1番目(i=0,1,…,num_s-1)に開発作業を実施する対象サブシステムの情報が格納された job[j] の添字の値 j (j=0,1,num_s-1)が入る。
  • 開発作業順序を求める手順は,次のとおりである。
    1. 開発作業順序 job_sch を,対象サブシステム情報 job の並び順に初期設定し,開発作業順序の添字 i に初期値 0 を設定する。
    2. i<num_s-1である間,③~⑥の処理を行う。
    3. i+1番目に開発作業を実施する対象サブシステム job[job_sch[i]] と i+2番目に開発作業を実施する対象サブシステム job[job_sch[i+1]] の開発作業を,順序どおりに実施した場合の二つの対象サブシステムの遅延日数の合計 wt_a と,順序を入れ替えて実施した場合の二つの対象サブシステムの遅延日数の合計 wt_b を求める。
    4. 開発作業の実施順序を入れ替えることによって遅延日数の合計が減る場合(wt_a>wt_b)には,開発作業の実施順序を入れ替える。
    5. 開発作業の実施順序を入れ替えた場合,i が0でなければ,i を1減らす。
    6. 入れ替えなかった場合,i を1増やす。
  • i番目の対象サブシステムの開発作業が終わるまでの開発作業日数の合計を ft としたとき,i+1番目の対象サブシステムの開発作業が終わったときの遅延日数 wt は,次式で求められる。
    pm09_2.gif
    ここで,job_term と target_term は,i+1番目に開発作業を実施する対象サブシステムの開発作業日数と目標作業期間である。
pm09_3.gif

設問1

プログラム1中の に入れる正しい答えを,解答群の中から選べ。
a に関する解答群
  • i + j
  • i + j - 1
  • i - j
  • i - j + 1
b に関する解答群
  • i + 1
  • i - 1
  • job_no
  • job_no + 1
  • job_no - 1
c に関する解答群
  • i + 1
  • i - 1
  • i++
  • i--
  • ++i
  • --i
d に関する解答群
  • =
  • +=
  • -=
解答選択欄
  • a:
  • b:
  • c:
  • d:
  • a=
  • b=
  • c=
  • d=

解説

この設問の解説はまだありません。

設問2

関数 job_scheduling を実行したときに得られる対象サブシステムの開発作業順序などを出力する関数 print_schedule を作成した。次の記述中の に入れる正しい答えを,解答群の中から選ベ。
  • 関数 print_schedule の仕様は次のとおりである。ここで,引数の値に誤りはないものとする。
    機能:
    対象サブシステムの開発作業順序などを出力する。
    引数:
    num_s  対象サブシステム数
    job   対象サブシステム情報(JOB型の配列)
    job_sch  開発作業順序(int型の配列)
  • 図1に示す五つの対象サブシステムの対象サブシステム情報に対して関数 job_scheduling を実行した。このときに得られた開発作業順序を,図2に示す。
    pm09_4.gif
  • 続けて,関数 print_schedule を実行した。その出力結果の3行目を図3に示す。
    pm09_5.gif
pm09_6.gif
e,f に関する解答群
  • 0
  • 27
  • 44
  • 46
  • 57
  • 60
  • 73
  • 86
解答選択欄
  • e:
  • f:
  • e=
  • f=

解説

この設問の解説はまだありません。

Pagetop