基本情報技術者 2016年 秋期 午前(科目A) 問03
問題文
300円の商品を販売する自動販売機の状態遷移図はどれか。ここで、入力と出力の関係を“入力/出力”で表し、入力の“”は“100円硬貨”を、““は“100円硬貨以外”を示し、~は状態を表す。入力が“”の場合はすぐにその硬貨を返却する。また、終了状態に遷移する際、出力の“1”は商品の販売を、“0”は何もしないことを示す。

選択肢
ア:(正解)
イ:
ウ:
エ:
300円の商品を販売する自動販売機の状態遷移図【午前2 解説】
要点まとめ
- 結論:100円硬貨 a を 3 回投入したときにのみ商品を出力する遷移図は ア で、遷移の出力列は 0,0,1 となる。
- 根拠:状態 S0,S1,S2 をそれぞれ 0円,100円,200円 の蓄積と見なし、a は +100 円、b は即返却(自己ループ/出力 0)だから。
- 差がつくポイント:出力 1 が状態遷移の「遷移ラベル」に付く点(Mealy 型)と、いつリセットして S0 に戻るかを正確に確認すること。
正解の理由
選択肢 ア は状態を「S0=0円、S1=100円、S2=200円」と定義し、入力 a(100円)で S0→S1(a/0)、S1→S2(a/0)、S2→S0(a/1)と遷移します。
これにより 100 円を 3 回投入したときのみ遷移の出力が 1 となり商品販売(出力 1)を行い、その直後に S0 に戻って初期状態に復帰します。b(100円以外)はどの状態でも自己ループ b/0 で硬貨を返却する仕様に一致します。以上からアが問題文の仕様を満たします。
これにより 100 円を 3 回投入したときのみ遷移の出力が 1 となり商品販売(出力 1)を行い、その直後に S0 に戻って初期状態に復帰します。b(100円以外)はどの状態でも自己ループ b/0 で硬貨を返却する仕様に一致します。以上からアが問題文の仕様を満たします。
よくある誤解
- 「出力は状態に紐づく(Moore 型)」と誤認し、出力 1 を S2 の状態ラベルに付けてしまうと、どの入力で販売するかが不明確になります。
- b を「次の状態へ進める入力」と勘違いして、状態遷移に用いてしまうミス(b は返却なので状態を変えない)。
- 3 回目の a で出力 0 とする選択肢(ウ)や、2 回目で出力 1 とする選択肢(イ)を見落としてタイミングを間違えること。
解法ステップ
- 要求仕様を簡潔に表現:商品価格 300 円、100 円硬貨 a、その他 b は即返却。
- 累積金額を 0,100,200 円の 3 状態 S0,S1,S2 でモデル化する。
- 入力 a は状態の金額を +100 し、300 円に到達した遷移で出力 1 を出す。到達後はリセットして S0 に戻す。
- 入力 b はどの状態でも硬貨を返し(出力 0)、状態を変えない(自己ループ)。
- 各選択肢の遷移ラベル(入力/出力)と状態遷移が仕様に合致するか照合する。
選択肢別の誤答解説
- ア(正解):S0=0円, S1=100円, S2=200円 と解釈すると a による遷移出力が 0,0,1 となり仕様通り。b は自己ループで返却(b/0)。
- イ:S1→S2 が a/1 になっており、2 回目の 100 円投入で販売してしまう。価格 300 円に合わない。
- ウ:S2→S0 が a/0 になっており、3 回目の投入で商品を販売しない(出力 1 が無い)。仕様に反する。
- エ:a がすべて自己ループとなっており a を投入しても状態が進まない。さらに b で状態を進めているため「100 円硬貨(a)」と「その他(b)」の扱いが逆転している。
補足コラム
この問題は Mealy 型の有限状態機械の典型例です。出力が「遷移ラベル」に添えられているため、どの入力で何を出力するかが明示されます。自動販売機のように「入力(硬貨)に即座に反応して商品を出す」設計は Mealy が自然です。もし出力を状態につける(Moore 型)場合は、状態遷移の設計が変わり、遷移と出力のタイミングを注意深く扱う必要があります。
FAQ
Q1: S0 が二重丸(受理状態)になっている意味は?
A1: 問題図の二重丸は通常「終了(受理)状態」を示しますが、本問では初期状態へ戻ることを明示するためや視覚的強調の意味合いもあります。遷移の出力が正しいかを優先して判断してください。
A1: 問題図の二重丸は通常「終了(受理)状態」を示しますが、本問では初期状態へ戻ることを明示するためや視覚的強調の意味合いもあります。遷移の出力が正しいかを優先して判断してください。
Q2: もしお釣り処理が必要なら遷移図はどう変わる?
A2: 300 円を超える投入に対しては超過分を返す処理を遷移に追加します。例えば 100 円硬貨以外(50 円等)や複数硬貨の組合せがある場合は状態数や遷移の出力でお釣り額を表現します。
A2: 300 円を超える投入に対しては超過分を返す処理を遷移に追加します。例えば 100 円硬貨以外(50 円等)や複数硬貨の組合せがある場合は状態数や遷移の出力でお釣り額を表現します。
Q3: 出力 1 を状態の到達時ではなく遷移で表す理由は?
A3: 実際の装置では「投入というイベント」に対して即時に応答(商品排出や返却)するため、イベントと出力を同じラベルにする Mealy 型が直感的で実装もしやすいからです。
A3: 実際の装置では「投入というイベント」に対して即時に応答(商品排出や返却)するため、イベントと出力を同じラベルにする Mealy 型が直感的で実装もしやすいからです。
関連キーワード: 自動販売機、状態遷移図、有限状態機械、Mealy、出力/入力、100円硬貨、累積金額、遷移タイミング、状態設計

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

