【第5回】 【micro:bit講座 第5回】変数の実践:もっと便利に!変数で計算を自動化しよう!

MakeCode × micro:bit編

第5回となる今回のテーマは、「家族みんなのりんご管理」。 前回まで「ぼく」「兄」「妹」の3人でしたが、今回はついに「お父さん」「お母さん」も登場して、家族全員分のりんごを管理することになりました。

【第5回】では、第4回で学んだ「変数」の考え方をさらに深め、変数を使った計算や、時間の経過とともに変化する数字の更新を実践していきます。

今回の講座を通して、「変数を使いこなす技術」を磨きながら、同時に「変数だけで頑張る管理の限界」についても、身をもって感じてもらいたいと思います。

前回の宿題:答え合わせ

本題に入る前に、前回の宿題を覚えていますか?

自分のお小遣いを「おこづかい」という変数で管理し、Aボタンで「100円もらう(加算)」、Bボタンで「50円使う(減算)」、A+Bボタンで「いま、いくら残っているか」を表示するチャレンジでしたね。

このプログラムでは、「変数(おこづかい)」をいかに正しく更新するかがポイントです。

プログラムの組み方

  1. 最初だけ: 変数「おこづかい」を「0」に初期化します。
  2. Aボタンが押されたとき: おこづかい = おこづかい + 100 (現在の値に100を足す)
  3. Bボタンが押されたとき: おこづかい = おこづかい - 50 (現在の値から50を引く)
  4. A+Bボタンが押されたとき: 数を表示 [おこづかい] (今の残額を表示)
MakeCodeの画面で「おこづかい」変数を使い、Aボタンで加算、Bボタンで減算、A+Bボタンで残高を表示するプログラムのブロック構成例
図1:宿題の解答例。変数「おこづかい」を更新し、現在残額を管理するプログラムです。ここからさらに家族の人数や果物の種類が増えると、プログラムがどう変化するか考えてみましょう。

実際に動かしてみて、Bボタンを連打すると「おこづかい」がマイナスになってしまったはずです。
「0円の状態で50円使う」という命令を出したとき、コンピューターは「0 – 50 = -50」と正確に計算してしまいます。

「もし、おこづかいが0より小さくなろうとしたら、計算を実行しない」という工夫が今後の鍵になります。これについては、また別の機会にじっくり攻略していきましょう。

今日のミッション:家族全員のりんごの数を管理しよう

今回も前回の「プログラム4」の続きから作ります。「複製(コピー)」というテクニックを使って「プログラム5」を準備をしましょう。

プロジェクトを複製する手順は、【第4回】 【micro:bit講座 第4回】変数の応用:計算でりんごの数を変えてみよう!を参考にしてください。

ミッション1:新しい家族「お父さん」「お母さん」の登場とデータの追加

前回は「僕」と「兄」、「妹」のりんごを管理しました。今回は、さらに「お父さん」「お母さん」を追加して、5人のデータを扱います。

1. 「おとうさんのりんご」と「おかあさんのりんご」変数を作る

まずは、ツールボックスの「変数」から「変数を追加する…」をクリックし、「おとうさんのりんご」「おかあさんのりんご」という新しい魔法のバッグを作りましょう。

2. 初期値をセットする(最初だけ)

「最初だけ」ブロックの中に、以下の設定を追加します。

  • 変数「おとうさんのりんご」を [3] にする
  • 変数「おかあさんのりんご」を [6] にする
MakeCodeの「最初だけ」ブロックの中に、家族5人分のりんごの数と、それぞれのやり取りに使用する変数の初期値を設定したブロック群
図2:家族5人分と、やり取りに使用する変数をすべて「最初だけ」ブロックで初期化する様子。管理する数が増えると、ブロックの量も一気に増えていきます。

3. ボタンで表示する?

次に、お父さんとお母さんのりんごの数を確認するボタンを作ります。 「入力」カテゴリーから「ボタン ? が押されたとき」というイベントブロックを配置し、その中に「数を表示 [おとうさんのりんご] 数を表示 [おかあさんのりんご] 」を入れればよかったですよね?

あれ、AボタンもBボタンもA+Bボタンも使って、あと二人分足りませんよね。

ミッション2:制約を「工夫」で乗り越えよう!

ボタンが足りないという制約を、皆さんのアイデアで解決してみましょう!以下の3つのアプローチから、どれか一つ(あるいは複数)に挑戦してみてください。

1. 「イベント」を組み合わせる工夫

micro:bitにはA、B、A+B以外にも「入力」があります。これらを組み合わせて、家族全員の情報を表示する「入力メニュー」を作ってみましょう。

  • 「ゆさぶられたとき」: 本体を振ると、お父さんの数が出る。
  • 「ロゴをタッチしたとき」: ロゴを触ると、お母さんの数が出る。

これなら、ボタンを温存したまま家族全員の情報を呼び出せますね!

2. 表示の仕方を工夫する(シーケンス処理)

一つのボタン(例えばA+B)を押したときに、連続して全員の数を表示させる工夫です。

  1. 「お父さんの数」を表示
  2. 「一時停止(1秒)」
  3. 「お母さんの数」を表示
  4. 「一時停止(1秒)」 …とブロックを並べることで、ボタンを押し直さなくても、流れるように家族全員の情報を確認できます。

3. 「目的」を絞り込んで工夫する

「5人分をバラバラに見る」のではなく、「全員の合計」や「一番多いのは誰か?」というように、見るべき情報を整理するのも立派な工夫です。

「イベント」を組み合わせる方法

micro:bitの「入力」を見てみると「ロゴが短くタップされたとき」「端子P0が短くタップされたとき」があります。これなら画面のエミュレータでも動作しそうなのでこの二つの入力動作で表示することにします。

  • 「ロゴが短くタップされたとき」: お父さんの数が出る。
  • 「端子P0が短くタップされたとき」: お母さんの数が出る。
