1.3. 数値計算編#
ネコがしゃべり、ペンギンが飛ぼうとする Scratch の世界ですが、今回はちょっとだけ真面目に数字と向き合ってみましょう。この節では、Scratch を使ってシンプルな計算を行う方法を見ていきましょう。
1.3.1. 偶奇判定#
割り切れない想い、分け合えない時間。クラスの人数が奇数で、ひとりだけペアが組めなかった日。そんな余りある青春を思い出しながら、ある数が偶数か奇数かを確かめるプログラムを作ってみましょう。
プログラムを作る上で、まず与えられた数値そのものを保存するための変数と、判定の結果を記録するための変数の 2 つを用意する必要があります。変数カテゴリーから「変数を作る」ボタンをクリックして変数を作ります。1 つ目の変数に入力値
、2 つ目に判定結果
と名前をつけて作成してください。
準備ができたら、プログラムを組み立てていきましょう。基本的な考え方は、「入力された数を 2 で割り、その余りが 0 であれば偶数、そうでなければ奇数」と判定する、というものです。その判定結果を判定結果
変数に保存し、最後にネコがその結果をしゃべる、という流れになります。
まずは、全体の構造を作ります。使うブロックは次の 5 つです。(旗)が押されたとき
、入力値を 0 にする
、判定結果を 0 にする
、もし<>ならーでなければ
、そしてこんにちは!と言う
です。これらを順番にスクリプトエリアに並べてください。なお、入力値を 0 にする
や判定結果を 0 にする
が見つからない場合は、my variable を 0 にする
というブロックの中の変数名を変更することで対応できます。

次に、入力値を 0 にする
ブロックの 0
の部分に、試したい任意の整数を入力してみてください。たとえば、2、3、10、15 などです。
続いて、もし<>なら
ブロックの条件部分を作っていきます。まず、演算カテゴリーから◯ = 50
ブロックを取り出して、<>
の場所に入れます。次に、同じく演算カテゴリーから◯ を ◯ で割った余り
ブロックを使い、◯ = 50
ブロックの左側の◯
の部分に入れましょう。そして、そのブロックの最初の ◯
に入力値
、2 つ目の ◯
に 2
と入力してください。さらに、◯ = 50
ブロックの 50
の部分は 0
に変更します。これで、「入力値を 2 で割った余りが 0 であるかどうか」を判定する条件が完成します。

次に、判定結果を記録する処理を追加します。もし<>なら
およびでなければ
の内側に、判定結果を 0 にする
ブロックを入れてください。そして、前者の判定結果を 0 にする
ブロックにある 0
を偶数
、後者の 0
を奇数
に書き換えてください。
最後に、こんにちは!と言う
ブロックのこんにちは!
の部分を判定結果
変数に変更しましょう。これには、変数カテゴリーにある判定結果
ブロックをドラッグして入れ込むだけです。これでプログラムは完成です。

開始ボタンをクリックして動作を確認してみてください。入力値を変えるたびに、ネコが「偶数」または「奇数」と正しく言ってくれるはずです。入力値を何度か書き換えて試して、条件の動作を確かめてみましょう。
数字を見つめ、ネコは今日も静かに語り続ける。奇数か偶数か。
1.3.2. 合計値計算#
希望の朝に生まれ、静かな夜の終わりに残される。なにかを記録し、なにかを忘れ、ひとつ、またひとつと積み重なっていく数字たち。そんな数たちを呼び寄せて、私たちはいったい何を見つけるのだろうか。ええ、ただの合計です。では、さっそく、あらかじめ与えられた複数の数値の合計を計算するプログラムを作ってみましょう。
合計を計算するプログラムには、入力値の記録と結果の保存のための変数が必要です。
合計の対象となる複数の数字をまとめて保存するリスト(
数字箱
)。加算した結果(合計値)を保持する変数(
合計値
)。
はじめにこれらの変数を用意しましょう。変数カテゴリーを開き、「リストを作る」ボタンをクリックします。リストの名前を「数字箱」として、「OK」をクリックします。この操作により、ステージにリスト「数字箱」が表示されます。

ステージにある「数字箱」枠の左下にある「+」ボタンをクリックして、いくつか数値を追加してみましょう。たとえば、10、20、30、40、50 の 5 つの数値を追加します。

次に、「変数を作る」をクリックして、変数「合計値」を作成します。これで、合計を求めるための準備が整いました。
合計を計算するプログラムを作ってみましょう。考え方はとてもシンプルで、「数字箱」というリストに入っている数字を一つずつ取り出して、それらを順番に合計していくだけです。
まず最初に、プログラムの基本的な骨組みを作りましょう。最初に(旗)が押されたとき
ブロックをスクリプトエリアに置き、その下に合計値を 0 にする
ブロックを 6 個並べてください。そして一番下にこんにちは!と言う
ブロックを繋げます。これで、プログラムの土台ができあがります。なお、合計値を 0 にする
のようなブロックが見つからない場合は、my variable を 0 にする
ブロックを使い、変数名の部分を合計値
に変更すれば対応できます。

続けて、2 番目の合計値を 0 にする
ブロックに、リスト「数字箱」にある数字を一つずつ取り出して足していく処理に変更します。このブロックの 0
の部分には、演算カテゴリーの◯ + ◯
ブロックを使って、足し算の式を作ります。最初の◯
には合計値
、2 つ目の◯
には数字箱の 1 番目
を指定します。

