Scratchで 割り算のアルゴリズムを考えてみよう
- 2020年03月31日(火)
- カテゴリー:プログラミング
- コメントを見る(0)書く
3年生用にって思って「余りのある割り算しか出来ない電卓」を作りました。こんな物売り物にはならん、と一蹴されますが、プログラミング体験にもってこいなんです。
電卓の基本的な反応として、数字キーを押したら、とりあえず変数にその数字を追加するってコードが要ります。そしてそれを数字キー全部に書かなきゃいけませんが、同じような仕事を9回も繰り返すのは面倒なことです。
その部分はやっておいて教材として提供することにして、「イコール」キーを押したらどうするか? って部分だけコーディングすると考えさせりゃぁ、プログラミング体験になりそう。
Scratchは、「〇を〇で割ったあまり」ってのやら、「〇の切り下げ」なんてのが、すでに用意されているので、簡単なことです。
しかし、九九を知らないコンピュータは割り算をどうやっているか、って考えると面白そうです。
“割られる数(前項)から割る数(後項)を引いて”は、“「回数」に1加える”って繰り返しを、“後項より前項が小さくなるまで”する、ってアルゴリズムを思いつくことでしょう。
コレって大昔のメカニカルな手回し計算機の割り算の方法だよねぇ。グリグリ回してチンって鳴ったら、マイナスになったってことなので1回転戻すって操作だったよね。
考えやすいように(表示部分の数値が動いてしまうからなんだが)「割られる数」「割る数」「回数」って変数にして作ってみました。そのための書き込みや書き戻しの5行を除くと、何度も引き算をしてその回数を数えるって、たった2行の繰り返しですワ。これは算数専門の先生が “割り算は引き算とは違うぞ” って言いそうなアルゴリズム。
割られる数だけしか入れていない時にイコールをおしたらどうなるか?なんてことも考えておかなくちゃいけません。
割り算ですから、下手をすりゃぁ「ゼロ」で割る事態が想定されます。それをいさめる表示が要るなぁってのが、プログラミングの勘所。“「ステージ」とは割る数の入力モード” で、それに加えて “割る数が0ではない” 場合に余りのある割り算を開始することにしています。
プログラムを作るってことは、使う人は何するかワカランって思ってするもんなのです。予測外の操作をされた時の対処をきちんとやらなくっちゃぁ「バグってる」って言われるんです。
こんなコーディングでしょうかねぇ。
計算結果が出た後、数字キーを打つとさらに数字が入るので、ステージを「0」にして入力を受け付けないようにしています。
また、あまりを「0」と表示するのも方法ですが、式としてはおかしいって声もありそうなので、「なし」と表示するようにしています。
作ってみて、加減乗算をしない!ってことにしたら、すっきりとした電卓になりました。しかも、3年生向けですから、小数点も取っちゃいました。ノートに書く式の形で表示しているのも、3年生向け。
もっと上の学年が、プログラミングの学習に使うのなら、コーディング上の問題点を発見しやすくて、トレーサビリティが良い。
プログラミングで児童に与える時は、「計算する」ってメッセージを、背景のコードで受けています。背景のコードの「計算するを受け取った時」のキャップスタックを外して動作しないようにしてから、校内サーバーなどに保存して使うと良いです。
私のスタジオ「小学校の授業で」に置いています。作品数が多くなったので「小学校の授業で、プログラミング」ってスタジオを増設しました。