【第8回】 【micro:bit講座 第8回】論理挔算AND / OR / NOT耇数の条件をスマヌトにたずめよう

MakeCode × micro:bitç·š

第7回では「IF文のネスト入れ子」を孊び、条件の䞭に条件を重ねるこずで、二重・䞉重の門番を蚭眮する方法をマスタヌしたしたね。

おかげで、私たちの「りんご管理システム」は、耇雑なルヌルも完璧に守れる「鉄壁のシステム」ぞず進化したした。

しかし、ここで䞀぀疑問が浮かびたせんか

「条件が増えるたびに、門番をどんどん入れ子にしおいくず、プログラムがどんどん䞋に䌞びおいっお、画面から芋えなくなっおしたう  」

そう、ネストは匷力ですが、䜿いすぎるずコヌドが瞊に長くなりすぎおしたい、党䜓の流れを把握するのが難しくなるずいう匱点がありたす。

そこで登堎するのが、耇数の条件を「合䜓」させたり、ひっくり返したりする魔法の挔算子、「論理挔算AND / OR / NOT」です

この魔法を芚えれば、長かったネスト構造が䞀気にスッキリし、プログラムがよりスマヌトで読みやすくなりたす。

さあ、思考を敎理する新しい歊噚を手にしたしょう

  1. 前回の宿題答え合わせ
    1. 第1の門番「圚庫チェック」の曞き換え
      1. 「がくのりんご  0」を「≧」を䜿っお曞き換え
      2. 「がくのりんご  0」を「」を䜿っお曞き換え
      3. 「がくのりんご  0」を「≠」を䜿っお曞き換え
    2. 第3の門番「容量チェック」の曞き換え
      1. 「いもうずのりんご  5」を「≊」を䜿っお曞き換え
  2. 今日のミッションネストを卒業しおスマヌトに曞こう
    1. 論理挔算「AND / OR / NOT」ずは
    2. ミッション1AND・OR挔算子で門番をスッキリさせる
      1. 比范しおみようネスト vs 論理挔算
    3. 【コラム】スマヌトさの代償 「゚ラヌの理由」を芋倱うな
    4. ミッション2「NOTではない」で条件をひっくり返す
      1. 【䟋】「NOT」の魔法を詊しおみよう
    5. 【コラム】゚ンゞニアのデバッグ術trueずfalseの魔法
      1. 「真・停」はスむッチのON/OFF
      2. 匷制的に動かしお実隓しよう
  3. 今日のたずめ論理挔算でプログラムをシンプルに
  4. 【宿題】論理挔算で最匷の門番を䜜ろう
  5. 次回の予告
  6. カリキュラム䞀芧進捗マップ

前回の宿題答え合わせ

たずは、前回皆さんに出した「比范挔算子のナゟ」を解き明かしたしょう。

シミュレヌタヌで実隓しお、門番たちの反応は確認できたしたか

第1の門番「圚庫チェック」の曞き換え

「がくのりんご  0」を「≧」を䜿っお曞き換え

リンゎの圚庫が0個の状態で、「≧0」の条件なら通過し、「≧1」の条件ならブロックされる様子を比范したむラスト。ロボットの門番ずコヌド䟋が䜵蚘されおいる。
図1第1の門番圚庫チェック。巊は「0個以䞊」なので、リンゎが0個空のカゎでも通過できたす。右は「1個以䞊」なので、0個の堎合は門番に止められたす。この「0を含むか、含たないか」が最初の関門です。

「がくのりんご ≧ 0」ずするず「0個以䞊」ずなるため、圚庫が0でも門が開いおしたいたす。

゚ラヌを出したい「0」を通過させおしたうため、圚庫管理には 「≧ 1」 が正解です。

「がくのりんご  0」を「」を䜿っお曞き換え

「等しい」を䜿う堎合たずぱラヌを匟く

「」を䜿うずきは、「䜕がOKか」ではなく「䜕がNGか」を最初に決めるのがコツです。

もし『がくのりんご  0』なら、たずぱラヌを衚瀺する

それ以倖の『でなければりんごが1個以䞊ある状態』のずきだけ、次の第2の門番ぞ進たせよう。

このように、゚ラヌを最初に凊理しおしたうこずで、残りのプログラムが確実に安党な状態であるこずを保蚌する「門番のガヌド」が䜜れたす。

「がくのりんご  0」を「≠」を䜿っお曞き換え

「≠等しくない」を䜿う堎合OKな道だけ通す

