2021/03/13

8. にすうパズルを Scratch で!

A. 久しぶりに よんすうパズル の問題。
 a. 2247
 b. 2269
 c. 2288
 e. 2357
 f. 3468
 これらの問題はそれぞれ複数の解がある。2つ以上、見つけてみよう。

B. にすうパズル のプログラム
    2つの数の和、差、積、商の問題を出題するスクラッチのプログラムを
 前々回、前回に作った。

 今回は、a の数字と b の数字を使って z の数を作るパズル
 (これを にすうパズル と呼ぶことにする)を出題するプログラムを作ってみよう。

 0. 旗をクリックすると次の画面が表示される。(これを n=0 の画面とする。)

 1. 猫をクリックすると、a と b に数字が表示され、これらの数に対して、
  和、差、積、商のどれかの演算で計算した結果が 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) にする

  念の為、スクラッチで表すと。

  この処理が終わると n=1となり、e, f を入力するときの画面が表示されている。

 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 件のコメント:

コメントを投稿

20. 円錐の半分?

17-19 で三角形、四角形の面積を半分にする問題を解いた。 今回は円錐を半分にする実験をしてみよう。 まず、円錐を作るための図形をスクラッチで描いてみた。 プログラムはここ。 https://scratch.mit.edu/projects/561804896 これを実行すると...