- ベストアンサー
Delphi で動的な計算式の答えを簡単に出すには?
Delphi初心者です。 ユーザーに任意の計算式【例:(100+50)*12】をEditなどに文字列入力させ、その答え【1800】を計算するプログラムを簡単に作成できないでしょうか?括弧を多用する長い式でもエクセルの様に式全体を一度に評価できる方法があればベストなのですが?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
はじめまして。 ※Delphi-MLからの情報です。 MicrosoftScriptControlを使えば間単にできます。私も最近このことを知りました。 ActiveXコントロールの取り込みで 'Microsoft Script Control 1.0' を取り込み uses節に MSScriptControl_TLB を追加します。 ボタン,ラベルを追加し、 procedure TForm1.Button1Click(Sender: TObject); var msc: TScriptControl; begin sc := TScriptControl.Create( Self ); msc.Language := 'VBScript'; label1.caption := VarToStr( msc.Eval( 'sin(0.2) + log(20)' ) ) ; msc.Free; end; これでどうでしょう。文法チェックしていませんのでケアレスミスは修正願います。
その他の回答 (3)
- papayuka
- ベストアンサー率45% (1388/3066)
#3です。 解決されたようですが、、、 DelphianWorld の Miscellaneous にあります。 http://www.delphianworld.com/ http://www6.airnet.ne.jp/~sone_san/delphi/cgi-bin/ssi.cgi?miscella.html
お礼
親切なご回答ありがとうございました。
補足
度重なるご回答ありがとうございます。 ご紹介いただきましたコンポーネントのダウンロードできました。Delphiで機能の確認を行いました。私の要望する範囲の機能を試した結果、No.#2様紹介のコンポーネントと同じ結果を得ることができました。ありがとうございました。
- papayuka
- ベストアンサー率45% (1388/3066)
TMathsParser というコンポーネントがあります。 http://www.geocities.jp/fujimaki691202/ 希望にそうものか不明ですのでご自分で試して下さい。
補足
ご回答ありがとうございます。ご指定のURLからコンポーネントをダウンロードしようと試みましたが、残念ながらできませんでした。
Delphiのことは知らないのですが、そういう時は逆ポーランド記法と言うものを使います。(他の方法もあるかもしれませんが) チャレンジしがいのある問題で、プログラム初心者への課題としてだされるほど有名な問題です。過去にC言語で作ったことがありますが、とても勉強になった記憶があります。 お手軽に済ませたいならDelphiにはそういうことをやってくれるコンポーネント(?)があるかも知れないので、探してみてください。 「逆ポーランド」か「Reverse Polish Notation」でどうぞ。
お礼
親切なご回答ありがとうございました。
補足
「逆ポーランド記法」を教えていただきありがとうございました。インターネット等で調べ、問題解決にがんばります。
お礼
貴重なご回答ありがとうございました。
補足
ご回答ありがとうございます。まさに私が希望していた内容です。Delphiで無事確認できました。(sc:= ・・・は、 msc:=・・・ の入力ミスだと思われます)【お礼が送信できないので補足で失礼します】