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

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

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

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

〔プログラムの説明〕
 5台のバスが走行する路線上の10か所の停留所(以下,バス停という)のそれぞれに取り付けられた表示装置に,バスの運行時間中,次のバスが到着するまでの待ち時間(以下,到着待ち時間という)を分単位で 表示するシステムがある。関数 update_wait_time は,このシステムにおいて,各バス停に表示する到着待ち時間を計算するプログラムである。 表示する到着待ち時間は,関数 update_wait_time が実行されたときに更新される。
  • 関数 update_wait_time の引数は,次のとおりである。ここで,引数の値に誤りはないものとする。
    bus_id
    バスの車体番号
    busstop
    バス停の番号
    route
    路線表(構造体BUSSTOPの配列)
    bus
    路線上を走行するバスの一覧(構造体BUSの配列)
  • 構造体 BUSSTOP の構造は,次のとおりである。
    pm09_2.png
  • 構造体 BUS の構造は,次のとおりである。
    pm09_3.png
  • 路線表 route は,バス停の番号(以下,バス停番号という)0~9を添字とする配列である。route には,図1のようにデータを格納する。
    pm09_4.png
    1. route[i].std_time(i=1,2,…,9)は,前のバス停(i-1)からこのバス停iまでの 標準所要時間である。バス停0における route[0].std_time の値は0とする。
    2. 各バス停iの到着待ち時間 route[i].wait_time(i=1,2,…,9)は,次に到着するバスが最後に発車したバス停aからこのバス停iまでの 標準所要時間 route[k].std_time(k=a+1,…,i)の合計である。 乗客の乗降にかかる時間は0とする。バス停0における route[0].wait_time の値は0とする。次に到着するバスがバス停0を発車していないとき,そのバス停iにおける到着待ち時間 route[i].wait_time には0を格納する。
  • バスの走行位置 bus[j].cur_pos(j=0,1,…,4)には,走行中の区間番号を格納する。あるバス停から次のバス停までの区間に対する区間番号には,区間の始まりとなるバス停番号を割り当てる。バス停0を発車していないバスの走行位置 bus[j].cur_pos には -1を格納する。また,バス停9に到着したバスの走行位置 bus[j].cur_pos には9を格納する。
  • プログラム中で使われる変数 preceding と succeeding の意味は次のとおりである。
    preceding
    busstop が示すバス停を直前に発車したバスが走行中の区間番号を格納する。busstop が示すバス停からバス停 9 までの区間に走行中のバスがない場合は9とする。
    succeeding
    busstop が示すバス停に次に到着するバスが走行中の区間番号を格納する。バス停0から busstop が示すバス停までの区間に走行中のバスがない場合は-1とする。
     バス停5をバスBが発車するとき,バス停5を直前に発車したバスAが区間6を走行し,次にバス停5に到着するバスCが区間3を走行しているときの例を,図2に示す。
    pm09_5.png
  • 関数 update_wait_time は,バスがバス停0~8を発車するとき又はバス停9に到着したときに呼び出され,bus_id で識別されるバスの走行位置を更新し,busstop が示すバス停から preceding が示す区間の始まりとなるバス停までの,各バス停に表示する到着待ち時間 route[i].wait_time(i=busstop,…,preceding) を計算する。
     なお,複数台のバスがバス停0~8の異なるバス停を同時に発車する場合,又はあるバスがバス停9に到着したときに別のバスがバス停0~8を発車する場合には,関数 update_wait_time は,バスの一覧 bus の添字の昇順に1台分ずつ実行される。
  • 一つの区間を複数台のバスが同時に走ることはない。
pm09_6.png

設問1

プログラム中の に入れる正しい答えを,解答群の中から選べ。
a に関する解答群
  • bus_id == bus[j].id
  • bus_id != bus[j].id
  • bus_id == j
  • bus_id != j
b に関する解答群
  • -1
  • busstop
  • bus[j].cur_pos
  • bus[j].cur_pos + 1
  • bus[j].cur_pos - 1
  • j
c に関する解答群
  • preceding == -1
  • preceding == STPNUM - 1
  • preceding != -1
  • succeeding == -1
  • succeeding == 0
  • succeeding != 0
d に関する解答群
  • += route[i - 1].std_time
  • += route[i - 1].wait_time
  • += route[i].std_time
  • = route[i - 1].std_time
  • = route[i - 1].wait_time
  • = route[i].std_time
解答選択欄
  • a:
  • b:
  • c:
  • d:
  • a=
  • b=
  • c=
  • d=

解説

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

設問2

次の記述中の に入れる正しい答えを,解答群の中から選べ。

 サービス向上のため,路線上のそれぞれのバス停に取り付けられた表示装置に,到着待ち時間に加えて,そのバスの運行遅延時間を分単位で表示することにした。そのために,関数 update_wait_time に,各バス停に表示する運行遅延時間を計算する処理を追加する。ここで,プログラム中のadには,正しい答えが入っているものとする。
  • バスの運行遅延時間は,バス停0から最後に発車したバス停までの標準所要時間の合計と実際にかかった時間の合計の差である。
  • 関数 update_wait_time の引数に,前のバス停からの実際にかかった時間(分) act_time を追加する。ここで,引数の値に誤りはないものとする。
  • 構造体 BUSSTOP の要素に,次に到着するバスの運行遅延時間(分) delay_time を追加する。
  • 構造体 BUS の要素に,バスの運行遅延時間(分) cur_delay を追加する。
  • バスが定刻よりも早くバス停0~8を発車することはない。
  • 処理の追加に対応するために,プログラムを表のとおりに変更する。
pm09_7.png
e に関する解答群
  • = act_time - route[busstop].std_time
  • = bus[j - 1].cur_delay
  • = route[busstop].delay_time
  • += act_time - route[busstop].std_time
  • += bus[j - 1].cur_delay
  • += route[busstop].delay_time
f に関する解答群
  • = act_time
  • = bus[j].cur_delay
  • = route[busstop].delay_time
  • += act_time
  • += bus[j].cur_delay
  • += route[busstop].delay_time
解答選択欄
  • e:
  • f:
  • e=
  • f=

解説

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

Pagetop