今回は、実際にフローチャートを自分で作成する演習を行います。インターネットや書籍でフローチャートの書き方の記事を見ると、「バブルソート」や「クイックソート」を題材にしているものがあります。これらは、並び替え処理を行うための代表的なアルゴリズムとして昔から利用されています。フローチャートを書く演習としては、若干難しすぎます。そこで、今回はもう少し簡単な題材でフローチャートの書き方を練習していきましょう。
「フローチャートの書き方」は以下の記事で説明をしています。併せて、確認してみてください。
今回は私の解説ではなく、実際に演習を行います。ぜひ、チャレンジしてみてください!!
分かりました。チャレンジしてみます!!
演習
あなたは、駅の自動改札機用のプログラムを作ることとなりました。この目的の処理を行うプログラムのアルゴリズム及びフローチャートを考えてください。なお、実際は非常に複雑な処理を考えなければなりませんが、初心者用の演習なので、処理自体を簡素化しています。
交通系ICカードで自動改札を出る時の金額処理を行うプログラムを作る
実装する処理は、次の通りです。
- 交通系ICカードには、チャージ済みの金額が保存されている
- 自動改札で入った時に、その駅の情報がICカードに記憶される
- 出る時に、その駅までの運賃が計算され、残金から引かれ、出口のバーが開く
- もし残金が足りない場合、自動改札機のランプが光り、同時に警告音が鳴る。もちろん出口のバーは開かない
アルゴリズムを考える
アルゴリズムの考え方の考え方については、以下の記事で説明しています。
また、プログラムの考え方については、以下の記事で説明しています。
これらをもとに、改札口の処理を行うアルゴリズムを考えてみましょう。
まず、アルゴリズムを考える前に、プログラムの3つの構成要素に注目します。構成要素ごとに、内容を詳細に洗い出していきます。
【プログラムの構成】データの入力
最初に、「必要なデータは何か」「どのようにして用意するか」を考えます。今回の場合、以下のデータが挙げられます。
- チャージ済みの金額
- 乗った駅の情報
駅を出る時の運賃の金額も必要なデータですが、この金額は計算で求めるものです。したがって、データの入力部分では除外します。
また、これらのデータをどのようにして用意するかですが、改めてプログラム内でユーザに入力させるものではなく、電車に乗る時にすでに保存されているものです。したがって、保存済みの情報を取り出して、利用することになります。
【プログラムの構成】データの処理
データの入力部分で必要なデータの準備は終わりました。次に考えるのは、「準備したデータをどのように使って、目的の結果を得るか」になります。今回の場合、以下の処理が必要となります。
- 運賃の計算
- 残高によって、出る時の自動改札機の動作を決める
- 残金がある場合、残金から運賃を引いて、改札機のゲートを開ける
- 残金が足りない場合、残金から運賃は引かず、改札機のランプを光らせ、警告音を鳴らす
運賃の計算
まず最初に行わなければならないのは、「乗車区間の運賃の計算」です。この演習では、具体的な金額の情報がありません。したがって、細かい計算式を考えるのではなく、単純に「運賃を計算する」いう処理だけを考えるだけで構いません。
残高によって、出る時の自動改札機の動作を決める
次に行うのは、ICカードの残金から利用した区間の運賃を引き落とす処理です。単純な引き算ですが、注意しなければならないことがあります。それは、残金が足りない場合です。皆さんも経験があるかもしれませんが、残金が足りないと自動改札機から出られません。乗り越し精算機に向かって、精算するか、チャージしなければなりません。その処理をアルゴリズムで考える必要があります。この処理を間違えると、残金が足りないのにも関わらず、出口から出られてしまうという大問題が発生してしまいます。
また、自動改札機を出る際には乗車した駅の情報を、ICカードから消去しなければなりません。忘れがちですが、重要な処理となります。もし、消し忘れると、ICカードにはまだ駅から出ていない、乗車し続けているという情報が残ったままになります。
以上のことから、このプログラムで行う処理を羅列すると以下のようになります。
「残金が運賃より金額が高いかどうかチェックする」
「もし、残金が運賃より高ければ、残金から運賃を引く」
「乗車した駅の情報をICカードから消去する」
「自動改札機のゲートを開ける」
「乗客が自動改札機のゲートを出たら、ゲートを閉める」
「もし、残金が運賃より低ければ」
「ランプを光らせる」
「警告音を鳴らす」
【プログラムの構成】結果の出力
今回のプログラムでは、特に結果を出力する必要がありません。したがって、この結果の出力要素は不要となります。
考えたアルゴリズムの結果
以上のことから、今回の処理を実現するアルゴリズムは次のようになります。
- チャージ済みの料金を取得する
- 乗った駅の情報を取得する
- 乗車区間の運賃を計算する
- もし、残金が運賃より高ければ
- 残金から運賃を引く
- 乗車した駅の情報を消去する
- 自動改札機のゲートを開く
- 自動改札機のゲートを閉める
- もし、残金が運賃より低ければ
- 自動改札機のランプを光らせる
- 自動改札機の警告音を鳴らす
このように、プログラムを作る前に、まず日本語で行わせる処理を書き出してみると良いでしょう。
フローチャートを書く
アルゴリズムができあがったので、次にそのアルゴリズムをフローチャートで表現します。
フローチャートの書き方については、以下の記事で説明しています。
今回は、以下のようなフローチャートになります。なお、上の記事でも説明していますが、このサイトではフローチャートを書く場合、簡単な記号しか使用していませんので、注意してください。
フローチャートが完成したら、処理が正しいかどうか実際にフローチャートをなぞってみてください。その場合、具体的な値を入れると、チェックしやすくなります。
以下がチェックのサンプルです。
- 「残金が500円、運賃が300円の場合」
- 「残金が運賃よりも高いか?」 (「500円は300円よりも高いか?」は正しいので結果は「yes」)
- 残金=500円-300円=200円(ICカードに保存される、新しい残金)
- 乗車駅の情報を消去
- 改札機のゲートが開く
- 改札機のゲートが閉まる
- 無事、改札機での運賃処理が完了
- 「残金が300円、運賃が500円の場合」
- 「残金が運賃よりも高いか?」 (「300円は500円よりも高いか?」は間違いなので結果は「no」)
- ランプが光る
- 警告音がなる
- 残金から運賃は引かれない、改札機から出られない
このように、具体的な値を入れてみると、フローチャートの流れをきちんと確認することができます。フローチャートが完成したので、この後にプログラム言語を使って実際にプログラムを入力していきます。
まとめ
今回は、アルゴリズムとフローチャートを書くための演習を行いました。
- アルゴリズムを考える場合、まずプログラムの3つの構成要素について考える
- 詳細な内容は、日本語で表記しても構わない
- アルゴリズムが完成したら、フローチャートを書く
- フローチャートを書いたら、トレースをして確認する
フローチャートはプログラム言語に依存しません。したがって、実際はどのプログラム言語を使ってもプログラムを記述することができます。プログラム言語を理解することも大事ですが、アルゴリズムとフローチャートを書くことも非常に重要なことです。
どうですか? きちんと書くことができましたか。
今まで、きちんと書いてこなかったので、ちょっと苦労しました。でも、これが書けると、実際のプログラムはすぐに入力できそうです!!