10.電卓の仕様




『電卓の仕様』
キーボードからの入力が出来たら、次は入力値による演算を行ないます。
ところで、電卓は入力から結果を出力するまでをどのような処理を行なうのでしょうか?
ここでまた、電卓になりきって考えてみます。

『電卓の動作を大まかに追う』
例えば「5+3=」の計算をする場合「5」「+」「3」「=」の順番にボタンを押します。又「3−4+5=」の計算をする場合「3」「−」「4」「+」「5」「=」の順番にボタンを押します。
このパターンを図にすると下のようになります。ちなみにこのような図を「処理シーケンス」と呼びます。



「数字1」「演算子1」「数字2」と入力され次の「演算子2」(イコール”=”を含む)を入力された時に、「数字1」と「数字2」を「演算子1」で演算を行い、さらに「数字3」「演算子3」を入力された時に、前回の演算結果と「数字3」を「演算子2」で演算を行う。後はこの繰り返しとなる。これが、一連の大まかな動作である。

『法則を見つける』
今あげた図をよく見ると、ある繰り返しがある事に気が付く。それは、「数字1入力→演算子1入力」「数字2入力→演算子2入力」「数字3入力→演算子3入力」という組み合わせである。特に後の2つは、「演算子n」が入力されたら、そこまでの結果と「数字n」を「演算子n−1」で演算を行うというように、まったく同じ作業である。
つまり、次のように図を書きかえる事が可能となる。



さらに考えると、「数字1入力→演算子1入力」もその前に「0」「+」が入力されていたと考えると、それ以降の「数字n入力→演算子n入力」と同じである事が分かる。
(「5+6=」と「0+5+6」は同じであるという事が分かれば、難しい話ではないだろう)



ここまで纏まれば、後はここまでの図を元にして詳細な部分を考えて行けば良いであろう。

『まずは”5+6=”』
まずは、「5+6=」を処理出来るように、図の足りない部分を追加して行く。同時に必要な変数も考えてみる。
最初に「0+」を設定するので、数字1を入れる変数「SUU1」を用意して「0」を代入し、演算子1を入れる変数「ENZAN1」を用意して「+」を代入する。



「数字入力」を細分化すると。「数字の入力待ち(キーボードのチェック)」をし、数字が入力されたら変数「SUU2」に代入するという風になる。最初の数字は「5」が入る事となる。



次に「演算子入力」を細分化すると。「演算子の入力待ち(キーボードのチェック)」をし、演算子が入力されたら変数SUU1と変数SUU2を変数ENZAN1の演算子で演算を行い結果を変数SUU1に代入する。それと同時に今入力された演算子を変数ENZAN1に代入する。最初の演算子は「=」が入る事となる。
もし「5+6−3=」というように2番目の演算子が「−」であれば、「数字の入力待ちから繰り返す事になる。」



『さらに法則を見つける』
ここでまた図をよく見ると、「数字入力待ち」「演算子入力待ち」が一つに纏められる事に気が付く。キーボードの入力は数字も演算子も「I@KEYGET2関数、I@KEYBTN2関数」を使う事は同じであり、その後にIF〜THEN命令を使ってボタンの種類を認識する。ならば、「入力待ち」を共通にしてボタンの種類で処理を分ける事にする。