平成29年度 I-2-5

科目: 基礎科目 / 分野: 情報・論理 / 年度: 平成29年度

I-2-5 問題画像

出典:公益社団法人 日本技術士会「技術士第一次試験 過去問題」

BNF記法で<数値列>::=01|0<数値列>1と定義される数値列として、最も適切なものを選ぶ問題。0がn個並んだ後に1がn個並ぶ形の文字列を表す再帰的な定義の理解が必要。

解説

この問題で問われていること

<数値列>::=01|0<数値列>1(::=は定義、|はOR)で表現できる数値列を選ぶ問題。

解き方

① <数値列>::=01|0<数値列>1 は、01 の外側を 0 と 1 で包んでいく → 01、0011、000111… と「0がn個の後に1がn個」
② 0が3個・1が3個で、0が先に並ぶのは 000111
③ ④

正解が正しい理由

定義は、<数値列>が「01」であるか、または「0の後に<数値列>を挟んで1が続く」ものであることを意味する。これを繰り返し適用すると、01、0011、000111、00001111…と、0がn個続いた後に1がn個続く形の文字列(n≧1)が得られる。選択肢の中で、この形(0が3個の後に1が3個)に当てはまるのは、000111である。したがって④が正しい。

各選択肢について

覚えるべきポイント

BNFの再帰的定義<数値列>::=01|0<数値列>1は、0^n1^n(n≧1)という「0と1が同数で、0が先に並ぶ」形の文字列を生成する。再帰の基底(01)と再帰の展開を1段ずつ適用して確かめるとよい。

キーワード: BNF、再帰的定義、文法、数値列、情報・論理

出題履歴

類題(同じ論点の別問題)