2009年8月5日水曜日

Scratchで素数を求めてみた

このブログ記事をはてなブックマークに追加

小学生にプログラミングの楽しさを伝えてみた」を読んで、プログラミング言語Scratch(スクラッチ)にとても興味を覚えた。そこで、子供たちに使わせて、その様子でも見てみようかと思ったんだけど、使わせる前にまず自分で試すべきだと考え、簡単なプログラムを作ったところ、これがまた面白い。どういう面白さかというと、小さい頃に遊んだレゴブロックみたいな感じ。ブロックで巨大ロボットを作ったあの感覚。それに、プログラムの要素がタイルになっていて、それをピタピタと貼り付けるんだけど、これもかなり気持ちいい。

で、単なるお試しのつもりで100までの素数を求めるプログラムを作ったんだけど、前回のエントリ「4ビットマイコンで素数を求めてみた」との対比が面白くて、思わずブログ記事にしてしまった。一方は機械が透けて見えるアセンブリ言語によるLED表示で、もう一方はコンピュータと言うよりレゴブロック(?)に近いScratchによるYouTubeライクなアニメーション。同じ素数を求めるプログラムと言っても、ここまで違うと何だか妙な感じだ。

ネコのキャラクターをクリックすると開始。※音が出るので注意 このプロジェクトについてもっと知る

ところで、素数を求めるプログラムを作った理由だけど、自分にとってそれがHello worldプログラムのようなものだから。"Hello, world!"なんて画面に出しただけじゃその言語のことはほとんど分からないからね。因みに、Scratchのプログラムの方では、ちょっとだけ遊びを入れてみた。ナベアツプログラムを真似て、一の位が 9 の時だけネコがちょっとリアル(?)になる。

また、Scratchでは作成したプログラムをYouTubeのように簡単にウェブ上で共有できる。しかも、Scratch上からボタン一つという手軽さだ。さらに、そのプログラムをブログなどに貼り付けることもできる。ただ、Scratch上で日本語を表示するのは問題ないのだが、ウェブにアップロードしたものは文字化けをしてしまうようなのでこの点だけ注意して欲しい。あと、この記事に作成したプログラムを貼り付けておいた。実行するにはネコのキャラクターをクリックすればいい。音が出るので注意すること。

ところで、現時点での最新版であるScratch 1.4では、剰余の計算のところが間違っていて、「AをBで割った余り」のAとBが逆になっている。つまり、「10を7で割った余り」の答えが7になってしまう。正しく3と計算させるためには「7を10で割った余り」としなくてはならない。もっとも、これを直すのは簡単で、Scratchをインストールしたディレクトリにあるlocaleディレクトリのja.poファイルの「msgstr "%n2 を %n1 で割った余り"」を「msgstr "%n を %n で割った余り"」に変更するだけだ。因みに、メニューの地球アイコンで漢字をひらがなに変更できるが、こちらは特に問題はない。

以下に、ソースコードを掲載しておく。


追記(2009/8/5):

[Squeak-ja: 4297] Scratch 1.4の日本語翻訳ファイルの誤りについて

Scratchを日本語翻訳されている方からのコメントで、修正ファイルの情報を教えて頂いた。上記のリンク先から入手できる。また、次期バージョンでは修正されるとのこと。

2 コメント:

abee さんのコメント...

こんにちは、Scratchの翻訳のお手伝いをしているものです。
余りの問題については他の方からもご指摘をいただいており、以下のとおり修正しています。
[Squeak-ja: 4297] Scratch 1.4の日本語翻訳ファイルの誤りについて
公式の翻訳サイトも更新しているので次バージョンで対応されると思われます。
日本にはまだScratchのMLなどがないため、主にSqueak-ja MLで情報交換が行われています。よろしければご参加ください。
どのようなことでも結構ですので、お気軽にお知らせいただければ幸いです。

nox さんのコメント...

コメントありがとうございます。

日本語翻訳の問題について、修正ファイルの情報をありがとうございます。本文に追記しておきます。

実は、この問題を見つけたときに報告しようと思ったのですが、公式フォーラムをざっと覗いてもそれらしいトピックが見あたらなかったので、そのままにしてしまいました。情報交換にSqueak-ja MLが使われているとのことで、早速参加させて頂きました。