HOME»基本情報技術者平成22年秋期問題»午後問9
基本情報技術者過去問題 平成22年秋期 午後問9
⇄問題文と設問を画面2分割で開く⇱問題PDF問9 ソフトウェア開発(C)
次のCプログラムの説明及びプログラムを読んで,設問1,2に答えよ。
〔プログラムの説明〕
5台のバスが走行する路線上の10か所の停留所(以下,バス停という)のそれぞれに取り付けられた表示装置に,バスの運行時間中,次のバスが到着するまでの待ち時間(以下,到着待ち時間という)を分単位で 表示するシステムがある。関数 update_wait_time は,このシステムにおいて,各バス停に表示する到着待ち時間を計算するプログラムである。 表示する到着待ち時間は,関数 update_wait_time が実行されたときに更新される。
〔プログラムの説明〕
5台のバスが走行する路線上の10か所の停留所(以下,バス停という)のそれぞれに取り付けられた表示装置に,バスの運行時間中,次のバスが到着するまでの待ち時間(以下,到着待ち時間という)を分単位で 表示するシステムがある。関数 update_wait_time は,このシステムにおいて,各バス停に表示する到着待ち時間を計算するプログラムである。 表示する到着待ち時間は,関数 update_wait_time が実行されたときに更新される。
- 関数 update_wait_time の引数は,次のとおりである。ここで,引数の値に誤りはないものとする。
- bus_id
- バスの車体番号
- busstop
- バス停の番号
- route
- 路線表(構造体BUSSTOPの配列)
- bus
- 路線上を走行するバスの一覧(構造体BUSの配列)
- 構造体 BUSSTOP の構造は,次のとおりである。
- 構造体 BUS の構造は,次のとおりである。
- 路線表 route は,バス停の番号(以下,バス停番号という)0~9を添字とする配列である。route には,図1のようにデータを格納する。
- route[i].std_time(i=1,2,…,9)は,前のバス停(i-1)からこのバス停iまでの 標準所要時間である。バス停0における route[0].std_time の値は0とする。
- 各バス停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とする。
- 関数 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台分ずつ実行される。 - 一つの区間を複数台のバスが同時に走ることはない。
設問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 に,各バス停に表示する運行遅延時間を計算する処理を追加する。ここで,プログラム中のa~dには,正しい答えが入っているものとする。
サービス向上のため,路線上のそれぞれのバス停に取り付けられた表示装置に,到着待ち時間に加えて,そのバスの運行遅延時間を分単位で表示することにした。そのために,関数 update_wait_time に,各バス停に表示する運行遅延時間を計算する処理を追加する。ここで,プログラム中のa~dには,正しい答えが入っているものとする。
- バスの運行遅延時間は,バス停0から最後に発車したバス停までの標準所要時間の合計と実際にかかった時間の合計の差である。
- 関数 update_wait_time の引数に,前のバス停からの実際にかかった時間(分) act_time を追加する。ここで,引数の値に誤りはないものとする。
- 構造体 BUSSTOP の要素に,次に到着するバスの運行遅延時間(分) delay_time を追加する。
- 構造体 BUS の要素に,バスの運行遅延時間(分) cur_delay を追加する。
- バスが定刻よりも早くバス停0~8を発車することはない。
- 処理の追加に対応するために,プログラムを表のとおりに変更する。
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=イ
解説
この設問の解説はまだありません。