スタック電卓 calcr ver0.19

1-0.35の計算さえもまともにできないcalcrだったorz
doubleにだけたよるのやめた!文字列つかう!(最初からそうしろ>俺)
やっと普通に計算できる電卓になったかも。

変更内容

  • 全面刷新!プログラム的には文字列で入力数値を保持するようにしました。
  • 入力中の数値、特に小数点以下の入力で誤差が生じる不具合が改善されました。
  • 以前のversionでは8.9012と入力したとき8.9011などと表示されていましたが、8.9012と正しく表示されます。
  • 1-0.35だって0.65になります。以前のversionはまったく小数計算に使えないものでしたが、少しまともになりました。

以下

掲示
ちょっとディープな電卓
かなり自分好みと言うか自己満足電卓。

きっかけ

WinodowsMobile用の電卓ソフトはすでにいっぱいあります。
一方、個人的にはhp 12C platinumを愛用していると言うこともあって、どうしてもスタック電卓の操作が体に馴染んでいます。
しかしながら、HP電卓エミュレータは海外にたくさんあるものの、

  • かんたんに使え、
  • アドエスの前面キーボードが利用できる

スタック電卓ってないんですよね。

ないなら作ろう!
できる範囲でorz

ということで、作って見たしだい。
eVC++のHelloWorldスケルトンをいじりました。

というわけで画面は簡素。

