2024年11月21日
008-1.EV3ソフトウェア入門-第5回「配列の使い方2」
新シリーズのレゴマインドストームである「教育用レゴマインドストームEV3」を使ったプログラミング環境「EV3ソフトウェア」について紹介していきたいと思います。(文/松原拓也)
◆ 配列の追加

前回は「配列操作」ブロックを使って、配列の読み込みと書き込みを行いましたが、まだ使っていない機能がありましたので、今回はそれらを紹介したいと思います。
今回、紹介するのは「配列の要素の追加」と「配列の長さ」の機能についてです。

要素の追加機能を使ったプログラムがこちらです(array1.ev3)。実行すると、配列変数arrayに要素を1つ追加します。
見た目がごちゃごちゃとしていて、ややこしいのですが、順に解説していきます。まず、左側に1個だけ独立しているブロックは配列変数を初期化するための処理です。変数の名前は「array」です。ここでは、空っぽの配列を作っていますので、中身が“[ ]”になっています。
そのとなりの太いデータワイヤで互いをつないでいる3個のブロックですが、これが要素を追加するための処理です。 配列操作ブロックを「追加-数値」に設定して、要素を追加します。 配列の中身の値は「0」にしています。
一番右側の待機ブロックは表示のための時間をかせぐための処理で、特に意味はありません。

「要素を追加する」という処理を、図に描くとこうなります。
なにもない配列に要素を1つ足しましたので、要素数1の配列が出来上がります。

プログラムを実行すると、配列が追加されました。
しかし、画面に表示していないので、確認することができません。 次のページでは、確認できるプログラムを紹介します。
◆ 配列の長さ

先ほどのプログラムに配列の要素数を表示する機能を追加しました(array2.ev3)。 青色のワクが追加したプログラム部分です。
やっていることはシンプルで、配列操作ブロックを使って長さを求めているだけです。

実行すると、ディスプレイに「1」と表示されました。配列の長さ(要素の数)が1という意味です。
配列を追加していくと、配列の長さが分からなくなる場合があります。そうした場合にこの機能が役立つのではないでしょうか。
◆ 配列のループ

要素の追加機能と、配列の長さを取得できる機能を組み合わせて、 プログラムを作ってみました(array3.ev3)。
5個の要素を追加して、その後、配列の中身を インテリジェントブロックのディスプレイに表示します。 ちょっとプログラムが長くなってしまいましたので、 2つに分割して処理内容を紹介します。

まず前半です。 配列の要素を追加する処理です。ループブロックを使って処理を5回繰り返しています。 要素を追加するさいには、「ランダム」ブロックを使って、 値に1~6の乱数を格納するようにしました。 「乱数」というのは、でたらめな値のことです。
ちなみに、一番左側のブロックは最初に画面を消すための処理です。 本当は「画面のリセット」という機能を使いたかったのですが、 うまく画面が消えてくれなかったため、 点を描くことで画面消去の代わりに使っています。

続いて後半です。
こちらもループブロックを使っています。ここでのループの回数は5回ですが、 ここではあえて配列の長さをデータワイヤーで接続しています。 こうすると、配列の長さがいくつになっても、その数だけループを実行することができます。
配列を読み取る場合、インデックスを指定する必要があるのですが、インデックスは0番から始まるように決まっています。 一方で、ループの回数も0回から始まりますので、ループ回数と配列操作のインデックスをデータワイヤーでつないでしまうと、配列を最初から読み取るようなプログラムを作ることができます。

ちょっと紹介が遅れましたが、 配列の要素の追加は、 配列の最後に対して行われます。 たとえば、要素数が1の配列に追加すると、新しい要素はインデックス1になります。そして、要素数が2の配列に追加すると、新しい要素はインデックス2になるわけです。

結果として、このプログラムの働きを図にすると、こうなります。サイコロをふって1~6の乱数を出して、その値を配列に追加していきます。配列に5回ほど追加すると、終了するわけです。

では、プログラムを実行してみましょう。
配列の要素が画面に表示されました。 要素の数は5つ。値はランダムです。
以上で「配列操作」ブロックについての紹介は終了です。 配列を使うと大量の情報を記憶することができます。この長所を活かすことができたら、さらに高度なロボットが作れるようになるのではないでしょうか。
[DOWNLOAD]今回作成したプログラム(教育用EV3ソフトウェア用)
当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。