ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月29日(金) 04:02

全ての表示時間は UTC+09:00 です




返信する
ユーザー名:
件名:
メッセージ本文:
メッセージを入力してください。60000 字まで入力できます。 

フォントサイズ:
フォントカラー
オプション:
BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF
BBCode を無効にする
URL を自動的にパースしない
クイズ
お手数ですがカタカナで「エービー」と4文字を入力してください。:
答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。
   

トピックのレビュー - 式の計算をする
作成者 メッセージ
  記事の件名:  実数+関数(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だが、計算結果が不正)

以上です。
投稿記事 Posted: 2009年1月18日(日) 14:27
  記事の件名:   引用付きで返信する
Yoshi様

書き込みミスです。
申し訳ありません。
投稿記事 Posted: 2007年8月09日(木) 09:44
  記事の件名:   引用付きで返信する
古いバージョンは知りませんが、ABのVerによる言語仕様の違いかな?

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

勉強との事なので、解説はしません。
じっくり解読してください。
投稿記事 Posted: 2007年8月09日(木) 09:41
  記事の件名:  式の計算をする  引用付きで返信する
式を計算するコードです。
これを発展させればインタプリタも夢じゃない?
ボタン、テキストボックス、ラベルを各1つ使います。
テキストボックスに式を入力します。
(),+,-,*,/,数値のみが使用可能。
数値は自然数のみです。(0を含む)
空白を間にはさむことはできません。

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

たとえばテキストボックスに
10+2*3
入力しボタンを押せば
16がラベルにセットされます。
投稿記事 Posted: 2006年10月20日(金) 17:11

全ての表示時間は UTC+09:00 です


ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean