<問題2>俵杉算(たわらすぎざん):江戸時代の書物「塵劫記(じんこうき、じんごうき)」にある問題です。※参考文献:塵劫記、吉田光由著、大矢真一校注、岩波書店、1977。
原本(げんぽん)の例は、ここをクリックすると見ることができます。
この右側のページに「第十二 俵すぎざんの事」というタイトルがつけられた問題があります。
図にもあるように、あらましは次のようなものです。

米俵(こめだわら)を右の図のように積むとき、俵(たわら)の数は全部でいくらか?

という問題です。図のような積み方を杉形(すぎなり)と呼びます。杉の木の形のように上がとがった三角の形からきているようです。原本の例では、一番下が13俵で全部で91俵となっています。

<和算による解き方>
和算(または算数)による解き方は、次のような考え方です。
●の記号は、1俵( いっぴょう )を横から見た図とします。○の記号は、補(おぎな)って考える1俵とします。

上の図は、●の形が俵を積み上げた元の状態(じょうたい)です。その上の○は、同じ数の俵をひっくり返して並(なら)べたものです。これを下の図のように、一番下以外の各段(かくだん)を左に寄(よ)せると長方形になります。したがって、これから明らかなように、

14(13+1)段×13俵÷2=182÷2=91俵、と求まります。

<数学での解き方>(詳細は省略します)
等差数列の和の計算で簡単に求まります。
ところがもし、次のように積まれていたら数学の式では簡単に解けなくなります。すべての段を順に調べていくことになります。そうなると「プログラム」の出番です。このような虫食いの場合は、配列を使うことになります。配列は今回の学習範囲をこえますので、説明を省きます。

<プログラミングによる解き方>
第1回の問題と同じように、しらみつぶしの方法で計算していくことができます。
どのような方法かというと、人間と同じようなやり方ですればよいということです。

まず、1番下の13俵にすぐ上の段の12俵を加えると、13+12=25俵になります。
次に、その25俵に、その上の11俵を足して、25+11=36俵となります。
つづいて、36+10=40俵になります。
以下同様に計算していきますが、全体として見れば、
 13+12+11+10+9+8+…+3+2+1=91
という計算をすればよいことになります。
別の言い方をすれば、「13から始めて1まで、1ずつ少なくなる数の合計を求める」ことになります。

ただし、13+12というように始めてもよいのですが、プログラミングでは次のように考えるのが一般的です。
 0+13+12+11+…+3+2+1
最初は0に13を足して、次に12を足して、さらに11を足して、…、というように考えます。そうすると、□+△=◇という計算を13回すればよいということになります。
このとき、プログラミングでは□+△→□というようにとらえます。つまり、変数□の内容に値△を足して変数□に入れなおす、と考えます。つまり、「俵の合計+段ごとの数→俵の合計」のような意味になります。なお、矢印の左側と右側を入れ替えると、 「 俵の合計 ←俵の合計+段ごとの数」のような表現になります。

以上の処理の流れをまとめると、次のようになります。

1. 俵の合計を0にする。
2. 段ごとの数を13にする。
3. 段ごとの数が1まで繰り返し、0になったら終わります。つまり、1より小さくなるまで繰り返します。
4. 「 俵の合計 ←俵の合計+段ごとの数 」の計算をします。
5. 段ごとの数を1減らします。
6. 3の式が成り立ったら繰り返しを終わります。
7. 答えを表示して、プログラムを終了します。

<Scratchでプログラミング>
それでは、上でまとめた処理の流れをもとにして、Scratchでプログラムを作ってみましょう。

はじめに、[旗(はた)が押されたとき]ブロックを配置(はいち)します。

処理の中で変化している数は、「俵の合計」と 「段ごとの数」 ですので、この2つを変数として準備します。なお、今回はわかりやすいように、変数名を日本語にしています。
変数のコードにおいて[変数を作る]のボタンを押(お)して、次のように新しい変数を作ります。 「段ごとの数」 も同じように作ります。

こうして作った変数に値を入れるには、つぎのブロックを配置します。

続いて、繰返し処理のブロックを配置します。

俵の合計の計算および段ごとの数を1減(へ)らすために、次のブロックを上の繰り返し処理のブロックの中に埋(う)め込(こ)みます。

そうすると、つぎのようになります。

最後(さいご)に、 答えを表示 するブロックを追加(ついか)します。

完成(かんせい)した形(かたち)は次のようになります。

このプログラムを実行すると、キャットが次のように答えてくれます。


<練習問題2-1>俵杉算(入力処理の追加)
次の実行例のように、一番下の段の俵数(たわらすう)をキーボードから入力できるように、上のプログラムを修正してください。
【ヒント】
・コード[調べる]の中の次のブロックを使う。

実行すると、次のように聞いてくるものとします。


<練習問題2-2>俵杉算(台形積み)
俵杉算 の原本の左側にある台形(だいけい)積みの場合の計算を行うプログラムを作成してください。
【ヒント】
・繰り返しの条件をどのようにすればよいか考える。