まずはアルゴリズムについて説明します。
アルゴリズムは、コンピュータに何か作業をしてほしいときに、その作業手順に従って作業してくれます。その作業手順をアルゴリズムといいます。
アルゴリズムは基本的にフローチャート(流れ図)を用いて、1つずつ手順を進めていくことで最終的に作業の結果が出てきます。
今回は単純なメダル払い出しのアルゴリズムを考えてみましょう。
メダルを払い出すには、ホッパーと言う機械があります。ホッパーと言う機械には、基本的にメダルを払い出すために動かしたり止めたりする情報(モーター)と、メダルを検知する情報(センサー)で構成されています。これをOn/OFF
させることでホッパーを制御することができますが、ちょっとだけ工夫してみることにしましょう。
例えば、動画「Medal Tank」のメダル払い出しがあります。
http://www.youtube.com/watch?v=QGdjT7gnIMU
動画では、メダルを100枚払い出す処理をしています。
これを、フローチャートに沿って処理を考えてみましょう。
・プロセスの開始
①まず、払い出したい枚数を「2」と入力し、Aという変数に代入します。
※変数とは、数字や文字などの情報を保存する役割があります。代入されると、代入された変数は上書きされます。
②入力が終わるとホッパーのモーターが動き、メダルが払い出されます。
③メダルが1枚払い出されると同時にカウントセンサーが検知します。
④カウントセンサーが検知したので、Aから1枚引いてAに代入します。
⑤Aが0以下であれば下へ、0以上であれば右を辿ります。
(このとき、Aは1なので、右を辿ります。)
⑥ホッパーのモーターが動き、メダルが払い出されます。(すでに動いています。)
⑦メダルが1枚払い出されると同時にカウントセンサーが検知します。
⑧カウントセンサーが検知したので、Aから1枚引いてAに代入します。
⑨Aが0以下であれば下へ、0以上であれば右を辿ります。
(このとき、Aは0になるので、下を辿ります。)
⑩ホッパーを停止させます。
・プロセスの終了
どうでしょうか、イメージが分かりますか?
こんな感じで処理の流れを記述します。これがアルゴリズムです。
さて、気付く方は気付くかもしれませんが、このアルゴリズムは欠陥がいくつかあります。こういう部分は実際にプログラミングしてホッパーとつないで実験することで知識として習得することができますが、文章だけではなかなか伝わらない部分です。実践して検証すれば、ホッパーの構造的に気付く問題や処理の順番の誤りがあります。
とりあえず答えを述べておくと・・・
①メダルが空になって払い出されなくなると処理が進まない。
②メダルが詰まって払い出されなくと処理が進まない。
③何度も払い出し枚数を0と入力し続けたらどうなるか・・・
①と②は、このアルゴリズムでは処理できない状況です。これのことを(機能が)「実装されていない」等と言います。
このアルゴリズムではホッパーにメダルが十分ある状態でホッパーに異常がない前提であれば可能なアルゴリズムかもしれませんが、ハードウェアにおいて異常はつきもので、どんな異常があるのか研究検証して考えながら書く必要があります。
③の問題は、ホッパーを運転させる処理の場所にあります。払い出し枚数を入力すると、無条件で動き出し、1枚カウントして払い出ししてからAの計算が行われて条件分岐で下に行き、ホッパーが止まるという現象が起こります。
これらの問題を解決するためにいきなり全ての問題を克服するのは難しいので、1つずつ解決することもあります。一気に考えられるようになるにはある程度慣れが必要です。
それでは、③の問題のみを解決するアルゴリズムはどんな方法があるでしょうか?
文章でもフローチャート(書ける方は書いてみましょう)でもいいので、
考えてみてください。
このトピックのURLは:「
http://drakuji.bbs.fc2.com/?act=reply&tid=14391217#17527207」です。