「≠」は「0以倖ならOK」ずいう考え方なので、0個ずいう䟋倖だけを別のルヌトに流したす。

もし『がくのりんご ≠ 0』なら、0個ではないので、そのたた第2の門番ぞ進んでよし

それ以倖の『でなければ0個の時』は、゚ラヌを衚瀺しお門を閉ざそう。

この堎合、0個ずいう「NGの状態」を「でなければ」の堎所でキャッチしおいたす。

ただし、マむナスの数倀を扱うシステムの堎合は「0より小さい数も『0ではない』から通っおしたう」ずいう点に泚意が必芁です。

第3の門番「容量チェック」の曞き換え

「いもうずのりんご  5」を「≊」を䜿っお曞き換え

カゎに入るリンゎの数が限界に達した時、「≊ 5」なら5個目を入れおあふれおしたい、「≊ 4」なら4個で止めお安党を保぀様子を比范したむラスト。ロボットの門番ずコヌド䟋が䜵蚘されおいる。
図2第3の門番容量チェック。カゎのリンゎが限界の5個に達した時、巊の「≊ 5」は5個目を受け入れたすが、右の「≊ 4」はパンクを防ぐために4個目で止めたす。「限界の1぀手前で止める」ずいう安党策の考え方です。

「≊ 5」ずするず「5個の時もOK」ずなり、袋がパンクしおしたいたす。

効の袋をあふれさせないためには、 「≊ 4」 が正解です

境界線を1぀間違えるだけで、袋がパンクしたり圚庫が暎走したり  。

挔算子の違いを䜓感できたなら、君の「゚ンゞニアの目」はかなり鋭くなっおいたすよ

今日のミッションネストを卒業しおスマヌトに曞こう

䟋えば、前回のシステムでは「圚庫がある0」か぀「容量に空きがある5」ずいう刀定をするために、IF文を2぀重ねおいたしたね。

これでも動きたすが、もし「あにの協力」「いもうずの機嫌」など条件が10個増えたらどうなるでしょう

画面は䞋ぞ䞋ぞず門番だらけになっおしたいたす。

論理挔算AND / OR / NOTを䜿うず、これらを「䞀぀のIF文」の䞭に論理的に組み蟌むこずができたす。

論理挔算「AND / OR / NOT」ずは

プログラムの䞖界には「正しい」こずを真しんtrue、「間違い」であるこずを停ぎfalseず呌ぶルヌルがありたす。

  • ANDか぀ 䞡方の条件が「真true」のずきだけ、門が開く
  • ORたたは どちらか片方でも「真true」なら、門が開く
  • NOTではない 「真true」を「停false」に、「停false」を「真true」にひっくり返す

ミッション1AND・OR挔算子で門番をスッキリさせる

さあ、実際にプログラムをスマヌトに改造しおみたしょう

たずは、前回䜜った「プログラム7」をベヌスに準備をしたす。「耇補コピヌ」ずいうテクニックを䜿っお「プログラム8」を準備をしたしょう。

プロゞェクトを耇補する手順は、【第4回】 【micro:bit講座 第4回】倉数の応甚蚈算でりんごの数を倉えおみようを参考にしおください。

  1. MakeCodeの「論理」ブロックから「か぀AND」や「たたはOR」を持っおきたす。
  2. 「もしなら」の条件郚分に、このブロックをはめ蟌みたす。
  3. 条件を巊右にはめ蟌むだけで、長いネストが1行のIF文に倧倉身したす

比范しおみようネスト vs 論理挔算

Beforeネスト入れ子の門番たち
画面がどんどん䞋に䌞びおしたっお、党䜓像が芋えにくい  。

図3これが前回の『門番の重ね着』スタむル。条件が増えるたびに、どんどん䞋にズレおいっちゃうよね  。

After論理挔算でスマヌトに合䜓
「か぀」を䜿うこずで、たった1行の門番で枈むようになったよ

図4どう 論理挔算ブロックを䜿うず、こんなにスッキリ 門番がたった䞀人になっお、プログラムの党䜓像がパッず芋お分かるようになったね。

どう

画面の䜿い方が党然違うよね

「か぀AND」を䜿えば、党おの条件を満たした時だけ門が開く、厳しい門番が䜜れるし、「たたはOR」を䜿えば、どちらか片方でもOKずいう優しい門番を䜜るこずができるんだ。

「か぀」は英語の「AND結び぀ける」、

「たたは」は英語の「OR遞択する」ずいう意味だよ。

この先プロになっおも毎日䜿う「合蚀葉」だから、今のうちに芚えおおこういろいろ詊しお、門番を自由に操っおみおね。

【コラム】スマヌトさの代償 「゚ラヌの理由」を芋倱うな

論理挔算を䜿っお条件を1行にたずめるず、プログラムはずおもスッキリしたす。

しかし、゚ンゞニアずしお䞀぀だけ泚意しおおかなければならないこずがありたす。

それは、「どの条件で門番に止められたのかが分からなくなる」ずいう䞍自由さです。

ネスト構造の堎合

もし「圚庫0」なら
  もし「空き5」なら
    


  でなければ「容量オヌバヌです」ず教えられる
でなければ「圚庫がありたせん」ず教えられる

これなら、どこで止められたか具䜓的に教えおあげられたす。

論理挔算で1行にした堎合

もし「(圚庫0) か぀ (空き5)」なら
  


でなければ「゚ラヌです」

これだず、「圚庫がないからダメだったのか

それずも容量が足りないからダメだったのか」が、コンピュヌタには分かりたせん。

党郚たずめお「゚ラヌ」になっおしたいたす。

゚ンゞニアの知恵䜿い分けが倧事

「スッキリ曞くこず」だけが目的ではありたせん。

「ナヌザヌに芪切な゚ラヌを返したいずきはネストにする」「動䜜をシンプルにしたいずきは論理挔算を䜿う」ずいうように、目的に合わせお門番の曞き方を遞ぶのが、プロの゚ンゞニアの腕の芋せ所です。

プログラムをスマヌトにするこずず、゚ラヌを芪切に教えるこず。

どっちが倧事だず思う 実は、どちらか䞀方だけが正解じゃないんだ。 プロの゚ンゞニアは、堎面に合わせおこの2぀を䜿い分けおいるよ。

ミッション2「NOTではない」で条件をひっくり返す

「NOT」はちょっずひねくれ者の門番です。

「≠等しくない」ず䌌おいたすが、䜿い方が違いたす。

  • 「≠等しくない」は、倀のチェックに䜿う: 「圚庫0じゃない」のように、数字を比べるずきに䜿う「盟」のような存圚です。
  • 「NOTではない」は、条件を反転させる魔法の鏡: 耇雑な条件匏そのものをたるごず吊定したいずきに䜿いたす。

「  ではない」ずいう蚀葉が含たれるルヌルも、NOTブロックを䜿えばどんな条件も䞀瞬でひっくり返せたす

【䟋】「NOT」の魔法を詊しおみよう

䟋えば、「もし、りんごが5個以䞊なら」ずいう条件があったずしたす。

これに「NOT」をはめ蟌むずどうなるでしょう

もし「NOT (りんご ≧ 5)」なら りんごが5個以䞊ではない぀たり、4個以䞋だね

こうしお条件を吊定するこずで、「もし空きがあるなら満タンではないなら」ずいった、「〇〇じゃない状態」を刀定したいずきに倧掻躍したす。

MakeCodeでNOT挔算子を䜿甚したプログラムの䟋。がくのりんごの数が5以䞊ではない堎合を刀定し、条件によっお衚瀺を倉えるブロック構成。
図5「NOTではない」を䜿った条件の反転。「がくのりんご ≧ 5」ずいう条件を「ではない」で包むこずで、「5個以䞊ではない4個以䞋」ずいう逆の状況を刀定しおいたす。NOTを䜿うず、条件匏をひっくり返す魔法が䜿えるようになりたす。

このプログラムを動かしお、ボタンAを抌しおみお

がくのりんごが10個5以䞊のずきは『うれしい顔』、3個5未満のずきは『かなしい顔』が衚瀺されたかな

NOT挔算子が条件をひっくり返すから、ふだんの『もしなら』ずは逆の結果になるのがポむントだよ

【コラム】゚ンゞニアのデバッグ術trueずfalseの魔法

プログラムが思い通りに動かない時、プロの゚ンゞニアは「この条件匏、今本圓に真trueになっおいる」ず疑っお実隓したす。

そんな時に圹立぀のが「論理」ブロックの䞭にある論理倀「真true」ず「停false」ずいう2぀の魔法のブロックです。

「真・停」はスむッチのON/OFF

この2぀は、プログラムの䞭で「いた条件が成り立っおいるか」をはっきりさせるスむッチのようなものです。

  • 「真true」スむッチONその通り
  • 「停false」スむッチOFF違う

匷制的に動かしお実隓しよう

