基本情報技術者過去問題 平成30年秋期 午後問9

問9 

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

 本問は,図1に示す路線構成の鉄道模型における列車の運行をシミュレーションするプログラムである。表1は,図1の説明である。
〔列車を進行させるルール〕
  • 各列車は,あらかじめ決められた始発駅から,あらかじめ決められた終着駅を行先として,路線を後戻りすることなく進行する。
  • 一つの区間には,同時に一つの列車しかいることができない。
  • 各区間の入口には信号機があり,赤又は緑を表示する。
  • 各列車は,終着駅を出口とする区間にいるときは無条件に進行できる。終着駅を出口とする区間にいる列車が進行した場合,その列車は路線上から取り除かれる。
  • 各列車は,現在いる区間の出口で接続する区間(以下,次区間という)が次の条件をいずれも満たしたとき,次区間に進行できる。
    1. 次区間の信号機の表示が緑である。
    2. 次区間に進行すると,最終的には行先とする終着駅に到達できる。
  • 次の二つの処理を繰り返し実行して各列車を進行させる。
    1. 路線を構成する全ての区間の信号機それぞれについて,区間内に列車がいるときは表示を赤に,列車がいないときは表示を緑にする。
    2. 路線を構成する全ての区間それぞれについて,次の処理を行う。
      (ア) 終着駅を出口とする区間に列車がいる場合は,(4)に従って列車を進行させ,路線上から取り除く。
      (イ) (ア)で述べた以外の区間に列車がいる場合は,(5)に従って進行できる列車を進行させ,進行した区間の信号機の表示を赤にする。

〔プログラム1の説明〕
  • 構造体 block_info は,鉄道模型の区間を表現する。
    train:
    区間内にいる列車を表現した,構造体 train_info へのポインタである。区間内に列車がいないとき,NULLを設定する。
    next:
    次区間を表現した,構造体 block_info へのポインタを格納する配列(配列の大きさは2)である。終着駅を出口とする区間では,いずれの要素にもNULLを設定する。次区間が一つしかなければ,そのポインタは最初の要素に設定し,2番目の要素にはNULLを設定する。
    signal:
    信号機に表示する色を示す。次のいずれかの定数値をとる。
    RED  表示は赤
    GREEN 表示は緑
  • 構造体 train_info は,鉄道模型の列車を表現する。
    number:
    列車の番号である。
    dest:
    列車の終着駅を出口とする区間を表現した,構造体 block_info へのポインタである。
  • 関数 set_signals の仕様は,次のとおりである。
    機能:
    全ての区間の信号機それぞれについて,区間内に列車がいるときは表示を赤に,列車がいないときは表示を緑にする。
    引数:
    blocks 全ての区間を表現した,構造体 block_info の配列
    nblock blocks の要素数

設問1

プログラム1中の に入れる正しい答えを,解答群の中から選べ。
a に関する解答群
  • block->next[0]->train == NULL
  • block->next[1]->train == NULL
  • block->next[0]->train == NULL || block->next[1]->train == NULL
  • block->next[0]->train == NULL && block->next[1]->train == NULL
  • block->signal == RED
  • block->train == NULL
  • block->train != NULL

解答選択欄

  • a:

解答

  • a=

解説

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

設問2

関数 proceed は,進行できる全ての列車を進行させるプログラムである。プログラム2中の に入れる正しい答えを,解答群の中から選べ。

(プログラム2の説明〕
  • 関数 proceed の仕様は,次のとおりである。
    機能:
    全ての区間それぞれについて,進行できる列車がいるかどうかを判定し,進行できると判定された列車を進行させる。終着駅を出口とする区間にいる列車を進行させた場合,その列車を路線上から取り除く。出口で他の区間と接続する区間にいる列車を進行させた場合,進行した区間の信号機の表示を赤にする。
    引数:
    blocks 全ての区間を表現した,構造体 block_info の配列
    nblocks blocksの要素数
  • 関数 proceed から呼び出される関数 find_block の仕様は,次のとおりである。
    機能:
    引数 block で示す区間が,引数 dest で示す区間に最終的に到達できる経路上にあるかどうかを判定する。
    引数:
    block 判定対象の区間を表現した,構造体 block_info へのポインタ
    dest 列車の終着駅を出口とする区間を表現した,構造体 block_info へのポインタ
    返却値:
    到達できるとき,1
    到達できないとき,0
pm09_5.gif/image-size:493×958
b に関する解答群
  • block->train->dest == NULL
  • block->train->dest != NULL
  • block == block->train->dest
  • block != block->train->dest
c に関する解答群
  • break
  • continue
  • return
d に関する解答群
  • dest, block
  • dest, block->next[i]
  • block, dest
  • block, block->next[i]
  • block->next[i], dest
  • block->next[i], block

解答選択欄

  • b:
  • c:
  • d:

解答

  • b=
  • c=
  • d=

解説

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

設問3

図1に示した鉄道模型の路線構成及び列車位置を表現した,構造体 block_info の配列を第1引数とし,その要素数9を第2引数として,プログラム3を実行した。プログラム3の実行が終了したときの状態について述べた次の記述中の に入れる正しい答えを,解答群の中から選べ。ここで,blocks[n] は区間 n を示す。
pm09_6.gif/image-size:378×208
 列車4がいるのは区間eである。また,区間eの出口で接続する区間はf
e に関する解答群
  • 0
  • 2
  • 3
  • 7
f に関する解答群
  • 一つあり,その信号機は緑を表示している
  • 一つあり,その信号機は赤を表示している
  • 二つあり,それらの信号機はいずれも緑を表示している
  • 二つあり,それらの信号機はいずれも赤を表示している
  • 二つあり,それらの信号機は,一方が緑を,もう一方が赤を表示している

解答選択欄

  • e:
  • f:

解答

  • e=
  • f=

解説

この設問の解説はまだありません。
【30年秋期 午後問題】
 問1 問2 問3 問4 問5 問6 問7 問8 問9 問10 問11 問12 問13
© 2010-2019 基本情報技術者試験ドットコム All Rights Reserved.

Pagetop