マナティ

大人のためのやさしいプログラミング教室体験記

第3回 パズルゲームから広がること

この連載では、プログラミングの経験が全くない方でもわかるように、プログラミングの学び方を説明していきます。
仕事でプログラミングをどうしても覚える必要がある方、最近流行りのプログラムに興味はあるけど何をするものか全くわからない方、近い将来必須科目になるプログラムを子供に習わせたいけど親である自分がプログラムが何なのかわからなくて不安な方など、そんな方でも気軽に読んでいただける連載です。
みなさんもプログラム初心者のMさんと一緒にプログラミングに触れてみてください。

プログラミング初心者のMさんが、ビジュアルプログラミング教材「プログラミングゼミ」を学びながら、プログラミング的思考と技術を習得していくストーリーです。
最初は嫌々ながらプログラミング教室に通いはじめたMさん。
なんだかんだ言いながらも楽しくパズルゲームで遊んで、いや、勉強しているようですよ。

 

pic3-1.png

 
OL_01-75x117.png だんだん慣れてきた。このパズルは簡単!
ai_san01-75x85.png いいですねー!
楽しくなってきたでしょう?

でも、簡単すぎてもつまらないので、応用課題を出してみましょうか?
OL_02-75x117.png はいっ!
今日は調子がいいので、ぜひやってみたいです。
ai_san03-75x85.png では、「もんだい5-2」をもう一度開いてください。
OL_01-75x117.png はい。「オレンジ」と「ピンク」の宝石を取るプログラムですね。
こんなふうにプログラムしたんですけど。
 

pic3-2.png

 
ai_san01-75x85.png 素晴らしい。満点の答えです!

では、これと同じ動作をするプログラムを「または」ブロックを使わずに作ってみてください。
OL_11-75x117.png 「または」ブロックを使わずに?
はい。やってみます。
   
OL_02-75x117.png できました!
ai_san05-75x85.png おおっ、調子がいいですね。
どんなプログラムか見せてもらってもいいですか?
OL_01-75x117.png はい。このようにしました。
 

pic3-3.png

 
ai_san03-75x85.png そうそう、これでいいんです。確かに同じ動作をしますよね。
OL_03-75x117.png いろんな方法があるんですね。
ai_san03-75x85.png その通りです。別の方法を見つけるのも楽しいですよ。

「~ではない」が重なると難しくなる!?

 

ai_san03-75x85.png じゃあ、次の応用課題に取り組んでみてください。

「もんだい5-4」の画面にして、そらもんが、「にじいろ」と「ピンク」以外の宝石をとるプログラムを作って下さい。
OL_03-75x117.png 「にじいろ」と「ピンク」は取らないで、それ以外の宝石を取るということですね。
やってみます。
   
OL_03-75x117.png 「にじいろ」とぶつかってないときか、「ピンク」とぶつかってないときに宝石を取るんだから、…こうかな?
 

