最終更新日:2026年9月2日
fe technology basic-theory state-transition
まず結論
状態遷移表は、現在の状態と入力の組合せから、次の状態を確認するための表です。
まず、表の1マスを次のように読みます。
表の列 = 今いる状態
表の行 = 今回の入力
交点 = 次に行く状態
つまり、基本はこれだけです。
現在状態 + 入力 → 次状態
科目Aでは、次の順で追えば解けます。
現在状態を確認する
↓
入力との交点を見る
↓
次の状態へ更新する
↓
次の入力を処理する
一番大切なのは、状態が変わったら、次の入力は新しい状態から読むことです。
直感的な説明
状態遷移表は、機械やシステムの「動作ルール表」と考えると分かりやすいです。
たとえば、次のような表があるとします。
| 入力\状態 | S1 | S2 | S3 |
|---|---|---|---|
| t1 | S2 | S1 | |
| t2 | S3 | S2 |
この表の
t1行 × S1列 = S2
は、単に「S2」と覚えるのではなく、次の文章として読みます。
現在S1にいて、t1が入力されたら、次はS2へ移る。
同じように、
t2行 × S2列 = S3
なら、
現在S2にいて、t2が入力されたら、次はS3へ移る。
という意味です。
交点に書かれている状態は、今いる状態ではなく、入力後の「次の状態」です。
条件分岐表として考える
プログラムに置き換えると、状態遷移表は次のようなルールを1枚にまとめたものです。
if state == "S1" and signal == "t1":
state = "S2"
つまり、
今どこにいる?
+
何が入力された?
↓
次はどこへ行く?
を表にしたものです。
たとえば、自動販売機でも同じ考え方です。
- 待機中に硬貨が入る
- 商品選択待ちへ移る
- 商品ボタンが押される
- 商品を出して待機中へ戻る
状態遷移表は、このような「状態と入力による変化」を整理しています。
定義・仕組み
状態遷移表には、主に次の3つがあります。
| 項目 | 意味 |
|---|---|
| 現在状態 | 今いる状態 |
| 入力 | 今回与えられる信号やイベント |
| 次状態 | 入力後に移る状態 |
表を1マスずつ文章にする
状態遷移表が分かりにくいときは、1マスずつ文章に変換すると理解しやすくなります。
| 入力\状態 | S1 | S2 | S3 |
|---|---|---|---|
| t1 | S2 | S1 | |
| t2 | S3 | S2 |
この表なら、次のように読めます。
S1でt1 → S2
S2でt1 → 変化なし
S3でt1 → S1
S1でt2 → 変化なし
S2でt2 → S3
S3でt2 → S2
表全体を一度に理解しようとせず、「現在状態・入力・次状態」の3点だけを見るのがコツです。
状態が変わったら見る列も変わる
現在状態がS1で、入力t1によってS2へ移ったとします。
S1 --t1--> S2
次の入力を処理するときは、もうS1ではありません。
次はS2列を見ます。
S1でt1 → S2
↓
現在状態をS2へ更新
↓
次の入力はS2列から読む
空欄の扱い
問題文で「空欄は状態が変化しない」と指定されている場合、現在状態をそのまま維持します。
現在状態:S2
入力:t1
交点:空欄
→ S2のまま
ただし、入力そのものを無視するわけではありません。
その入力は1回分処理済みなので、次の入力へ進みます。
空欄を「処理終了」や「未定義」と決めつけず、意味は必ず問題文で確認します。
不合格状態・エラー状態
文字列検査では、特定の状態へ入ると不合格になる場合があります。
状態 e に入る
→ 不合格
この場合、一度でもeへ遷移した選択肢は不合格です。
最後の文字まで読む必要がない場合もあります。
科目Aでどう出る?
状態遷移表の問題では、複数の入力を順番に与え、最後の状態を求める形式がよく出ます。
まず見るのは「現在状態」と「今回の入力」
たとえば、現在状態がS1で、入力がt2なら、
S1列を見る
↓
t2行を見る
↓
交点を確認する
という順番です。
交点がS3なら、
S1 --t2--> S3
となります。
次の入力では、S1ではなくS3列を見ます。
作業表を書いて追う
次の作業表を自分で書くと、途中の見落としを防げます。
| 手順 | 現在状態 | 入力 | 次状態 |
|---|---|---|---|
| 1 | S1 | t1 | S2 |
| 2 | S2 | t2 | S3 |
| 3 | S3 | t1 | S1 |
解く手順は次のとおりです。
- 初期状態を書く
- 入力を1つだけ読む
- 表の交点を確認する
- 現在状態を次状態へ書き換える
- 次の入力へ進む
文字列を検査する問題
文字列検査では、文字を左から1文字ずつ読みます。
文字そのものを見る
↓
数字・符号・小数点・空白などに分類する
↓
現在状態との交点を見る
↓
次状態へ更新する
例えば、次のように記録します。
+0010:a → c → b → b → b → b
-1 :a → c → b
12.2 :a → b → b → d → e
9.空白:a → b → d → a
不合格状態がeなら、eを含む経路だけを探せば判断できます。
状態の意味を推測する
状態名がa、b、cのような記号でも、遷移から意味を推測できます。
| 状態 | 推測できる意味の例 |
|---|---|
| a | 初期状態、または入力前の状態 |
| b | 数字を読んでいる状態 |
| c | 符号を読んだ状態 |
| d | 小数点を読んだ直後 |
| e | 不合格状態 |
ただし、状態の意味は補助的な理解です。
最終的な判断は、必ず問題文の状態遷移表に従います。
判断表
| 問題文の表現 | 見るポイント |
|---|---|
| 現在の状態がS1 | 最初に見る列はS1 |
| 入力を順番に与える | 1つずつ処理する |
| 交点にS3とある | 入力後の次状態がS3 |
| 文字列を左端から検査 | 左から1文字ずつ読む |
| 状態eなら不合格 | eへ一度でも入るかを見る |
| 空欄は変化なし | 現在状態を維持する |
| 最後の状態を求める | 全入力を処理した後の状態を見る |
| 行が入力、列が状態 | 見出しを確認して交点を読む |
どんな場面で使う?
状態遷移の考え方は、状態によって動作が変わるシステムで使われます。
たとえば、次のような場面です。
- 自動販売機
- エレベーター
- 信号機
- ログイン処理
- 通信プロトコル
- 組込み機器の制御
- ゲームキャラクターの動作
- 入力文字列の形式検査
- 数値や識別番号の入力チェック
同じ入力でも、現在状態が違えば次の動作が変わることがあります。
入力が同じ
≠
結果も同じ
現在状態と入力をセットで見ることが重要です。
よくある誤解・混同
交点に書かれている状態を「現在状態」と考える
交点に書かれているのは、入力後の次状態です。
現在S1 + 入力t2
交点S3
→ 次状態はS3
この1マスを文章にできるようになると、表全体が読みやすくなります。
最初の状態の列を最後まで見る
一度状態が変わった後も、最初の状態の列を見続ける誤りです。
S1 → S3
となった後は、次の入力をS3列で確認します。
状態が変わるたびに、見る列も変わります。
空欄なら入力を無視する
空欄が「状態変化なし」を表す場合でも、入力は1回分処理されています。
状態はそのまま
↓
次の入力へ進む
同じ入力をもう一度読むわけではありません。
行と列を逆に読む
表によって、行と列の配置は異なります。
- 行が入力、列が状態
- 行が状態、列が入力
どちらの場合もあります。最初に見出しを確認します。
状態遷移表と状態遷移図は別の仕組み
状態遷移表と状態遷移図は、表現方法が違うだけで、表している内容は同じです。
| 表現 | 特徴 |
|---|---|
| 状態遷移表 | 交点から次状態を探しやすい |
| 状態遷移図 | 状態と移動の流れを直感的に見やすい |
どちらも基本は次の関係です。
現在状態 + 入力 → 次状態
まとめ(試験直前用)
- 列=現在状態、行=入力、交点=次状態と読む
- 状態遷移表は、現在状態と入力から次状態を決める表
- 交点に書かれているのは入力後の次状態
- 入力は必ず1つずつ順番に処理する
- 遷移後は、新しい状態から次の入力を読む
- 空欄の意味は問題文を確認し、「変化なし」なら現在状態を維持する
- 行と列の見出しを先に確認する
- 迷ったら、
手順|現在状態|入力|次状態の作業表を書く