ab.com コミュニティ
https://www.activebasic.com/forum/

式の計算をする
https://www.activebasic.com/forum/viewtopic.php?t=1650
ページ 11

作成者:  Yoshi [ 2006年10月20日(金) 17:11 ]
記事の件名:  式の計算をする

式を計算するコードです。
これを発展させればインタプリタも夢じゃない?
ボタン、テキストボックス、ラベルを各1つ使います。
テキストボックスに式を入力します。
(),+,-,*,/,数値のみが使用可能。
数値は自然数のみです。(0を含む)
空白を間にはさむことはできません。

ボタンを押すとラベルに答えが求まります。

たとえばテキストボックスに
10+2*3
入力しボタンを押せば
16がラベルにセットされます。

作成者:  ゲスト [ 2007年8月09日(木) 09:41 ]
記事の件名: 

古いバージョンは知りませんが、ABのVerによる言語仕様の違いかな?

とりあえず、動くようにしてみました。
参考として古いコードをコメントにしておきましたが、見にくいと思いますので削除してください。

勉強との事なので、解説はしません。
じっくり解読してください。

作成者:  ゲスト [ 2007年8月09日(木) 09:44 ]
記事の件名: 

Yoshi様

書き込みミスです。
申し訳ありません。

作成者:  淡幻星 [ 2009年1月18日(日) 14:27 ]
記事の件名:  実数+関数(Sin,Cos等)に対応させてみました。

ここの逆ポーランド表記への変換の続きですが、
変換ではなく式計算の実行が焦点なので、こちらに投稿いたします。

上記のリンク先で定義している、逆ポーランド表記変換クラス
「StringCalc_ReversePolishNotation」を用いて、
実数の四則算を行う関数「Calc_ReversePolishEx」です。
数値は実数、演算子は「+,-,*,/,^」を利用可能です。

---< 関数の定義 >---
コード:
Function Calc_ReversePolishEx( pobjQueue As *StrQueue, ByRef xResult As Double, ppszFuncArray As *BytePtr, pfuncArray As *PFunc_StrCalcElemR ) As Char

pobjQueue As *StrQueue      ・・・逆ポーランド表記の計算式が格納されたキュー
ByRef xResult As Double      ・・・計算結果を格納する変数
ppszFuncArray As *BytePtr    ・・・対応する関数名を定義した配列
pfuncArray As *PFunc_StrCalcElemR ・・・関数の処理を定義した配列

返り値:成功=TRUE, 失敗=FALSE

# 参考:関数を考慮しないパタン
# Function Calc_ReversePolish( pobjQueue As *StrQueue, ByRef xResult As Double ) As Char
------

関数Calc_ReversePolishExのコードは以下です。

例として、「(5+7)*sin(pi*0.5)-4」を計算します。(解=8)
対応している関数は Cos, Sin のみです。
他の関数(√とかTanとか)を対応させる場合は、コードの「※1」に処理を
追加してください。いくつでも対応可能です。

なお、エラー処理は未完です。。。(オーバーフローした場合、返り値はTRUEだが、計算結果が不正)

以上です。

ページ 11 全ての表示時間は UTC+09:00 です
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/