eminus hatena lab

技術系のメモと解説

LabVIEWで電卓を作る(4): 電卓の仕様について

前回までごく基本的なことを解説した。

このシリーズの初回はこちら:

 

eminus.hatenablog.com

 

このさきちまちま解説しても良いのだが、最初にどーんと完成形を見せてしまおうと思う。(正直に言うと、作り始めたらスクリーンショットを取るのが面倒になって一気に作ってしまったというだけなのだが)

以下に足し算をしている様子を動画にしてみた。なにげにYouTubeにアップするのが初めてだったりする


LabVIEWで電卓をつくって1から10まで足してみた

ここでは足し算しかやっていないが四則演算はすべて対応している。また、イコールを連打すると前の演算を繰り返す機能(仕様?)も再現してある

電卓の仕様を考える

いわゆる普通の「電卓」の動作は考えていくと思っているほど単純ではない。例えば足し算1+2をする場合

[1]→[+]→[2]→[=]

とキーを押すと以下のような作業をしていることになる

  1. 初期状態では画面に0、もしくは前回の計算結果が表示されている
  2. キー[1]が押されたので画面に1を表示する
  3. キー[+]が押されたので画面の数字を一旦待避させておき、[+]が押されたことを記憶しておく
  4. キー[2]が押されたので画面の表示を2に更新する
  5. キー[=]が押されたので待避させていた数字、画面に表示されている数字、記憶しておいた演算子の種類を使って計算を行い、結果を画面に表示する

目標

動画に示したプロトタイプには実装していない機能も含め、Windows 10標準の電卓(の「標準」モード)

数字の入力と演算

基本的にはテンキーのボタンを作っておいて、ボタンが押されたら表示されている数字の後ろに一桁追加するという作業をすれば良いが、例外処理として

  • 二つ目の小数点が入力された場合、その小数点は無視する
  • 0が入力された場合、もともと0が表示されていた場合は無視する

必要がある。[=]を押して画面に数字が表示されている場合、次に数字が入力された場合画面をクリアしなければならない。

(例1)1+2+3=1+2= →1+2+3=のあと6が表示され、次に1を押しても61にはならない。最終的には3が表示される

(例2)1+2+3=+1+2= → 1+2+3=のあと6になるのは同じだが、+を押してから1+2をすると、6+1+2をして9になるべき

0除算

LabVIEWの場合0除算してもNaNやInfなどと表示してくれるので気にしないことにする。

(ちゃんと確認してないが確か0/0はNaNで、1/0みたいなのはInfだったと思う)

 

入力した演算子の取り消し

これを書きながら気づいたが、動画に示したやつにはバグがあって、0+-1=としたときに-1と表示してくれない。つまり演算子が連続して入力された場合、演算子のフラグを上書きしないといけない

前の演算を繰り返す

0+1=====のように入力した場合ほとんどの電卓は5と表示するはず。これは最後の演算が+1ということを覚えており、=が続く限り表示値+1をし続けるという仕様にする必要がある。

まだ実装していない機能

  • 1++=で2と表示する
  • 1++==で3
  • 正負反転のボタンをつける
  • モリー(MR, MC, MS, M+, M-)
  • ルート
  • 2乗
  • 1/x
  • %キー (使ったことないが...)

 

 

第5回はこちら:

 

eminus.hatenablog.com