スクラッチで素数判定を作成してbreakの考え方を学習しよう

ブロックの応用テクニック
Scratch星人
Scratch星人

タイトルでいきなり2つの難しい言葉が登場しました。

「素数」と「break」ですね。

ひとつずつ解説していきますので、身構えなくて大丈夫ですので、ぜひ最後まで読み進めていってください。

素数とは

Wikipediaより引用

Wikipediaによると「2以上の自然数で正の約数が1とその整数自身のみであるもの」とのことです・・。

よく分からないですね”(-“”-)”
少し解説します。

2以上の自然数とは「2、3、4、5、6、7、8、・・・100、・・・500、・・・」というように2以上の整数を指します。

0や1、マイナスの数や小数や分数は含まれないと覚えてください。

次に、正の約数が1とその整数自身のみとは、割り算をした際に割り切れる(余りが出ない)割る数が「1とその整数しかない」ということです。

以下に例を挙げて解説します。

  • 2:2÷1=2(◯)、2÷2=1(◯)・・素数である
  • 3:3÷1=3(◯)、3÷2=1.5(×)、3÷3=1(◯)・・素数である
  • 4:4÷1=4(◯)、4÷2=2(◯)、4÷3=1.3333…(×)、4÷4=1(◯)・・素数ではない

割る数を1から自分の数字まで1つずつ増やして計算した時に、割り切れる数が2つのみ(つまり◯が2つ)の数が「素数」です。

  • 5:素数である
  • 6:素数ではない
  • 7:素数である
  • 8:素数ではない
  • 9:素数ではない
  • 10:素数ではない

もし、イメージが湧かない場合は上の5~10までの数を割り算して、◯の数を確認してみて下さい。

breakとは

breakは、プログラミングのコードを作成する際に用いられます。

上のコードを理解する必要はありませんが、if文(スクラッチのもし~なら)とセットで使われます。

「条件に当てはまったらコードをストップする」役割のコードを意味します。

それだったら、スクラッチにも「このスクリプトを止める」ブロックがあるじゃないか、と思ったあなたはするどいです。

確かにこのブロックは「処理を止める」役割を持っています。

しかし、以下のような処理を実行したい場合はどうでしょうか。

イメージとしてはリストの中に1、2、3、4が3回格納されて欲しいのですが、最初に数が5になって、スクリプトが止まってしまうので、以降の処理が実行されません。

そうです。
10回繰り返すを止めたいけど、3回繰り返すは止めたくない、という状況で使用するのが、breakです。

しかし、残念ながらスクラッチにはbreakというブロックは無いので、使えるブロックで対応していくしかありません。

breakの役割をブロック定義で実現する

最も簡単な方法は、ブロック定義を使って、処理のブロックを分けてしまうことです。

「定義breakの勉強」の中で、このスクリプトを止めるが実行されても、「breakの勉強を3回繰り返す」処理には影響しません。

Scratch星人
Scratch星人

次から、素数判定プログラムを作成して解説していきます。

もし、自分で作れそう!と思ったあなたは、読み進める前に挑戦してみてください。

素数判定プログラムを作成してみよう

上記が答えになります。
・・・が、難しいので解説します。

それぞれの変数の役割

  • いくつまでチェック?:100の場合は、2~100までの数の中から素数を判定する、という変数です。
  • チェックする数字:2を判定、その次は3、4、5、というように決められた数まで1ずつ増やしていく変数です。
  • カウント:割る数を表わす変数です。2から1ずつ増やしていきます。

素数判定プログラムは、やっていること自体は単純なのですが、作成するためにはコードの構成、つまり判定の考え方が重要になってきます。

以下に考え方のポイントを解説します。

  • いくつまでチェック? – 1回繰り返す:例えば100までチェックする場合、2からスタートするので99回繰り返すことになります。
  • チェックする数字 – 2:例えば「チェックする数字が5」の場合、5÷5は間違いなく割り切れるので、割る数は2、3、4の3つ(5-2=3)だけをチェックすればいいということになります。
  • このスクリプトを止める:チェックの途中で割り切れた時点で素数では無くなるのでスクリプトを止めて次の数字をチェックします

別のアプローチで作成してみる

スクラッチの公式Wikiではbreakという変数を作成し、0もしくは1を格納して状況を判断するプログラムを解説しています。

それを応用した例が上のプログラムです。

少しややこしい感じがするので、どちらかと言うと、ブロック定義を使った方が楽かもしれません。

まとめ

スクラッチでbreakを代用するコードの作成方法を解説しました。

素数判定プログラムは、頭の体操にとても適しています。

可能であれば、この記事を読んだ後に、何も見ずにもう一度、作成にチャレンジしてみてください!

プログラミングは勉強してもしても、終わりがありません。
だからこそ楽しいんだと思います(*^▽^*)

コメント

タイトルとURLをコピーしました