同様にして、3 番目以降の合計値を 0 にする
も合計値を 合計値 + 数字箱の 2 番目
のように変更します。そして、最後のこんにちは!と言う
ブロックのこんにちは!
の部分も、合計値
に置き換えます。

これで、簡単な合計プログラムが完成しました。試しにステージ上の開始ボタンをクリックしてみてください。すると、ネコが正しく合計値を話してくれるはずです。
数字箱の中に入っている数が 5 つ程度であれば、個別にブロックを並べる方法でも問題ありません。しかし、数字が 10 個、20 個と増えていくと、このやり方では手間がかかりすぎて現実的ではなくなります。そこで、プログラムに規則性を持たせて整理し、より柔軟で使いやすい形にしていきましょう。
たとえば、合計値を 合計値 + 数字箱の 1 番目
や 合計値を 合計値 + 数字箱の 2 番目
といったブロックは、リストの各要素に対して同じ処理を繰り返していることに気づきます。つまり、処理対象となる「1番目」「2番目」といった部分を、1 から順に変化していく変数に置き換えれば、これらのブロックは一つにまとめることができます。
ここで、新たにいまココ
という変数を作り、この変数の値を毎回 1 ずつ増やすようにします。たとえばいまココを いまココ + 1
というブロックを使えば、繰り返し処理のたびにいまココ
が 1 つずつ増えていきます。また、その直後に、合計値を 合計値 + 数字箱の いまココ 番目
というブロックを実行すれば、いまココ
で指定された位置の数字を順番に取り出し、合計値に加算することができます。

こうして積み上げたブロックを見渡してみると、いまココを いまココ + 1
と合計値を 合計値 + 数字箱の いまココ 番目
が交互に並び、それが 5 回繰り返されていることに気づきます。
同じ処理を何度も繰り返している場合は、制御カテゴリーにある繰り返しブロックを使えば、プログラムを簡潔にまとめることができます。プログラムを簡潔化するには、まず、ブロックの中からいまココを 0 にする
と合計値を 0 にする
を残し、それ以降のブロックをいったん外します。そして、制御カテゴリーから10 回繰り返す
ブロックを取り出し、それを残したブロックの下につなげます。このブロックはデフォルトで 10
回になっていますが、ここでは数字箱
に入っている数字の数だけ繰り返したいので、10
の部分に、変数カテゴリーにある数字箱の長さ
ブロックをはめ込みます。
次に、その繰り返しブロックの内側に、いまココを いまココ + 1
と合計値を 合計値 + 数字箱の いまココ 番目
のブロックを順に入れ込みます。これで数字箱
の内容を 1 つずつ順に合計していく処理が、簡潔に繰り返し構造の中で実現できるようになります。最後に、繰り返しブロックの下に合計値と言う
ブロックをつなげて、合計値を表示させましょう。

これで繰り返し制御を使って合計を求めるプログラムを作ることができました。
練習問題 SB3-N1
リストに入っている数の平均値を求める Scratch プログラムを作成してください。
練習問題 SB3-N2
リストの中にある奇数の個数を数える Scratch プログラムを作成してください。
1.3.3. 最大値検索#
星空を見上げれば、ひときわ輝く星に目を奪われる。教室を見渡せば、背の高いあの子がすぐに見つかる。集団の中には、いつだって「いちばん」がいるものです。けれども数字たちは黙ったまま、誰が主役なのかを教えてくれません。こちらから聞き出すしかない。そう、最大値検索の出番です。
では、複数の数値からなるリストが与えられたときに、リストの最大値を調べるプログラムを Scratch で作ってみましょう。準備として、次のような変数を用意します。
検索の対象となる複数の数字をまとめて保存するリスト(
数字箱
)。数字箱
には、あらかじめいくつかの数値を入れます。例えば、10, 21, 5, 88, 39。リストのどの位置を処理しているかを記録するための変数(
いまココ
)。最大値を記録する変数(
最大値
)。
考え方としては簡単です。まず最大値
を数字箱
の 1 番目の数字とします。続いて、数字箱
中にあるすべての数値を最大値
と比較し、もしもっと大きい数字が見つかれば、それで最大値
を上書きしていきます。
まず、変数を初期化し、合計値計算のプログラムを参考にして、数字箱
中にあるすべての値を調べるための枠組みを作ります。

続いて、数字箱
のいまココ
番目の値と最大値
を比較します。もし数字箱
のいまココ
番目の値のほうが大きければ、それを新しい最大値
に更新します。

これで最大値を検索するプログラムが完成しました。あとは数字箱
の中に入れる数値をいろいろと変えて、プログラムが正しく動作するかどうか試してみてください。
練習問題 SB3-N3
リストの中で最大の値が、前から数えて何番目にあるかを調べる Scratch プログラムを作成してください。
練習問題 SB3-N4
リストの中で 2 番目に大きい値を調べる Scratch プログラムを作成してください。
練習問題 SB3-N5
リストに入っている数値を昇順に並べ替える Scratch プログラムを作成してください。
ペンギンが飛べず、ネコが歩みを止めない Scratch の世界ですが、実はデータサイエンスを支える重要なアルゴリズムまで実現できてしまうのです!いや、正確に言うと、読者が作れたというより、Scratch の仕様上・理論上できちゃうわけなんです。