TableCalc
TableCalc
PalmOS 用の,数式文字列を評価するタイプの計算アプリです。
同時に10の数式を計算でき,さらに計算結果を他の数式から再利用することができます。
おもな想定用途は、(複数のパラメータをもつ)任意の公式の計算を簡単にできるようにする、というものです。
他にも個人的に計算アプリに欲しいと思っていた以下の機能を加えました。
- ハードウェアキーのみで、最小限のステップで操作できる操作性(主に Treo で)
- 2進数、16進数表記、論理演算、ビット演算のサポート
- 数式中での条件分岐(if(B, T, F))演算のサポート
- atan2(y, x) などの複数引数を持つ関数のサポート
- 計算式、結果のメモ帳へのエクスポート
更新履歴
開発の背景
計算機アプリには一行のみの数値(not 数式)表示欄をもつ電卓タイプのものや、カッコなどを含む普通の数式を文字列として入力するタイプのものなどがありますが、個人的には後者が好きです。
仕事で決まり切った数式を、複数のパラメータを変えながら何度も再計算することがあるのですが、そのような用途には妹尾英樹さん作の Windows 用計算アプリ GridCalculator を使わせてもらっていました。でもその計算をしたい時は PC の前にいないこともあるので PDA で同じようなことが出来たらいいなと思っていました。
一応私の用途(複数パラメータを持つ数式をあらかじめ記述しておき、使うときに必要なパラメータを変更して結果を得る)に使える PalmOS 用アプリもいくつか見つけてしばらく使っていたのですが、演算子の優先順位が一般的でなかったり長い文字列を入力するとエラーも出さずに微妙に間違った結果を返す物だったりでした。
なにより Treo 700p には数字や主な演算記号の刻印されたハードウェアキーボード、5-Way キーがあるのに、それらの計算アプリではあまり便利に使えるようにはなっていませんでした。
そんなわけで GridCalculator のような機能(複数の数値・式の一覧表示、計算結果の再利用)を持ち、しかも Treo のハードウェアキーボードで快適に使えるような計算アプリを作ってみました。
文字列を数式として評価する機能については私のような日曜プログラマには荷が重かったので GPL で公開されていた Yoichi KAZAMA さん作の Pretty Calculator のソースコードを基に開発しました。(したがって本アプリも GPL で公開されます)
ダウンロード
このソフトウェアは一切無保証です。このソフトウェアに起因するいかなる損害,損失などについても私 HAL は一切の責任を負えません。
GPL ライセンスで配布します。改造などはご自由に。
実行ファイル→ TableCalc_08b.zip (85 KB)
ソースコード→ TableCalc_src.zip (122 KB)
インストール
HotSync なりで普通にインストールしてください。
なお TableCalc を使うには MathLib(フリー)のインストールが必要です。まだインストールされていなければこれもインストールしてください。
使い方
基本的な使い方
各行には3つの欄がありますが,右端が数式/値の入力欄です。ここに書き込んだ文字列の計算結果が真ん中の答え欄に表示されます。
計算結果の更新は、入力のフォーカスが移動した時,またはリターンキーが入力された時に行われます。(設定により一文字変更するごとに再計算することもできます)
左端は行の名前です。この名前を使って他の行の数式中から計算結果を再利用できます。
入力した数式は自動的に保存されます。用途ごとに別のページに計算式を記述しておき,使うときには目的のページに移動して必要なパラメータの値を更新することで(数式を再入力することなく)すばやく再計算できます。
この例では1,2行目の creatinine, age は数式というより変数入力欄として使っています。そしてこれらの値をもとに4行目 eGFR の計算を行っています。
さらに 4行目 eGFR の計算結果をもとに,6行目で女性の場合の値を計算しています。
一度は eGFR の計算式を入力しておかなければいけませんが,2回目以降は creatinine, age の値だけ変更すれば即座に男女別の eGFR 値が得られます。
ちなみにメイン画面では eGFR の計算式は一部しか見えていませんが,実際は以下のような数式が入力されています。
数字・記号入力モード (for Treo)
計算式を入力する時に、キーボードはアルファベットモードよりも数字・記号モードで使った方が便利だと思うのですが、標準のオプションロックは入力フィールドを切り替えるたびに解除されてしまいます。そこで TableCalc では独自のオプションロックもどきを実装しました。
画面右上のインジケータ( N または A の表示)が現在のモードを表します。
- A
- アルファベットモード。TableCalc 側では文字の置き換えなどをしない、ノーマルな状態。
- N
- 数字・記号モード。TableCalc はハードウェアキーボードから入力されたアルファベットを(Treo のキー刻印に準じて)数字や記号に置き換えて入力します。(但し数字モードであっても、キーを長押しするともともとのアルファベットが入力されます) また数式中では使うことのない一部のキーには別の機能を割り振ってあります。
元のキー | 割り当てられた機能 |
---|---|
P | べき乗記号( ^ )入力 |
$(H) | 変数リスト表示 |
#(B) | 関数リスト表示 |
@(I) | 記号リスト表示 |
’(L) | 数式編集ウィンドウを開く |
A <-> N のモードの切り替えは画面右上のインジケータボタンのタップ、または Alt キーの長押しや、メニューから可能です。でも変数名や関数名はリストから選択して入力できるのでアルファベットモードを使う必要性はほとんど無いと思います(16進数の入力だけ?)。
数式編集
基本的には数式編集欄に文字列を書き込むだけですが、いくつかの入力支援機能があります。
- 変数名、関数、記号リスト
- プルダウンメニューの“数式編集”以下、または Alt キーでポップアップするコンテキストメニューから選択するか、または特定のキー入力により、記号、関数、変数のリストが表示されます。これらを利用すれば数式入力欄でアルファベットを入力する必要はほとんどありません。
キー | 表示されるリスト |
---|---|
$ | 変数リスト |
# | 関数リスト |
@ | 記号リスト |
- 数式編集画面
- プルダウンメニューの“数式編集”以下、または Alt キーでポップアップするコンテキストメニューから選択するか、数式入力欄のダブルタップ(設定が必要)または ’(アポストロフィ)のキー入力により別窓の数式編集画面を開くことができます。
この画面ではよくある計算機アプリと同じように画面上のボタンで数式の編集ができます。これはハードウェアキーボードを持たない Treo 以外のデバイスでの入力をやり易くする目的で作りましたが、数式欄が広いので Treo でも長い数式を編集する場合などに便利かも知れません。
ページ
TableCalc は複数のページを切り替えて使うことができます。それぞれのページで入力した式は保存されているのでよく使う式の再計算が容易にできます。
目的ごとに計算式と必要なパラメータを同じページにまとめておくと便利だと思います。
- ページの移動
- [<<][>>]ボタンのタップ、または 5-WayNav の左右キーをずっと押していれば順次ページが切り替わります。
プルダウンメニューの“ページ”以下、またはページタイトルボタンのタップで表示されるメニューから“ページ移動”を選択、またはページタイトルボタンにフォーカスが当たった状態で“g”を入力するとページ名のリストが表示されます。ここで目的のページを選択すればそのページにジャンプします。
- ページの追加・削除・タイトル変更
- プルダウンメニューの“ページ”以下、またはページタイトルボタンのタップで表示されるメニューから“新規ページ作成”、“ページ削除”、ページ名変更”を実行してください。
ローカル/グローバル変数
TableCalc では他の行の計算結果を変数として数式中で再利用できますが、これは同一ページ内の変数に限りません。基本的に他のページの変数も利用することができます。(グローバル変数)
このため変数名の重複が無いように全ページの変数名をチェックしています。言い換えるとページが違っていても使用済みの変数名は再定義できないようにしています。
しかし場合によっては別なページで同じ変数名を使いたい場合もあるでしょう。そのような場合はそのページの変数をローカル変数にします。具体的には画面最上部真ん中あたりのインジケータを G から L に変更してください。
L(ローカル変数)に設定されたページの変数は他所のページから参照されなくなります。そして他所のページではローカルなページで使われている変数名を再定義できるようになります。
なおインジケータが G であっても一文字の変数名はローカル変数として扱われます。(つまり一文字変数は他所のページから参照できないが、どのページでも重複を気にせず使うことができます)
機能
算術演算
- + * / ( ) などを用いた普通の計算ができます。
その他の演算子として以下のものが使えます。
演算子 | 説明 |
---|---|
^ | べき乗(2^3 -> 8) |
% | 残余。商を整数としたときの割り算の余り(11%4 -> 3,11.5%2.5 -> 1.5) |
数値と変数名/関数名/カッコの間の積算記号(*)は省略できます。
12.3 * hoge -> 12.3hoge
12.3 * sin(0) -> 12.3 sin(0)
12.3 * (1+2) -> 12.3(1+2)
組み込み関数
三角関数などの組み込み関数が使えます。
TableCalc の特徴として他の計算アプリではあまり見られない2引数,3引数をとる特殊な関数をいくつかサポートしています。
三角関数以外の関数一覧
関数 | 説明 | 備考 |
---|---|---|
if(B,T,F) | Bが0でなければT,それ以外ならFの値を返します | C言語の三項演算子( B ? T : F )のようなものです。 |
atan2(y,x) | 直角三角形の2辺の長さから角度を返します | (直角三角形ABCで∠B=90,辺AB=x,辺BC=y の場合 ∠C = atan2(y,x)) |
hypot(x,y) | 長方形の2辺の長さから対角線の長さを返します | (√(x^2 + y^2)) |
sqrt(x) | 平方根(√)を返します | |
cbrt(x) | 三乗根を返します | |
log(x) | 底10の対数 | |
ln(x) | 自然対数 | |
abs(x) | 絶対値 | |
exp(x) | 指数関数 | |
ceil(x) | 小数点以下を切り上げ | |
floor(x) | 小数点以下を切り捨て | |
round(x) | 小数点以下を四捨五入 | |
rint(x) | 小数点以下を四捨五入 |
数値の表現形式
数式に記述できる数値の表現形式は以下の通り。
形式 | サンプル |
---|---|
小数形式 | 12.345 |
指数形式 | 1.23E+2 |
16進整数 | 0xFF |
2進整数 | 0b1010 |
論理演算子
C言語の論理演算子に準じた以下の演算子が使えます。
おもに関数 if(B, T, F) の第一引数Bで使うことを想定しています。
演算子 | 説明 |
---|---|
A == B | AとBが等しい時に1を,それ以外の時0を返します |
A != B | AとBが等しくない時に1を,それ以外の時0を返します |
A > B | AがBより大きい時1を,それ以外の時0を返します |
A >= B | AがBより大きいか等しい時1を,それ以外の時0を返します |
A < B | AがBより小さい時1を,それ以外の時0を返します |
A <= B | AがBより小さいか等しい時1を,それ以外の時0を返します |
!A | 論理否定。Aが0なら1を,0以外なら0を返します |
ビット演算子
C言語のビット演算子に準じた以下のものが使えます。(^ はべき乗記号として使っているので XOR 排他的ビット和としては使えません)
演算子 | 説明 |
---|---|
A | B | ビット和 |
A & B | ビット積 |
A << B | ビットシフト。Aを左にBビット分 |
A >> B | ビットシフト。Aを右にBビット分 |
~A | ビット反転 |
画面上の部品,操作の説明
最上段
1)G/L 被参照モードインジケータ
表示 | モード | 説明 |
---|---|---|
G | グローバル | このページの変数は他所のページから参照できる。他所の変数と変数名の重複はできない。 |
L | ローカル | このページの変数は他所のページから参照できない。他所の変数と変数名の重複はできる。 |
カレントページが L(ローカル)であっても、他所の G(グローバル)なページの変数を参照できる。
モードの切り替えはこのインジケータ(ボタン)をタップして行う。
詳しくはこちらを参照
2)Deg/Rad 角度表現モードインジケータ
表示 | モード | 説明 |
---|---|---|
Deg | 角度 | このページで使われる三角関数の入出力数値は角度(0〜360)として処理される。 |
Rad | ラジアン | このページで使われる三角関数の入出力数値はラジアン(0〜2PI)として処理される。 |
モードの切り替えはこのインジケータ(ボタン)をタップして行う。
3)Graffiti インジケータ
システム標準の Graffiti インジケータ
4)A/N 数字・記号入力モードインジケータ
表示 | モード | 説明 |
---|---|---|
A | アルファベットモード | 文字の置き換えなどをしない、ノーマルな状態。 |
N | 数字・記号入力モード | ハードウェアキーボードから入力されたアルファベットを数字や記号に置き換えて入力します。 |
モードの切り替えはこのインジケータ(ボタン)をタップ、またはプルダウン/ポップアップメニューから“入力モード切替”を選択して行う。
詳しくはこちらを参照
2段目
ページ移動ボタン
左右の[<<][>>]をタップ、もしくはこのボタンにフォーカスリングが掛った状態での 5-Way 左右キー押しで左右のページに移動します。
ページ名ボタン・ページ関連処理ポップアップメニュー
現在のページ名を表示します。またこのボタンをタップするとポップアップメニューが表示されページ関連処理を実行できます。
このボタンにフォーカスリングが掛った状態で、ポップアップメニューの各項目の先頭の一文字を入力すると(ポップアップメニューを表示せずに)直接その機能を実行します。たとえばフォーカスリングが掛った状態で、aを入力すると新規ページが作成されます。
- g ページ移動
- ページ一覧のリストが表示されます。項目を選択するとそのページに移動します。
- a 新規ページ作成
- 新規ページを作成します。
- r ページ名変更
- ページ名編集ダイアログを表示します。
- f 答えの表示形式
- 答えの表示形式の、現在のページデフォルトを選択するリストが表示されます。(ここでデフォルトを選択すると設定画面で選択したグローバルデフォルトが適用されます)ページデフォルトは各行の表示形式がデフォルトである場合にのみ適用されます。(つまり各行の表示形式が指定されていると、行ごとの設定が優先されます。逆に各行の設定がすべてデフォルトであれば、ページデフォルトを切り替えることでそのページの表示形式を一括で変更できます)それぞれの表示形式についてはこちらを参照
- n 少数部最大桁数
- 答えが小数部を持つ場合に表示する小数点以下の最大桁数を指定できますが、ここではその最大桁数の、現在のページデフォルトを選択するリストが表示されます。(ここでデフォルトを選択すると設定画面で選択したグローバルデフォルトが適用されます)ページデフォルトは各行の表示桁数がデフォルトである場合にのみ適用されます。(つまり各行の表示桁数が指定されていると、行ごとの設定が優先されます。逆に各行の設定がすべてデフォルトであれば、ページデフォルトを切り替えることでそのページの最大表示桁数を一括で変更できます)詳しくはこちらを参照
- w 列幅変更
- 名前、答え、数式の各列の表示幅を設定する列幅変更ダイアログを表示します。
- c このページをコピー
- このページの内容({名前、答え、数式}x10行)をクリップボードにコピーします。
- e メモ帳に書き出す
- このページの内容({名前、答え、数式}x10行)をメモ帳に書き出します。(TableCalcカテゴリがなければ新設して、そこに書き出します)
- ページ削除
- 現在のページを削除します。アンドゥはできません。
列タイトル
各列のタイトルです。タップすると列幅変更ダイアログを開きます。
計算機部分
計算機の本体部分は{名前、答え、数式}x10行の30のパーツからできています。それぞれの場所でコンテキストメニューを表示して各種機能を実行できます。
名前欄のメニュー
名前欄のタップ、またはフォーカスリングがかかった状態での Alt キー押しでポップアップメニューが表示され行関連処理を実行できます。
なお名前欄にフォーカスリングが掛った状態でアルファベットを入力すると(ポップアップメニューを表示せずに)直接名前変更ダイアログが開きます。
- 変数名変更
- 変数名編集ダイアログを開きます。変数名として使用可能な文字はすべて半角の a から z 、A から Z 、_ (アンダーバー)です。大文字小文字は区別されます。
- 行の入換え
- 行(変数名)のリストが表示されます。選択した行と現在の行を入れ替えます。
- 上の行と入換え
- 現在の行と一つ上の行を入れ替えます。
- 下の行と入換え
- 現在の行と一つ下の行を入れ替えます。
- 背景色変更
- 色選択ダイアログが開きます。現在の行の背景色を指定します。(背景色情報は内部的にカラーインデックス値で保持しています。RGB 値で指定した場合には最も近い色のインデックスが用いられるので、指定した RGB 値と微妙に異なる場合があります)
- default Color
- 現在の行の背景色をデフォルトに戻します。
答え欄のメニュー
答え欄のタップ、またはフォーカスリングが掛った状態での Alt キー押しでポップアップメニューが表示され答え関連処理を実行できます。
答え欄にフォーカスリングが掛った状態で、ポップアップメニューの各項目の先頭の一文字を入力すると(ポップアップメニューを表示せずに)直接その機能を実行します。たとえばフォーカスリングが掛った状態で、xを入力すると答えが16進数で表示されます。
- a 行をコピー
- 現在の行の内容(名前、答え、数式)をクリップボードにコピーします。
- c 答えをコピー
- 現在の行の答えをクリップボードにコピーします。
- n 小数部最大桁数
- 現在の行の答えの、小数点以下の最大表示桁数を指定します。参考→小数部最大表示桁数
- 表示形式選択
- 現在の行の答えの、表示形式を選択します。参考→答え表示形式
数式入力欄のメニュー
数式欄のダブルタップ(要設定)、または Tab 入力, Alt キー押しでポップアップメニューが表示され、数式編集補助機能を実行できます。
また数式入力欄で特定の記号 @ # $ '(アポストロフィ)を入力するとそれぞれ記号、関数、変数の一覧リスト、数式編集画面が表示されます。またソフトキーボードを表示しようとすると数式編集画面が表示されます。
- s[@] 記号一覧
- ^ % などの、キーボードや Graffiti では入力しにくい記号類のリストを表示します。
- f[#] 関数一覧
- TableCalc で使用可能な関数のリストを表示します。
- n[$] 変数一覧
- ページ内の変数名リストを表示します。more を選ぶとページ選択リストが表示され、ページを選ぶとそのページの変数名のリストが表示されます。
- t 入力切替 A/N
- ハードウェアキーボードの入力モード(アルファベット⇔数値・記号)を切り替えます。
- z Undo , x Cut , c Copy , v Paste , a Select All
- 一般的な編集コマンドを実行します。
- e 数式編集画面
- 現在の数式を編集する数式編集画面を開きます。
プルダウンメニュー
“数式編集”“ページ”以下の項目はそれぞれ数式入力欄のメニュー、とページ関連処理ポップアップメニューに対応します。
“その他”以下の項目は以下の通り。
- 設定
- 設定画面を開きます。
- 全ページ書き出し
- すべてのページの内容をメモ帳に書き出します。(カテゴリ= TableCalc)
数式編集ウィンドウ
画面上のボタン類の操作だけで数式の編集ができます。主にハードウェアキーボードの無い機種のための画面ですが、そうでなくとも長い数式を編集する場合には有用でしょう。
列幅変更ダイアログ
名前欄、答え欄、数式欄の幅を設定する画面です。設定はページごとに保持されます。
設定画面
設定画面1⇔2の切り替えは右下の[<<][>>]をタップして行います。
設定画面1
背景色
タップすると色選択ダイアログが表示されます。奇数行,偶数行のデフォルト背景色を選択します。
数式欄拡大行数
数式が一行に収まらない場合に,編集欄を一時的に拡大する最大行数を指定します。
“編集画面”を指定すると、数式が一行に収まらなくなった時点で(メイン画面で行数を拡大するのではなく)別窓の数式編集画面を開きます。
答え表示形式
答えの表示形式を指定します。
“自動選択”を指定すると小数点形式または指数形式で表示します。また“自動選択”でなくても桁数が大きい場合は指定形式にかかわらず指数形式で表示します。
“2進整数”として表示できるのは255=0xFFまでです。それ以上の場合は16進形式で表示されます。
これは表示にのみ影響します。内部的にはちゃんと倍精度実数として保持されており,他所から参照される場合には影響しません。
- g 自動選択
- printf("%g") のように小数形式または指数形式のどちらかで表示します。一応画面上の表示幅が短い方を自動的に選択するはずですが、例外もあります。
- f 小数形式
- printf("%f") のように小数点形式(12.345)で表示します。 但し答え欄に収まりきらない場合は強制的に指数形式で表示します。
- e 指数形式
- printf("%e") のように指数形式(1.23e-5)で表示します。
- x 16進整数
- printf("%x") のように16進形式(0xF8)で表示します。答えが正の整数でない場合については考慮していません(どういう表示になるか不明)
- b 2進整数
- 2進形式(0b1101)で表示します。答えが 0 から 255 までの整数の場合のみ有効です。256 以上の場合16進形式で表示します。答えが正の整数でない場合については考慮していません。
- r 四捨五入
- 小数点以下を四捨五入します。
- l 切り捨て
- 小数点以下を切り捨てます。
- u 切り上げ
- 小数点以下を切り上げます。
これらの形式は三段階で設定できます。すなわち
1)アプリ全体に適用されるグローバルデフォルト(設定画面で設定)
2)ページごとに設定されるページデフォルト(ページ関連処理メニューで設定)
3)各行ごとの設定
優先順位は 3 > 2 > 1 です。
つまり各行の設定、ページデフォルトのどちらもデフォルトに設定されていればグローバルデフォルトに設定した形式で表示されますが、各行の設定がデフォルト以外になっていればその行ではグローバルデフォルト、ページデフォルトの設定は無視されます。
答えの接頭辞
表示形式が“四捨五入”,“切り捨て”,“切り上げ”の場合に先頭に"r"(round),"f"(floor),"c"(ceil)を表示します。
小数部最大表示桁数
小数点以下の最大表示桁数を指定します。指定桁数の次の桁を四捨五入した値が表示されます。
これは表示にのみ影響します。内部的にはちゃんと倍精度実数として保持されており,他所から参照される場合にはここで指定した桁数は影響しません。
この桁数は三段階で設定できます。すなわち
1)アプリ全体に適用されるグローバルデフォルト(設定画面で設定)
2)ページごとに設定されるページデフォルト(ページ関連処理メニューで設定)
3)各行ごとの設定
優先順位は 3 > 2 > 1 です。
つまり各行の設定、ページデフォルトのどちらもデフォルトに設定されていればグローバルデフォルトに設定した桁数で表示されますが、各行の設定がデフォルト以外になっていればその行ではグローバルデフォルト、ページデフォルトの設定は無視されます。
数式文字列自動選択
数式入力欄にフォーカスがあたった時に自動的に数式文字列を選択状態にするかどうか指定します。
“一行のみ”とは、一行以内の短い式は自動選択されますが、二行以上の長い式では自動選択されないモードです。
デフォルトが“一行のみ”なっているのは、一行以下の短い式は変数の数値だけを記述した場合が多いであろうこと、つまり式というより変数の入力欄のように使われているであろうことから、そのような行の内容をすばやく変更できるようにするためです。(フォーカスを移動したら自動選択されるので、前の値を消去する手間をかけずに新しい値をそのまま入力できる)
数式欄ダブルタップ
数式欄のダブルタップでコンテキストメニューを表示するか,数式編集画面を開くか指定します。
設定画面2
書き出し時区切り文字
メモ帳への書き出しやクリップボードにコピーする際の各列の区切り文字を指定します。
列のヘッダ
各列のヘッダの表示/非表示を指定します。
長い数式に目印
数式が一行に収まらない場合に,隠れた部分があることを示すマーク(赤褐色のタテ棒)を各入力欄の右下に表示するかどうか指定します。
一文字ごとに再計算
答えの表示をリターンキーやフォーカスの移動時に行うか,または一文字でも変更がある度に行うか指定します。
制限事項・既知の問題
- いまのところ無し