あまつぶ

2.5 3:30 【電卓を作る】

 雪はかなり解けたみたい。うちは妙に奥まったところにあるので結構残っていたりするんだけど(笑)。しかし道は滑るし屋根から水が落ちてくるし、いいことないなぁ。ところどころに小さな雪だるまが作ってあったりしたのを見かけたくらいで(それがいいことなのかどうかはともかく)。

 昨日「自分で式評価ルーチンをかかないといけないならFKEYにでもした方が……」なんてことを書いたけど、以前HyperCardで作りかけていたものをもとに作ればそんなに面倒ではないかも知れないなと思い立ち、ちょっとやってみることにした。FKEYでクリップボードの内容を計算するだけならインタフェースは考えなくていいし、単純に式評価ルーチンを書くだけ。バグが出た時の対処がめんどくさそうだけどHyperCardで動くところまでいけば置き換えだけでいけるはずだから……。。
 なんてことを考えつつ作りかけのスタックを開く。だいたい完成しているのだけど2桁以上の数が認識できないというお粗末な仕様(笑)。まずそこを修正して、入力された式を後置記法に置き換えるルーチンが完成。次にそれを実際に計算させるルーチンを書いて(これは簡単だ)、さあ、Cに置き換えだ。
 HyperCardベースで作っていた時は文字列として","で区切って変数におさめていたのだけどCで書くなら適当にメモリを確保してそこにおさめていく必要がある。どのくらい確保するか、、は、とりあえず演算子を除いた項の数だけあればいいかな? 実際にはそんなに多くなくてもいいのだけど念のため(というかうまい方法が思いつかない)。それから無駄を省くために後置記法に置き換えずに演算子が見つかったところでその都度スタックから取り出して計算していく方法に変更して、、いくつかバグは出したが、整数の演算については問題なくできるようになった。まあHyperCardでちゃんと動いていたんだから動いて当然なのだが。
 10進整数の計算ができるようになったのでまずはこんなもんかなと思いつつ、これだけではやはりまだ満足いかない。16進数の計算の機能もつけたいよなぁ……。そんなわけで項の処理ルーチンを拡張して"$"で始まる項を16進数とみなすように修正。この修正はすぐできたのでついでに"#"を10進数にする処理も追加。これはあとでデフォルトで16進数とみなすようにするためで、まだ今のところは意味がない。で、これも問題なし。
 デフォルトで16進数とみなす、、というのはどうやって設定するようにしよう。Quote_FKEY(なつかしい(笑))でしたようにFKEYを呼び出すときにコントロールを押しておくと設定ダイアログが表示されるというのがよさそうだが、FKEYのダイアログをアピアランスに対応させるのが難しそうなのでまずは保留。ここはMuscatを参考にさせていただいて"_"を最初につけるとデフォルトで16進ということにしてみた。新たに「base」というグローバル変数を用意してそれに10または16を入れると。まだ2つのパターンしかないんだからtrue/falseとかでもいいんだけど、ひょっとしたら2進数や8進数にも対応するかも知れないということを考えて。"_"をつけた場合の出力についてはこれもMuscatと同じく16進数で
 今度は「マイナス」の処理を考えないと。"-"は「引き算」の演算子としてしか使えないことになっているから「-1」がエラーになってしまう。項の処理で"-"をチェックしてその後に続く項の値をマイナスに……。続く項の取り出しでしょうもないバグを出したが、なんとか解決。マイナス記号が続いているかどうかのチェックはしていないので「-----1」とかやっても「-(-(-(-(-1))))」と解釈されて「-1」という答えが出てくる。"+"は処理していないので「1-+1」はエラー。「1+-1」は問題なく、「0」になるけど。わざわざ"+"を打つ人もいないだろうしエラーと処理した方がいいと思うし。
 さらに機能を追加。","で区切って複数の計算を一度に行えるようにしてみた。まずは10個まで(別に理由はないのだが、答えの文字列をStr255で作っているのであまり長くなるとまずいと……)。こんな機能誰が使うんだと思いつつ、、まあ、あってもいいかなと。
 あとは小数くらい処理できればそれなりに使い物になりそうだけどどんなもんかなぁ。意表をついて分数……とか(いらんか(笑))。基本的な部分はできているからあとは小数でも分数でも複素数でも(笑)処理できるようにすることは可能なんだけど、、実際に使うかというと使わないよなぁ。ま、まずはここまでだろう。分数にはちょっと引かれつつ(^^;;

 まだうちで作っただけのもので公開の予定も未定だが、果たしてこういうのって需要あるんだろうか(^^;;; 触れ込みとしては「あなたのお好みのエディタが電卓に!!」とかかな(笑)。

to February 4, 1999 ↑ to February index → to February 6, 1999