事例53
歯車式計算機を体験してみる~メカの動きから体験するアルゴリズムのしくみ
横浜共立学園高等学校 矢部一弘先生
高校3年生がコンピュータの歴史を学ぶときに 、もともとコンピュータはcomput+erで、計算する人のことであり、それが機械に置き換わったことを見せるために、歯車式計算機を体験してもらっています。
この歯車式計算機は、基本的にはブレーズ・パスカルが1645年には発明した機械式計算機「パスカリーヌ」から大幅に変わっていません。電卓が発明される昭和40年代まで、こういったものが普通に使われていました。この計算機が日本で普及したのは、足し算・引き算だけでなく、掛け算、割り算ができることが理由です。
[参考サイト]タイガー計算機
http://www.wizforest.com/gear/tiger/
ハンドルを回すと歯車が動く。その仕組みの中にアルゴリズムが潜んでいる!
[掛け算]
下記の動画は、実際に歯車式計算機で計算する様子です。この動画では、3×8を説明しています。
https://www.youtube.com/watch?v=cQlfd7XqkrE
例えば、367☓581をやってみます。
367×581という計算は、置数レバーで367とセットした後に、581回ハンドルをまわして、367を581回足し算します。これは、交換法則を使って581×367と数値の順番を入れ替えたとしても、ハンドルを367回まわす必要があり大変です。そのため、歯車式計算機には桁をずらすことで、ハンドルを回す回数を少なくする機構がついています。
回数表示部と結果表示部は、桁移動つまみを使って、左右に移動することができます。このとき、右に1桁ずらして計算すると、ハンドルの1まわしはもとの10回分、右に2桁ずらすと、もとの100回分まわしたことになります。左にずらすと、10分の1、100分の1となります。
○367×581の計算
(1)置数レバーで367をセットする。
(2)ハンドルを1回まわす。
(3)桁移動のつまみを1桁右に移動して「十の位」にセットし、8回まわす。
(4)さらに1桁右に移動して「百の位」にセットし、5回まわす。
(5)結果として1+8+5=14回と581回に比べ、ハンドルを回す回数がかなり少なくなる。
この計算は先に右へ2桁移動して、百の位(5回)、十の位(8回)、一の位(1回)の順にハンドルを回して計算しても同じ結果になります。
[割り算]
「引き戻し法」は被除数から除数の引き算を繰り返し、引き算の結果が負になった時点(→この時「チーン」鐘が鳴ります)とで1回引多く引きすぎた、ということなので、負になっている結果に除数を再び加えて剰余を求め、引き戻した回数を1回減らして商と余りを求めるという割り算の計算方法です。
この方法は、「引きすぎてしまったら(負になったら)戻す」というところがまさにアルゴリズムです。
(1)引き戻し法
被除数から除数の引き算を繰り返し、引き算の結果が負になった時点で1回多く引き過ぎているので、負になっている結果に除数を加えて剰余を求め、引き算した回数を1回減らして商を求める割り算の計算方法。
具体的な操作は以下の通り。
(1)割られる数を置数レバーにセットし、1回ハンドルを回して結果表示部にコピーする。
(2)回転数表示部をリセットする。
(3)割る数を置数レバーでセットする。
(4)ハンドルを掛け算の時と逆方向に回す(引き算する)。
(5)逆方向にハンドルを回すが、回数表示部には正しく回転回数が表示される。
(6)回す度に結果表示部の数値は置数レバーにセットされた数値の分だけ引かれていく。
(7)0よりも小さくなった時点で、「チーン」と鐘がなる。
(8)この状態は余りが0よりも小さく引きすぎの状態なので、最後にハンドルを正方向に回す。
(9)この時の回数表示部の数値が商、結果表示部の数値が余りとなる。
(最初の結果表示部)÷(置数レバーでセットした値)=(回数表示部)… 余り(結果表示部)
掛け算と同じように桁移動つまみを利用するとハンドルを回す回数を減らすことができます。このとき、必ずもっとも大きい桁から始めます。
(2)引き放し法
しかし、これではハンドルを回す回数が多すぎてしまうため、桁をずらす機能と割り算を組み合わせてハンドルの回転数を最小にする「引き放し法」があります。
引き放し法とは、桁をずらす機能と割り算の組みあわせを使い、ハンドルの回転数を最小にする計算方法で、割り算の答えを効率良く求めることができます。コンピュータのプログラムでも使われている手法です。この方法のアルゴリズムは、余りが正のときは引き算を、余りが負のときは足し算をするということです。
○941 ÷ 4 の計算をしてみる
(1)941(割られる数)を置数レバーでセットし、1回ハンドルを回して結果表示部にコピーする。
(2)回数表示部をリセットする。
(3)4(割る数)を置数レバーでセットする。
(4)桁を2桁右にずらし、「百の位」にセットする。
(5)941 から400 を引く。3回引いたところで 0 以下となり、「チーン」と鐘がなる。
(6)桁を1桁左にずらし、「十の位」にセットする。
(7)余りの「999…99999741」(-259を表す状態「補数」)に40を加えていく(足し算の方向にハンドルを回す)。7回加えたところで0 以上となり、「チーン」と鐘がなる。
(8)桁を1桁左にずらし、「一の位」にセットする。
(9)余りの「21」から4を引く。6回引いたところで0 以下となり、「チーン」と鐘がなる。
(10)ハンドルを回した数は、正方向を黒、逆方向を赤で表すと376 となる。
ここで、計算を打ち切る時は、余りが「999…99999997」(-3)となり負数なので、ハンドルを逆に1回回し、375と一の位の回転数からを1減らす。つまり、表示値が375となり、余りが1となる。
(11)376→375=3×100-7×10+5×1=235 … 余り1となり、正しく計算されている。
(12)桁を調整すると小数点以下も計算できる。(動画参照)
376.86→376.85=3×100-7×10+6×1-8×0.1+5×0.01=235.25
これも余りが負の数のときは除数を加え、余りが正の数のときは除数を引くという2つの動作で、計算のアルゴリズムを表しています。
私自身が工学部出身なので、機械は単純に面白いと考えているので、そういうことも生徒に伝わるとよいかと考えて導入しました。女子校ということもあり、進学先に工学部を選ぶことは少ないのですが、メカニカルなものに興味を持ってもらいたいという気持ちがあります。
これを授業で使うと、何人かが授業後も「もっとやってみたい」と触りにきます。コンピュータや機械、アルゴリズムに生徒の興味を引くための導入におすすめです。
参考
今回、展示している歯車式計算機はこの商の補正を自動的に行えませんが、タイガー式計算機は割り算のモードに切り替えて計算をした時に補正機能があり回転表示部に、376.86 とは表示されません。赤字の部分は、逆回転しているので、回転表示部は自動で「引き算」します。
タイガー式の回転表示部の動き
(1)百の位は0に3を足して、回転表示部の数は3(百の位)。余りが負
(2)1桁ずらして30となった表示から7を引いて、回転表示部の数は23
(百の位、十の位)余りが正
(3)1桁ずらして230となった表示に6を足して、回転表示部の数は236
(百の位、十の位、一の位)余りが負
(4)1桁ずらして2360となった表示から8を引いて、回転表示部の数は2352
余りが正 (百の位、十の位、一の位、小数点第1位)
(5)1桁ずらして23520となった表示に5を足して、回転表示部の数は23525
余りが0 (百の位、十の位、一の位、小数点第1位、小数点第2位)
(6)商は235.25で、正しく941÷4の結果と一致
https://www.youtube.com/watch?v=JITiurPd3Uo
※全国高等学校情報教育研究会 第9回神奈川大会より