超簡素。
通常モード。実数が扱えます。
http://www.d2.dion.ne.jp/~ujiie/wzero3/calcr/0.19/imagebig.jpg
小さな画面モード。
裏側に隠れたウィンドウを表示させながら計算できます。Xレジスタのみ表示の「漢モード」です。
http://www.d2.dion.ne.jp/~ujiie/wzero3/calcr/0.19/imagesmall.jpg
16進数の計算もできます。
16進数計算モード時は、テンキーの1〜6でA〜Fを入力できるよう、[*]キー( "-iI"オプションを指定しているときは[#]キー)でトグルします。
メニューは左ソフトキー [f] からたどります。
右ソフトメニュー [CustomKEY]は通常は [R↓] として機能しますが、起動オプション "-k" でカスタマイズできます。
http://www.d2.dion.ne.jp/~ujiie/wzero3/calcr/0.19/imagehex.jpg
プログラムはショートカットへ"-p"オプションで指定してください。
例はBMIを計算するプログラムです。[f]-[RUN]で実行。(画面は0.16)
http://www.d2.dion.ne.jp/~ujiie/wzero3/calcr/0.16/imageprogram.jpg

動作確認

プログラムの呼称

calcrの"r"は、RPN電卓のRをもじってます。
「カルクアール」と呼んでください。

インストール

  1. calcr.CABからCABファイルをダウンロード。
  2. アドエスで実行してインストール。
  3. 普通はこれでおしまい。

使い方

例を使いながら。

12+24=

を計算します。

12
アクションキー(エンター)
34
+(カーソル上)

こんな感じ。

  1. スタックに数字を載せて行きます。
  2. 入力された数字はまずXレジスタにエンターキーで登録され、確定し、YレジスタにPUSHされます。
  3. 次に数字を入力すると、Xレジスタに登録されます。
  4. 次に演算キーを押すと、XレジスタとYレジスタで演算され、演算結果がXレジスタに格納されます。

こんな感じ。

使い方

じゃZレジスタとかTレジスタとか、使わないでいいじゃんと思うかもしれませんが、次の例を。

(12+34)/(56+78)*(89+12)=

この場合は

12
アクションキー
34
+ (12と34をたして)
56
アクションキー
78
+ (56と78をたして)
÷ (12と34をたした結果を56と78をたした結果で割って)・・・A
89
アクションキー
12
+ (89と12をたして)
× (Aの値と89と12をたした結果をかける)

Zレジスタまで使い、結果がXレジスタに残りました。
場合によってはTレジスタまでいくこともあります。

使い方

クリアキーを押すとXレジスタのみ消えます。
全部のレジスタを消したかったら

  1. クリアキーでXレジスタをクリアし
  2. アクションキー連打

アクションキーを押すと、すでに確定されたXレジスタの値がPUSHされていきます。
よって全部のレジスタが0になります。

使い方

逆に計算した結果POPされると、Tレジスタの値がZレジスタにコピーされます。
よって

  1. Xレジスタに定数を入力
  2. アクションキー連打 Tレジスタまでいっぱいにすると。
  3. この定数を煮るもよし、焼くも良し。Tレジスタからどんどんコピーされてきます。

使い方

10進と16進は基数を切り替えることになります。
16進時は基数が16になります。
だからHEXで"X=10"と表示されているとき、10進に表示を切り替えると"X=16"になりますよ。
基数が10進のときは小数点以下表示されますが、基数が16進のときは整数限定です。
基数が16進のとき、前面の小数点キーは[1⇔A]キーとなります。このキーは、1〜6キーがA〜Fを直接入力できるモードとトグルするキーになります。

キー

キー 入力 参考
数字キー 数字 16進数モード時に[1⇔A]キーで1〜6キーから直接A〜Fが入力できます。
A〜Fキー 数字(0xA〜0xZ) フルキーボードから利用した時に便利。
カーソルキー↑
カーソルキー↓
カーソルキー← ×
カーソルキー→ ÷
アクションキー エンター
エンターキー エンター フルキーボードから
*キー 小数点.16進数モードでは前面テンキーのトグル[1⇔A] -iIオプションを付けた場合はX⇔Y (レジスターXとYを交換)
#キー X⇔Y (レジスターXとYを交換) -iIオプションを付けた場合は小数点.16進数モードでは前面テンキーのトグル[1⇔A]
クリアキー レジスターXをクリア [CLx]キーですね
ソフトキー左 fメニュー 10-16(基数の10進数と16進数トグル)
RUN(プログラム実行)
COPY X(Xレジスタクリップボードへのコピー)
カンマ区切りトグル
フォントサイズ変更(Xレジスタにあらかじめフォントサイズをテキトウに数字で入力しておいて下さい。デフォルトは20です。)
*#キー入れ替え
Y^X

1/X
R↓(スタックロールダウン)
LSTx(計算直前のXレジスタ呼び出し)
CHS
ソフトキー右 CustomKEYメニュー "-k"オプションで指定されたプログラムコマンドを即時実行します。
例:"-kM"で[CustomKEY]は[CHS]キーとして利用
.キー 小数点 フルキーボードから
Gキー [1/X]キー フルキーボードから
Iキー #*キーを入れ替えます。 フルキーボードから
Lキー [LSTx]キー フルキーボードから
Mキー [CHS]キー フルキーボードから
Qキー 画面切り替え フルキーボードから。「漢」のQuanより(うそ)
Rキー [R↓]キー フルキーボードから
Sキー [X^2]キー フルキーボードから
Tキー [√]キー フルキーボードから
Wキー Xレジスタクリップボードにコピー フルキーボードから,Ctrl+Cは使えません、Wでコピーしてください。
Xキー [X⇔Y]キー フルキーボードから
Yキー [Y^X]キー フルキーボードから
Zキー 10-16 基数の10進数と16進数トグル フルキーボードから
[OK]キー アプリケーション終了 最小化じゃないです。

ショートカットオプション

  • -i・・・ プログラム起動時に自動実行するプログラムコマンド
  • -p・・・ RUNメニューで実行するプログラムコマンド
  • -k・・・ CustomKEYメニューで実行するプログラムコマンド

"-i" "-k" "-p"オプション以下に続く文字列は共通です!

"-i" ではcalcr実行開始時に処理されるプログラムを記述します。
"-k" では右ソフトキーを押した時に処理されるプログラムを記述します。
"-p" では "RUN" メニューを選択した時に処理されるプログラムを記述します。
処理される内容は同じです。

ショートカットオプションの例

  • "."を"#"キーで入力したい方はcalcr.exeのショートカットオプションに"-iI"を追加してください。
  • 最初から16進モードにしたい方は、calcr.exeのショートカットオプションに"-iZ"を追加してください。
  • [CustomKEY]でたとえば[CHS]をしたい方は、calcr.exeのショートカットオプションに"-kM"を追加してください。
  • 起動時にある程度なにか設定をしたり、ある程度計算した状態で起動したいときは、calcr.exeのショートカットオプションに"-i・・・"を追加してください。・・・は計算するためのプログラムコマンドです。
  • なお、"-i・・・"、 "-p・・・"、"-k・・・"は共存します。"・・・"の部分は後述する共通のプログラムコマンドです。

プログラムコマンド

-p、-i、-kオプションのプログラムコマンド(共通)です。
大文字小文字区別します。

0 0キー入力
1 1キー入力
2 2キー入力
3 3キー入力
4 4キー入力
5 5キー入力
6 6キー入力
7 7キー入力
8 8キー入力
9 9キー入力
. .キー入力
a Aキー入力
b Bキー入力
c Cキー入力
d Dキー入力
e Eキー入力
f Fキー入力
E Enterキー入力
+ +実行
- −実行
* ×実行
/ ÷実行
C Xクリア
F Xレジスタの値にフォントサイズを変更
G 逆数1/X
I #*キー入れ替え
K 桁区切り表示のトグル
L LSTx実行
M CHS実行
Q 画面切り替え、「漢」のQuanより(うそ)
R R↓実行
S X^2実行
T √実行
W Xレジスタクリップボードにコピー
X X⇔Y実行
Y Y ^ X
Z 10進数と16進数の基数切り替え
P PAUSE レジスタと現在のプログラムの状態表示 デバッグに使ってね
B プログラム途中で終了 Break
上以外の文字 プログラム終了 Breakに同じ

例:ショートカットオプション "-p"

こんな感じでショートカットでプログラムしてください。RUNで実行です。
http://www.d2.dion.ne.jp/~ujiie/wzero3/calcr/0.16/imageprogram.jpg

  • BMIを計算する インプット Y:身長(cm) X:体重(kg) → アウトプット X:BMI
    -pX100/E*/
  • 緯度経度を実数にする インプット Z度 Y分 X秒 → アウトプット X:緯度経度の実数値
    -pE3600/X60/++EERRR

例:ショートカットオプションに "-iIK15FC" を指定したときの挙動

とーたく様よりの要望にお応えし以前用意した "-ck" "-f" オプションは廃止し、ver0.16より -i オプションに統合しています。
同様の挙動をするショートカットオプションの記述は "-iIK30FC" となります。(わかりにくいなぁ)
http://www.d2.dion.ne.jp/~ujiie/wzero3/calcr/0.16/imageshokika.jpg
※画面では "-iIK15FC" ですが、ver0.18より "-iIK30FC" にしてください。(ぺこり)

  1. "I"で*キーと#キーを入れ替えます。
  2. "K"で桁区切りをトグル。デフォルトでは3桁区切り表示されますが、Kを指定することで桁区切り表示をなくします。
  3. "30"でXレジスタに30がセットされます。
  4. "F"はXレジスタにセットされた値にフォントサイズを変更します。デフォルトは40ですが、先に30がXレジスタに設定されていますので、フォントサイズは30と小さめになります。
  5. "C"でXレジスタをクリアします。

"-k"について

右ソフトキーはユーザがカスタマイズできるキーです。
"-k"オプションで右ソフトキーに何をさせるか設定できます。
デフォルトでは[R↓]です。

  • "-kM"とした場合、Mは[CHS]ですので、右ソフトキーは[CHS]として働きます。
  • "-k000"とした場合、右ソフトキーは"000"を一度に入力するキーとなります。

というわけで

私にはHP電卓はおもろい存在なのです。
物好きな方は使って見てね。

超絶にわかりやすいマニュアル

YHPのころの日本後マニュアルがあったので確保しておきました。
HP12C日本語マニュアル
非常にわかりやすいです。
スタックの挙動についてマニュアル188ページ(PDFでは190ページ)以降にすばらしい解説がありますので、ぜひお読みください。
スタックの挙動はこれに準拠しています。

ソース

ソース後悔
特に!id:Hoshiba様、id:yasuho様のソースを参考にさせていただいています。ありがとうございます。
参考にさせていただいて恐縮ですが、自分のプログラムソースは非常に汚くいです。すみません。
日用プログラマーなんてこの程度なんです。とほほ。

全ソース

全部後悔

  1. eVC4++
  2. SP4
  3. PocketPC2003SDK

を入れれば見れます。

注意事項

  • "-iQ" オプションでいきなり小さい画面にして起動できますが、一瞬大きな画面が表示されます。びっくりしないでください。
  • キーボードスライドしたときや、画面を縦・横に回転したとき、描画が一瞬遅いです。(画面回転したときWM_PAINTメッセージが飛んでにもかかわらず、デスクトップサイズをすぐさま取得すると回転前の値になってしまったので、1秒ごとにデスクトップサイズを監視しています。なにこれ。)なんかいい方法があると思いますが、今のところ思いつかないので、すみません。
  • [f]メニューを閉じる際、左カーソルキーで閉じると、もれなく演算×が行われてしまいます。いろいろ手を尽くしましたが回避方法がわかりませんでした。[f]メニューはソフトキーで閉じてください。申し訳ないです。
  • WithATOKで半角数字をOFFにしている場合は数字入力できません。今後対応できるか自信がありません。申し訳ないです。