pic3-4.png

 
OL_02-75x117.png 先生、できました!
ai_san03-75x85.png 早いですね。
では、プログラムを動かしてみてください。
OL_01-75x117.png はい。
 

 

 

 
OL_08-75x117.png あれっ?
全部の宝石を取っちゃった(´;ω;`)
どうしてうまくいかないんだろう?
ai_san05-75x85.png どうしてだと思いますか?
niji_not2.pngでは、どんなブロックを取りますか?
OL_06-75x117.png 「にじいろ」以外全部です。
ai_san05-75x85.png 正解です。
では、pink_not2.png では、どんなブロックを取りますか?
OL_06-75x117.png 「ピンク」以外全部です。
ai_san05-75x85.png では、それを「または」でつなぐとどうなりますか?
OL_07-75x117.png niji_not2.pngで「にじいろ」以外全部取って、 pink_not2.pngで「ピンク」以外全部取るので、…あっ、確かに、全部の宝石を取ってしまいますね。
じゃあ、どうすればいいんですか?
ai_san01-75x85.png もうほとんど答えにたどり着いてますよ!
で「にじいろ」以外全部取って、
で「ピンク」以外全部取りますよね。
他の色の宝石は、その「どちらにも」入ってますよね。
「どちらにも」がポイントですよ。
よーく考えてみてください。
OL_03-75x117.png 「どちらにも」なので、「または」ではなく「かつ」ですね!
分かりました。
では、「かつ」を使ってやってみようっと。

あれ、先生、「かつ」ブロックがありません!
ai_san03-75x85.png そこまで気付いたのなら、十分ですよ。
このパズルには「かつ」ブロックはありませんが、レベルが上がっていくと、「かつ」ブロックも出てきますので、その時使えるようになっていればいいんです。
OL_10-75x117.png じゃあ、この応用課題は無理だということですか?
ai_san01-75x85.png いえ、「かつ」ブロックを使わなくてもできますよ。
ヒントを1つ。
さっき、「もんだい5-2」でもやった別パターンを思い出してください。
OL_03-75x117.png えーっと。さっきは「または」の代わりに「もしも」ブロックを2つ続けたのか。
では、同じようにやってみようかな。
   

pic3-5.png

 
OL_11-75x117.png これでやってみると、どうなるかな?
あれっ?うまくいかない。さっきと同じで全部取っちゃった。
ai_san03-75x85.png 苦戦してますね。
でも、これも収穫ですよ。
OL_10-75x117.png どういうことですか?
ai_san03-75x85.png 次の公式が成り立つということです
 

prog3b-1.png

 
OL_03-75x117.png なるほど!
同じ処理を別パターンでやる場合の公式ということですね。
確かにこのことを覚えておくと、無駄な回り道をしなくて済みますね!
ai_san05-75x85.png 「かつ」というのは、「両方の条件を満たす」という意味ですよね。
両方の条件を同時に満たすには、どうすればいいと思いますか?
OL_05-75x117.png 「両方の条件を同時に満たす」?
という条件を満たして,さらに という条件を満たすのか。
ということは…,
あっ!「もし」の中にもう一つ「もし」を入れてみたらいいのかな?
 

pic3-8.png

 

 

 

 
OL_02-75x117.png やったー!できた。
ai_san01-75x85.png その通りです!
結構頭を使いましたね。
ここからも、公式を導くことができます。
 

prog3b-2.png

 
OL_10-75x117.png なるほど!
ひとつずつ覚えていこうっと。
ai_san01-75x85.png いい心がけです。頑張ってくださいね。
でも、もっと簡潔にできるパターンもあるんですよ!
OL_03-75x117.png えっ、どんなのですか?

 複雑な論理演算をスマートに!- 「ド・モルガンの法則」

ai_san01-75x85.png これです!

pic3-11.png  

 

 

 
OL_03-75x117.png たしかに!
ちゃんと動きますね。
これは、どういう書き換えですか?
ai_san03-75x85.png prog3b-3.png
ということです。
数学的には、「ド・モルガンの法則」といいます。
OL_06-75x117.png ド、…ドモル…、何ですか?
ai_san01-75x85.png 「ド・モルガンの法則」です。
高校数学で学ぶ内容ですね!
OL_07-75x117.png えーっ、数学は苦手でした。
全然覚えてないんですけど。
ai_san03-75x85.png 大丈夫、そんなに難しいことではありません。
次の図で、「AまたはB」は、何色の部分ですか?
 

demorgan_notAnotB2.png

 
OL_03-75x117.png 白の部分ですね。
ai_san05-75x85.png その通りです。
では、「(AまたはB)でない」はどこですか?
OL_03-75x117.png 黄色の部分ですね。
ai_san05-75x85.png では、「Aでない」は?
 
OL_05-75x117.png ここですね!黄色の部分。
 

demorgan_notA.png

 
ai_san04-75x85.png その通り!
では、「Bではない」は?
OL_05-75x117.png ここです!
 

demorgan_notB.png

 
ai_san05-75x85.png では、これらの3つの図を並べてみましょうか。
 

demorgan_notA.pngdemorgan_notB.pngdemorgan_notAnotB2.png

 
ai_san05-75x85.png 何か気付きませんか?
OL_05-75x117.png あっ、確かに。
最初の2つの図でどちらも黄色の部分が、最後の図になっていますね!
ai_san05-75x85.png その通りです。
これで、イメージが掴めましたね。

では、もう一度、今回作った、同じ動きをするプログラムを並べてみましょうか。
 

prog3b-4-300x277.png
pic3-11-500x200.png

 
ai_san05-75x85.png どちらが簡単ですか?
OL_05-75x117.png それは後の方です。
その方が分かりやすいし、見やすいです。
ai_san04-75x85.png ですよね。
そして、プログラムが短いので、前回学んだ「最適化」されているといえます。
OL_03-75x117.png なるほど、便利なんですねー。
ai_san04-75x85.png ド・モルガンの法則を活用できると、プログラムを最適化しやすくなるんですよ。
特に、色々な条件が絡んでいるときに威力を発揮するんです。

私も、数学で学んだときには、難しいと感じて、スルーしてたんですが、
プログラミングをするのにとても役立つので、今では重宝していますよ。
OL_01-75x117.png そうなんですね。
数学は苦手だったので不安でしたが、よく分かりました!
 

今回のパズル、いかがでしたか?
こども用の「プログラミングゼミ」ですが、結構奥が深いですね。
プログラミングをしていると今回のように「または」とか「かつ」という考え方がたくさん出てきます。
頭の中で考えるだけだと混乱してしまうことがあるので、分からなくなったときは 今回のように図を描きながら考えを整理してみると良いですね!
さて次回は、「繰り返し(ループ)」処理に挑戦してみましょう。

著者プロフィール

特定非営利活動法人 ロジカ・アカデミー 理事長 関 愛(著者)
中学生の頃からプログラミングを独学し,18歳の時に北海道の田舎町でシステムエンジニアとして起業。19歳で情報処理推進機構(IPA)から「天才プログラマー/スーパークリエータ」の認定を受ける。23歳の時に新入社員研修講師として活動を開始し,Yahoo! JAPAN,UFJ銀行,日本生命をはじめとする大手企業で1,000名以上の現役プログラマーを育成してきた。33歳で特定非営利活動法人ロジカ・アカデミーを設立し,理事長に就任。
現在は「すべての人に生きる力を授けるプログラミング教育」をコンセプトとした「ロジカ式」教材の開発を指揮する傍ら,プログラミング教育の普及と講師育成を中心とした活動に携わっている。
著者ホームページ:https://logica.academy