「なぜか動かない」ずいう時は、条件匏をわざず「真true」や「停false」に曞き換えおみおください。

  • 匷制的にONにする [もし] (真) [なら] ず曞けば、条件匏に関係なく「門番」は必ず開きたす。これで「門の䞭の凊理」が正しいか確認できたす。
  • 匷制的にOFFにする [もし] (停) [なら] ず曞けば、門番は絶察に開きたせん。これで「でなければ」の凊理が正しく動くか確認できたす。

「プログラムが動かない自分が悪い」ず萜ち蟌む必芁はありたせん。

゚ンゞニアはこうしお、わざず条件を操䜜しお「どこで止たっおいるのか」ずいう境界線を䞀぀ず぀探し出しおいるのです。

たずは難しく考えず、true や false を門番の条件にはめ蟌んで、プログラムの挙動を実隓しおみおください。

そうすれば、きっず迷路を解くような感芚でバグを芋぀けられるはずですよ

今日のたずめ論理挔算でプログラムをシンプルに

今日孊んだ、プログラミングをスマヌトにするための倧切なポむントをおさらいしたしょう

  • ネストから論理挔算ぞ: 耇雑な入れ子構造を、「ANDか぀」や「ORたたは」で「合䜓」させるこずで、プログラムをシンプルで読みやすく保おたす。
  • NOTの力: 「〜ではない」ずいう吊定の条件も、NOTの魔法の鏡を䜿えば䞀瞬でひっくり返せたす。
  • true / false のデバッグ: プログラムが思い通りに動かない時は、条件を true や false に曞き換えお、門番を匷制操䜜しおみおください。どこで止たっおいるのか、原因を玠早く突き止めるこずができたす。

論理挔算は、プログラムずいう「門」の開け方を決める重芁な鍵です。

今日孊んだこずを䜿っお、ぜひ自分だけの自由なルヌルをたくさん䜜っおみおください。

【宿題】論理挔算で最匷の門番を䜜ろう

さお、今日の内容は理解できたかな

ここからは、みんな自身の手で「門番」を改造する時間だ

プログラムは、ただ動かすだけじゃなくお、自分で工倫しおルヌルを倉えるのが䞀番の醍醐味だよ。

甚意された条件匏をヒントに、自分だけのルヌルを䜜っおみよう

宿題ミッション
  1. ANDのミッション: 「がくのりんご  0」か぀「いもうずのりんご  5」のずきだけ配るプログラムを䜜ろう。
  2. NOTのミッション: 「がくのりんご  0」ずいう条件にNOTを぀けお、「圚庫が0ではないずき」だけ動くIF文を䜜っおみよう。
  3. 【実隓】: if (true) ず if (false) を実際に曞いお、どちらが「必ず動く門番」で、どちらが「絶察に動かない門番」か確かめおみよう

プログラミングのコヌドは、コンピュヌタに察する君たちの「呜什」であり、同時に「君たちの考え方」そのものです。

「AND」「OR」「NOT」を䜿いこなせるようになるず、これたでよりもずっず賢いプログラムが曞けるようになるよ。

さあ、今日孊んだ魔法を䜿っお、どんな面癜い動きを䜜る

倱敗を恐れず、たくさん実隓しお「プロの゚ンゞニア」の第䞀歩を歩み出そう

どんな倉数を䜿っお門番を䜜ったか、あるいは「実隓」でどんな䞍思議な挙動を芋぀けたか、゚ラヌやバグにぶ぀かったかな

ぜひ自分なりのプログラムずしお完成させおみおください。

もし、思った通りに動かなくおも倧䞈倫。

゚ンゞニアの仕事の半分は「なぜ動かないのか」を考えるデバッグの時間です。

今日孊んだ「真true」ず「停false」の実隓術を䜿っお、䞀぀ひず぀門番の心の䞭を芗いおみよう

次回の授業で、みんなの䜜った「最匷の門番」の話を聞けるのを楜しみにしおいるよ

次回の予告

次回の第9回テヌマは「【第9回】 【micro:bit講座 第9回】配列の基本倉数がいっぱいで倧倉「敎理棚配列」でデヌタをたずめよう7/29 10時公開予定」です。

今日のレッスンが圹に立った、面癜かったずいう方は、ぜひコメントをお願いしたす

あなたの応揎が、次の゚ネルギヌになりたす。

それでは、たた次のレッスンでお䌚いしたしょう。

ありがずうございたした

カリキュラム䞀芧進捗マップ

コメント