MakeCode画面。ロゴが短くタップされた時にお父さんのりんごを減算する処理と、端子P0が短くタップされた時にお母さんのりんごを配る計算処理を行うブロック構成
図3:お母さんがみんなにりんごを1つずつ配るプログラム。自分の持ち数を減らし、他の4人全員の持ち数を増やすという、複数の変数を連携させる複雑な計算を行っています。

エンジニアからの問いかけ:制約があるからこそ面白い!

もしボタンが無限にあったら、プログラムはただ「作業を並べるだけ」の退屈なものになってしまうかもしれません。でも、「ボタンが足りない」「画面が小さい」「変数が多すぎる」という制約があるからこそ、私たちは「どうすれば一番使いやすいかな?」と知恵を絞ります。

  • どうすれば、もっと楽に情報を確認できるだろう?
  • どうすれば、ボタンを間違えずに済むだろう?

こうした「工夫」の積み重ねが、便利なアプリやゲームを作ります。

さあ、皆さんのmicro:bitを、限られたボタンをフル活用して「最高の家族管理システム」に改造してみましょう。どんな工夫を思いつきましたか?ぜひ教えてください!

ミッション3:りんごをあげる「やり取り」をプログラムする

ここからが今回のレッスンのハイライトです。 前回「僕が1個、兄が1個、それぞれ妹にりんごをあげた」という状況をプログラムで表現しました。今回はさらに「お父さんが1個食べる、お母さんがみんなにりんごを1つずつあげる」という状況をプログラムで表現します。

1. 「あげる数」「たべる数」も変数にする

将来的にすぐ変更できるように、「誰が何個あげるか」を管理するための新しいバッグを2つ作ります。

  • 変数「おとうさんがたべるりんご」を [1] にする
  • 変数「おかあさんがあげるりんご」を [1] にする

これらを「最初だけ」ブロックに追加しましょう。

2. 家族全員のりんごを計算する

いよいよメインイベントです。「ロゴが短くタップされたとき」「端子P0が短くタップされたとき」の処理を追加しましょう。 合計を計算して、家族全員のバッグを最新の状態に更新します。

MakeCode画面。家族5人分のりんごを管理し、ロゴや端子タッチで「食べる」「配る」という複雑なデータのやり取りを実行するプログラム全体の構成。
図4:今回の「家族みんなのりんご管理」プログラム全体像。変数が増え、計算処理が複雑になることでブロックの数が大幅に増加しています。これが変数だけで頑張る管理の限界です。

今日のまとめ:変数と工夫のコンビネーション

今回のレッスンでは、以下の重要なポイントを学びました。

  • 変数の大規模管理: 大量に変数を扱うことの難しさを体験しました。
  • 制約を乗り越える工夫: 新しい入力を活用し、操作性を最適化する方法を学びました。
  • 複雑なやり取りの再現: 日常の動きを、変数の値を正しく「更新」することで再現しました。
  • 変数の管理限界: なぜもっと賢い管理方法が必要なのかを身をもって理解しました。

今日のあなたは、「変数地獄」とも言える複雑なプログラムを自分の手で組み上げました。もし明日、家族が100人になったらどうすればいいでしょうか?その「大変さ」こそが、後に学ぶ「配列(リスト)」という魔法の棚を理解するための、何にも代えがたい最高の準備になります。

【宿題】お母さんのりんご配りゲームを作ってみよう

実際のプログラミング現場では、ただプログラムを動かすだけでなく、「もしものハプニング」に備えるルール作りが非常に重要です。今回は、あなたが「プログラムの管理者」となって、お母さんのりんごを賢く配るための管理システムを作ってみましょう。 ただし、一つだけ注意点があります。「ルールを無視して操作すると、プログラムは正直にバグを起こします」。あえてルールを破って、コンピューターがどう反応するか、その目で確かめてみてください。

宿題ミッション:

お母さんは今、りんごを5個持っています。でも、むやみに配るとすぐに在庫がなくなってしまいますよね。そこで、今回は「りんごの在庫管理ゲーム」を作ります!
「残数を調べる」「配る」「補充する」という3つのアクションを駆使して、家族みんなを満足させましょう。さあ、あなたはバグを起こさずに、完璧な管理ができるかな?

お母さんはりんごを5個持っています。下のルールに従ってりんごを配るプログラムをつくってください。
<ルール>
1.りんごを配る前には必ずAボタンを押して、残りのりんごの数を調べて(目で見て)ください。
2.残りのりんごが3個以上あればBボタンを押して、3個配ることができます。
3.残りのりんごが3個なければA+Bボタンを押して、3個補充することができます。

これまで、計算はすべてコンピューター(micro:bit)任せでしたが、今回は「人間」と「コンピューター」で役割分担をしてみましょう。
「在庫が3個未満なら配らない」というルールを、まずはプログラムではなく、あなたの「操作の工夫」で守ってみてください。実際に動かしてみて、「もし守らなかったらどうなるか?」を体験することが、次回学ぶ「IF文(条件分岐)」という最強の魔法への一番の近道です。

次回の予告

次回の第6回テーマは「【第6回】 【micro:bit講座 第6回】条件分岐の基本:IF文で「もし〜なら」をプログラミングしよう!(7/8 10時公開予定!)」です。

次回は、りんごがマイナス!? まちがいをなおそう!。条件分岐(IF文)の使い方を一緒に学んでいきましょう。

今日のレッスンが役に立った、面白かったという方は、ぜひコメントをお願いします!あなたの応援が、次のエネルギーになります。

それでは、また次のレッスンでお会いしましょう。ありがとうございました!

コメント