昨日のPGラボは中学生が二人いたので、ちょっと数学的に難しいテーマを扱ってみました。
『「素数」を探そう!!』ということでScratchを使って素数を探すプログラムを作りました。
シューティングゲームやアクションゲームではなかなか利用しないブロックがいくつか出てきたのでちょっと難しかったかもしれません。
素数を知らないメンバーもいましたが、説明をしたらみんな探し出せるようになりました。
でも、自分では探せるのだけど、プログラムに探させるにはどうすればよいのか悩みました。
「自分がどうやって素数かどうかを判定しているのかがわからない。でも判定できる。」という状態でした。この状態からプログラムのロジックを考えていく工程が一番プログラミングで重要な工程かと思います。
少しずつ整理することで、以下のような考え方だということが分かってきました。
素数の判定方法
ある数字Aが素数かどうか判定する方法としては、
2からA-1(Aより1小さい数)までの数字で割り算をして、
・途中で割り切れたら素数ではない。
・最後まで割り切れなかったら素数。
という判定をすればよい。
これをプログラムで実現するには2からA-1までを繰り返し処理で作るのですが、「途中で割り切れてしまったら繰り返しは終了」という条件の書き方が難しかったです。
ちょっと専門的な話で恐縮ですが、Javaであれば、breakやcontinueを使ってループを抜けることができますが、Scratchにはbreakやcontinueに相当するものはないので別の方法で作る必要があります。つまりScratchで実現するには工夫が必要ということです。
そんな中で工夫をしてbreakを実装しているメンバーがいて驚きました。下の図です。メッセージを使って外側のループを作ることで、breakに相当する部分でもメッセージを送ってループを抜けています。
この他、もっと効率的な計算方法を見つけてくれているメンバーもいて、なかなか勉強になる会になったかと思いました。
今回はゲーム作りよりちょっとお勉強要素が大きくて大変だったかもしれません。次回はもっと楽しいプログラムに挑戦するようにしたいと思います。お楽しみに!