C言語入門:③-1 状態遷移【応用ロジック】

②基礎ロジックまでの学習が完了している場合、基礎的なプログラムは書ける状態になっています。

しかし、実際のプログラムでは、処理が単純に進むだけではなく、状況に応じて動きが変わることがほとんどです。

例えば、自動販売機や電子レンジなどでは、現在の状態によって次の動作が変わります。

本記事では、このような仕組みを実現するための「状態遷移」について解説します。

本記事の目的・学習目標

学習目標は次の3点です。

  • 状態遷移とは何かを理解する
  • 状態によって処理が変わる仕組みを理解する
  • 状態を使ったプログラムの流れを理解する

この記事での学習が完了することで、実際のプログラムに近い「動きのある処理」を設計できるようになります。

状態遷移とは

状態遷移とは、プログラムの「状態」が変化することで、処理の流れが変わる仕組みです。

状態とは、「今プログラムがどの段階にあるか」を表すものです。

例えば自動販売機の場合:

  • 0:待機状態
  • 1:お金投入済み
  • 2:おつり払い出し中

このように数値で状態を表すことができます。

状態遷移を使用することで「今どの状態か」を基準に考えることで、複雑な処理を整理することができるようになります。

if文との違い

条件の判断ではif文の使用も可能ですが、違いとしては「状態遷移は判断状態を保持する」「if文では1度の判断を行う」となります。

  • 状態遷移 = 「過去の結果(状態)を持ち続ける仕組み」
  • if文 = 「その場の条件だけで判断」

状態遷移の基本構造

次にプログラムでどのように状態を扱うのかについて構造をイメージ図にしてみます。

例(自動販売機):

上図の例では常に状態が①から③のいずれかになっています。

そして、各状態ではその状態でできる処理が限られています。

状態遷移の作り方

状態遷移を使ったプログラムは、次のように動きます。

  1. 初期状態を設定する
  2. 現在の状態を確認する
  3. 状態に応じた処理を行う
  4. 必要に応じて状態を変更する
  5. 次の処理へ進む

この動作に合わせ、必要なコードを作成します。

手順は次の通りです。

  1. 状態を定義する
  2. 状態を管理する変数を作る
  3. 各状態での処理を決める
  4. 状態の変化条件を決める

状態遷移のコード例

前述の自動販売機を例にして状態遷移を使ったプログラムを考えてみます。

状態は次の3つです。

  • ⓪待機状態(お金が入っていない)
  • ①お金投入済み
  • ②おつり払い出し中

この状態を使って、処理の流れを管理します。

上記コードでは状態に対する処理動作は待機状態時のみ記載しています。

また、処理動作などはコメントにて記載しているため、具体的に動作させたい処理は実際のプログラムに応じてこの部分を記述します。

今回のコードでは、「お金が投入された」という処理を簡単に表現していますが、
実際のシステムでは、ハードウェアと連携して判定を行います。

まとめ

本記事では、「状態遷移」について解説しました。

状態遷移は、プログラムの動きを設計するための重要な考え方です。

今回の学習内容は以下の通りです。

  • 状態遷移は、状態によって処理が変わる仕組み
  • 状態を使うことで処理を整理できる
  • 状態は変数で管理する
  • 条件によって状態を変化させる

この考え方を身につけることで、実際のアプリケーションのようなプログラムが作れるようになります。

本記事で登場した用語

本シリーズでは、記事で登場する専門用語を補助知識カテゴリの「④-4 用語辞典」 にまとめています。

① 状態遷移

状態の変化によって処理が変わる仕組み

② 状態

プログラムの現在の段階を表すもの

関連記事

次の記事では、配列と文字列 について解説します。

▶ 次の記事
C言語入門:③-2 配列と文字列【応用ロジック】

◀ 前回の記事
C言語入門シリーズ:③-0 応用ロジック【概要】

◆同じカテゴリの記事一覧(概要ページ)
C言語入門シリーズ:③-0 応用ロジック【概要】(全5記事)

◆シリーズの記事一覧
C言語入門シリーズ:プログラムの基本構造【記事一覧】

2 COMMENTS

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です