![]()
平成30年 秋期 基本情報技術者 午後 問09
問09 C言語次のCプログラムの説明及びプログラムを読んで,設問1〜3に答えよ。 本問は,図1に示す路線構成の鉄道模型における列車の運行をシミュレーションするプログラムである。 表1は,図1の説明である。
![]() 図1 鉄道模型の路線構成及び列車位置
![]()
(1)各列車は,あらかしめ決められた始発駅から,あらかじめ決められた終着駅を 行先として,路線を後戻りすることなく進行する。 (2)一つの区間には,同時に一つの列車しかいることができない。 (3)各区間の入口には信号機があり,赤又は緑を表示する。 (4)各列車は,終着駅を出口とする区間にいるときは無条件に進行できる。 終着駅を出口とする区間にいる列車が進行した場合,その列車は路線上から取り除かれる。 (5)各列車は,現在いる区間の出口で接続する区間(以下,次区間という)が次の 条件をいずれも満たしたとき,次区間に進行できる。
A 次区間に進行すると,最終的には行先とする終着駅に到達できる。 A 路線を構成する全ての区間それぞれについて,次の処理を行う。 (ア)終着駅を出口とする区間に列車がいる場合は,(4)に従って列車を進行させ, 路線上から取り除く。 (イ)(ア)で述べた以外の区間に列車がいる場合は,(5)に従って進行できる列車を進行させ, 進行した区間の信号機の表示を赤にする。 (1)構造体 block_info は,鉄道模型の区間を表現する。 struct block_info {
(2)構造体 train_info は,鉄道模型の列車を表現する。 struct train_info {
(3)関数 set_signals の仕様は,次のとおりである。
〔プログラム1〕
#include <stddef.h>
#define RED (Ø)
#define GREEN (1)
struct train_info {
int number;
struct block_info* dest;
};
struct block_info {
struct train_info* train;
struct block_info* next[2];
int signal;
};
void set_signals(struct block_info[], int);
void set_signals(struct block_info blocks[], int nblocks) {
int i;
struct block_info* block;
for (i = Ø; i < nblocks; i++) {
block = &blocks[i];
it ( a ) {
block->signal = GREEN;
}
else {
block->signal = RED;
}
}
}
イ block->next[1]->train == NULL ウ block->next[Ø]->train == NULL || block->next[1]->train == NULL エ block->next[Ø]->train == NULL && block->next[1]->train == NULL オ block->signal == RED カ block->train == NULL キ block->train != NULL
〔プログラム2の説明〕 (1)関数 proceed の仕様は,次のとおりである。
(2)関数 proceed から呼び出される関数 find_block の仕様は,次のとおりである。
〔プログラム2〕
#include <stddef.h> void proceed(struct block_info[], int); int find_block(struct block_info*, struct block_info*); void proceed(struct block_info blocks[], int nblocks) { int i, j: struct block_info* block; for(i = nblocks - 1; i >= Ø; i--) { block = &blocks[i]; if (block->train == NULL) { continue; } if ( b ) { block->train = NULL; continue; } for(j = Ø; j < 2; j++) { if (block->next[j] == NULL) { continue; } if (block->next[j]->signal == RED) { continue; } if (find_block(block->next[j], block->train->dest) == 1) { block->next[j]->train = block->train; block->next[j]->signal = RED; block->train = NULL; c } } } } int find_block(struct block_info* block, struct block_info* dest) { int i; if(block == dest) { return 1; } for(i = Ø; i<2; i++) { if (block->next[i] == NULL) { continue; } if (find_block( d ) == 1) { return 1; } } return Ø; }b に関する解答群 ウ block == block->train->dest エ block != block->train->dest ウ block, dest エ block, block->next[i] オ block->next[i], dest カ block->next[i], block
〔プログラム3〕 void start(struct block_info[], int); void start(struct block_info blocks[], int nblocks) { int i; set_signals(blocks, nblocks); for (i = Ø; i < 4; i++) { proceed(blocks, nblocks); set_signals(blocks, nblocks); } }列車4がいるのは区間 e である。 また,区間 e の出口で接続する区間は f 。 e に関する解答群 イ ーつあり,その信号機は赤を表示している ウ ニつあり,それらの信号機はいずれも緑を表示している エ 二つあり,それらの信号機はいずれも赤を表示している オ ニつあり,それらの信号機は,一方が緑を,もう一方が赤を表示している
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2024 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
| ||||||||||||||||||||||||||||||