2024年11月18日
004-4.アルゴリズム入門-第1回「最高と最小を求める」
「アルゴリズム」とは英語で書くと「Algorithm」、プログラムにおける「考え方」を表した言葉です。この連載では、ロボットのプログラミングの中で、アルゴリズムを活用する方法を紹介していきたいと思います。(文/松原拓也)
◆ 最大を求める
まず用意するのは、光センサとインテリジェントブロックNXTです。
今回は、この光センサを測定してのその値の「最大値」「最小値」をチェックしてみたいと思います。
なお、「最大値」というのは一番大きな値のこと、「最小値」というのは一番小さな値のことです。
そこで作ってみたプログラムがこちらです。光センサを100回測定して、その最大の値を画面に表示します。
NXTソフトウェア2.0を使って作成しています。
[Download]最大を求めるプログラム(NXTソフトウェア2.0で作成)
ループの部分を拡大してみました。ループブロックは「永久」ではなくて、「カウント」に設定し、繰り返し回数を「100」に設定しています。
このループの中で最大値を求めています。
◆ 最大を求める(続き)
このプログラムの働きを図にしてみました。 2つの箱は数値の形式の変数です。 「現在値」と「最大値」という変数です。「最大値」には最初に「0」が入っています。 「現在値」にはセンサの測定値が入りますが、ここでは「10」を入れてみました。
箱(変数)の中身を比較して、もし現在値のほうが大きかった場合、その値を最大値に代入します。
もし、現在値のほうが小さかった場合には代入しません。
つまり、「大きかったら変数に代入する」という処理を続けることで、最終的に最大値が変数に収まっているわけです。
これが「最大値を求めるアルゴリズム」です。
こちらがループを出てからの処理です。最大値をテキストに変換してLCDに表示しています。
表示後に画面が消えてしまわないように、最後に待機ブロックを置いてあります。
プログラムの実行結果です。無事に動きました。ここでは「52」と表示されていますが、これが100回測定した中での最大値です。
◆ 最小を求める
今度は最小値を求めるプログラムを作ってみました。
[Download]最小を求めるプログラム(NXTソフトウェア2.0で作成)
前半部分を拡大してみました。変数名を書き換えて、そして、比較ブロックの符号を逆にしています。そして、画面の一番左に注目して欲しいのですが、変数ブロックを1つ追加します。
この変数ブロックでは、「最小値」の変数に「99」を書き込んでいます。こうして最小値を大きくして、記録が更新されるようにしなくてはいけません。
◆ 最大と最小を求める
先に作った2つを組み合わせて、最大と最小を求めるプログラムを作ってみました。ループの回数は100回に設定しています。
[Download]最大と最初を求めるプログラム(NXTソフトウェア2.0で作成)
最小値と最大値の求め方は先に紹介した方法と同じです。最小値には99の値をセットしておき、最大値には0がセットされています。
プログラムを実行してみました。最大値は「52」、最小値は「51」と表示されました。思いのほか測定値のバラつきは起きていないようです。
次回は、これをロボットに活かす方法を考えてみたいと思います。
当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。