A. 久しぶりに よんすうパズル の問題。
a. 2247
b. 2269
c. 2288
e. 2357
f. 3468
これらの問題はそれぞれ複数の解がある。2つ以上、見つけてみよう。
B. にすうパズル のプログラム
2つの数の和、差、積、商の問題を出題するスクラッチのプログラムを
前々回、前回に作った。
今回は、a の数字と b の数字を使って z の数を作るパズル
(これを にすうパズル と呼ぶことにする)を出題するプログラムを作ってみよう。
0. 旗をクリックすると次の画面が表示される。(これを n=0 の画面とする。)
和、差、積、商のどれかの演算で計算した結果が z に表示される。
たとえば、次の画面になる。(これを n=1 の画面とする。)
2. 和、差、積、商のどの演算をしたかを考える。パズルが頭の中で解けたら、
その式を e, f に入力する。
キーボードの a を押すと a にある数字が e に入り、b にある数字が f に入る。
キーボードの b を押すと b にある数字が e に入り、a にある数字が f に入る。
上の例ではキーボードの b を押し、次の画面になる。(これを n=2 の画面とする。)
3. 演算子を入力する。
+ のとき 1、
− のとき 2、
x のとき 3、
÷ のとき 4
をキーボードから入力。式の計算結果が g に表示される。
上の例ではキーボードの2を押すと次の画面になる。(これを n=3 の画面とする。)
スクラッチのプログラムを順に見ていこう。
0. 旗を押したときに
「変数を作る」を使って、a, b, z, e, O, f, =, g を作る。
これらはチェックをつけ、画面に表示し、場所を上記のように移動しておく。
変数 = を画面上で右クリックし、「大きな表示」を選択しておく。
これらの変数の値はプログラムで設定する。
画面上に表示されていないが、n, Oa, za も作る。
変数 n は、どの画面が表示されているかを覚えておくための変数で、最初は 0。
変数 Oa は、正解の演算子を覚えておく変数。
変数 za は、割り算が割り切れるようにするための作業用の変数。
スクラッチのプログラムを、このように画像で表示すると、
わかりやすいと思うがこのように画像を表示するのは面倒だ。サボりたい。
そこで上記のプログラムを次のように書くことにしよう。
旗がクリックされたとき
[n] を (0) にする
変数 [n] を隠す
[a] を () にする
変数 [a] を表示する
[b] を () にする
変数 [b] を表示する
[z] を () にする
変数 [z] を表示する
変数 [za] を隠す
[e] を () にする
変数 [e] を表示する
[O] を () にする
変数 [O] を表示する
変数 [Oa] を隠す
[f] を () にする
変数 [f] を表示する
[=] を (=) にする
変数 [=] を表示する
[g] を () にする
変数 [g] を表示する
(私をクリックするとスタート) と (2) 秒言う
1. 猫をクリックしたときの動作を次のように書く。
このスプライトがクリックされたとき
もし <(n)=(0)> なら
|[a] を ((1) から (9) までの乱数 ) にする
|[b] を ((1) から (9) までの乱数 ) にする
|[Oa] を ((1) から (4) までの乱数 ) にする
|makez
|変数 [a] を表示する
|変数 [b] を表示する
|変数 [z] を表示する
|[e] を () にする
|[O] を () にする
|[f] を () にする
|[g] を () にする
|[n] を (1) にする
つまりスクラッチで書くと次のようになる。
ここで makez は a と b に演算子 Oa を使って z の値を決めるプログラム。
a-b が負にならないように、a÷b が割り切れるようにする。
定義 makez
もし <(Oa)=(1)> なら
|[z] を ((a + (b)) にする
でなければ
|もし <(Oa) = (2)> なら
||もし <(a) > (b)> なら
|||[z] を ((a) - (b)) にする
||でなければ
|||[z] を ((b) - (a)) にする
|でなければ
||もし <(Oa) = (3)> なら
|||[z] を ((a) x (b)) にする
||でなければ
|||[za] を ((a) x (b)) にする
|||[z] を (a) にする
|||[a] を (b) にする
念の為、スクラッチで表すと。
2. 和、差、積、商のどの演算をしたかを考え、その式を e, f に入力する。
キーボードの a を押すと a にある数字が e に入り、b にある数字が f に入る。
キーボードの b を押すと b にある数字が e に入り、a にある数字が f に入る。
これを処理するために、キーボードの a が押されたときの処理と、
キーボードの b が押されたときの処理を次のように書く。
[a] キーが押されたとき
もし <(n) = (1)> なら
|[e] を (a) にする
|[f] を (b) にする
|[n] を (2) にする
[b] キーが押されたとき
もし <(n) = (1)> なら
|[e] を (b) にする
|[f] を (a) にする
|[n] を (2) にする
この処理が終わると n=2 の画面となり、演算子を入力するときの画面となる。
3. 入力したい演算子が + のとき 1、− のとき 2、x のとき 3、÷ のとき 4 を入力する。
プログラムは次のように書く。
[1] キーが押されたとき
もし <(n) = (2)> なら
|[O] を (+) にする
|[g] を ((e) + (f)) にする
|[n] を (3) にする
|(n=3) を送る
[2] キーが押されたとき
もし <(n) = (2)> なら
|[O] を (-) にする
|[g] を ((e) - (f)) にする
|[n] を (3) にする
|(n=3) を送る
[3] キーが押されたとき
もし <(n) = (2)> なら
|[O] を (x) にする
|[g] を ((e) x (f)) にする
|[n] を (3) にする
|(n=3) を送る
[4] キーが押されたとき
もし <(n) = (2)> なら
|[O] を (➗) にする
|[g] を ((e) ➗ (f)) にする
|[n] を (3) にする
|(n=3) を送る
この処理が終わると n=3 の画面となり、メッセージ n=3 を送る。
4. 猫は、メッセージ n=3 を受け取ると、計算結果を g に表示し、
z と一致しているか調べ、合っていれば「正解です!!!」と表示し、
違っているときは「うーん...」と表示する。
次の問題をするときのために「私をクリックするとスタート」と表示し、
n=0 とする。
プログラムは次のように書く。
[n=3] を受け取ったとき
もし <(g) = (z)> なら
|(正解です!!!) と (2) 秒言う
でなければ
|(うーん...) と (2) 秒言う
(私をクリックするとスタート) と (1) 秒言う
[n] を (0) にする。
このプログラムは nisuu-puzzle-simple2 として
また、このプログラムと動作は同じだが、操作方法を表示するプログラム
nisuu-puzzle-simple と、入力のやり直しができる nisuu-puzzle も
Math Quiz Generator https://scratch.mit.edu/studios/28927140 に置いてある。
0 件のコメント:
コメントを投稿