プログラミング初心者の子供に何を教えたらいいの?とお悩みの保護者のためのScratch(スクラッチ)の入門講座。Scratchで猫の動かし方はわかったけど・・・次にどんなことをしたらいいの?という疑問にお答えするシリーズです。
以前、「パタトクカシーー」問題を解くアルゴリズムを考えました。今回は、ひとつとびぶったい「パタトクカシーー」をいろいろ作るプログラムを考えてみたいと思います。
アルゴリズム・「パタトクカシーー」についてはこちらの記事も合わせてご覧ください。
プログラミング初心者のためのScratch(スクラッチ)入門-パタトクカシー問題のアルゴリズム
1. パタトクカシーー合成問題って?
以前の記事では、「パタトクカシーー」を分解して何と何からできているかを解くプログラムを考えました。今回は、ぶったい1とぶったい2の文字を組み合わせてひとつとびぶったいを新しく合成するプログラムを作りたいと思います。
1-1.「パタトクカシーー」って何?
以前の記事パタトクカシーー問題でご紹介しましたが「パタトクカシーー」は、「パトカー」(ぶったい1)と「タクシー」(ぶったい2)という言葉に含まれている文字を交互に並べたものです。
1-2. プログラムの完成イメージを考えよう
さて、今回のプログラムは次のように作ってみましょう。
・スプライトが「ぶったい1」を質問する(①)
・スプライトが「ぶったい2」を質問する(②)
・「ぶったい1」と「ぶったい2」の文字数が同じかどうかをチェックする(③)ただし・・・
→同じならひとつとびぶったいを合成する(④)
→文字数が違ったら、もう一度「ぶったい1」と「ぶったい2」を質問しなおす(⑤)
では①〜⑤を順番に作っていきましょう。
2. プログラムを作ってみよう
上で考えたプログラムの完成イメージを元にプログラムを作っていきます。
2-1. 質問部分を作る
まずは質問部分を作っていきます。これは簡単ですね。
「●●と聞いて待つ」ブロックで質問し、その答えをそれぞれ「ぶったい1」と「ぶったい2」の変数に入れます。
プログラムの実行結果はこのような感じになりました。
2-2. 文字数をチェックする
次のステップは「ぶったい1」と「ぶったい2」の文字数が同じかどうかをチェックする、です。文字数は演算ブロックの中の「●●の長さ」ブロックを仕様します。
変数「ぶったい1」変数「ぶったい2」の長さを比較すればいいので、これも簡単。
この条件式が成り立つ時と、そうでない時の場合でプログラムの動作を変えたいので「もし〜なら、でなければ」ブロックを使いましょう。
2-3. 合成する方法を考えてみる
次に、ぶったい1の文字とぶったい2の文字を交互に並べる方法、つまりひとつとびぶったいを合成する方法を考えます。最初に合成後のイメージから考えてみましょう。例として「パタトクカシーー」を考えてみます。
パタトクカシーーはぶったい1(パトカー)とぶったい2(タクシー)の文字が交互に並んでいます。ぶったい1の1文字目、ぶったい2の1文字目、ぶったい1の2文字目、ぶったい2の2文字目・・・という順番ですね。
1文字目、2文字目、と順番に増えているので、変数と繰り返しをつかいましょう。
「x」と「ひとつとびぶったい」という2つの変数を作ります。そして、xはひとつづつ増えるように繰り返します。
また、変数「ひとつとびぶったい」には、文字がどんどん追加されていくプログラムを作ります。
このプログラムを繰り返しの中にいれます。さらに、変数「ひとつとびぶったい」は最初、空(から)になるようにしておきましょう。そうしないと、前のプログラムの実行結果が残ったままになってしまいます。さらに、繰り返しの回数が文字の数だけになるようにしておきましょう。
2-4. プログラムを仕上げてテストしよう
ここまで作ったプログラムを、組み合わせてプログラムを仕上げましょう。ぶったい1とぶったい2の文字の長さが違ったときは、もう一度質問するようにします。
こんな感じになりました。
プログラムは作ったら、ちゃんと動くかテストしましょう。こんな項目をテストするといいですね。
(1)きちんとぶったい1とぶったい2が合成されるか?
(2)ぶったい1とぶったい2に様々な文字数の文字を入れても大丈夫か?
(3)ぶったい1とぶったい2の文字数が異なる時に、もう一度質問しなおしてくれるか?
(4)質問し直した後、合成してくれるか?
(1)きちんとぶったい1とぶったい2が合成されるか?
ではまずはちゃんと動くかの確認をします。「りんご」=ぶったい1と「みかん」=ぶったい2でテストしてみましょう。
はい。ひとつとびぶったいの変数の中に「りみんかごん」という文字が入って、ちゃんと合成されることがわかりました。でも、スプライトがただ置いてあるだけでなんだか寂しそうです。ひとつとびぶったいを最後に、スプライトが言うように直しましょう。
(2)ぶったい1とぶったい2に様々な文字数の文字を入れても大丈夫か?
さきほどは「りんご」「みかん」の3文字の言葉でテストしました。では2文字、4文字、5文字でもテストしてみましょう。
▼2文字の言葉でテスト
▼4文字の言葉でテスト
▼5文字の言葉でテスト
2文字、4文字、5文字でもうまくいきました。文字数が変わっても大丈夫そうです。
(3)ぶったい1とぶったい2の文字数が異なる時に、もう一度質問しなおしてくれるか?
ぶったい1とぶったい2に異なる文字数の言葉を入れてみましょう。
「はさみ」と「タクシー」という言葉を入れてみたところ、もう一度質問をしてくれました。
ですが、「ひとつとびぶったい」のところに前のプログラムの実行結果が残ったままで、一見うまくいっているようにも見えてしまいます。これは直した方がよさそうです。また、どうしてもう一度質問されているのかわかりづらいですね。これもわかりやすく直したいと思います。
(4)質問し直した後、合成してくれるか?
質問し直した後、きちんと合成してくれなければ意味がありません。もう一度回答してみましょう。2回目の質問にたいして、「りんご」「みかん」と答えましたが・・・あれ?ひとつとびぶったいの変数の中が空っぽのままです。
もう一度、ぶったい1とぶったい2に異なる文字数の言葉を入れてみても同じです。質問し直しの後、プログラムは終わってしまいました。
これでは、質問し直す意味がありませんね。ここも修正しましょう。
2-5. プログラムを改善しよう
テストした結果、わかりづらいところやちょっと直した方がいいかな?というところを発見できたのでその結果を修正してみました。メッセージを使って、状況に応じた処理が実行されるように改善しました。また、スプライトがセリフをしゃべるようにして、わかりやすく改良しました。
修正したプログラムの実行結果がこちらです。スプライトがぶったい1とぶったい2を合成した結果を喋ってくれますよ。
3. まとめ
今回は、パタトクカシー合成問題のプログラムを考えてみました。また、作ったプログラムをテストするということもやってみました。
プログラムのテストはいかに効率がよいテストのパターンを考えられるか?ということが求められます。つい、自分の作ったプログラムだとそのままにしがちですが、「こういう場合でもちゃんと動くかな?」という視点でプログラムをテストしてみることも大事。
親子でつくったプログラムをテストしてみて、バグを見つけるのもいいですね。使う人の視点でプログラムを見てみる・・・ということも大切な力になります。ぜひ楽しみながらテストまで含めたプログラミングに挑戦してみてください。