• ベストアンサー

Delphi で動的な計算式の答えを簡単に出すには?

Delphi初心者です。 ユーザーに任意の計算式【例:(100+50)*12】をEditなどに文字列入力させ、その答え【1800】を計算するプログラムを簡単に作成できないでしょうか?括弧を多用する長い式でもエクセルの様に式全体を一度に評価できる方法があればベストなのですが?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

はじめまして。 ※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; これでどうでしょう。文法チェックしていませんのでケアレスミスは修正願います。

kuuko
質問者

お礼

貴重なご回答ありがとうございました。

kuuko
質問者

補足

ご回答ありがとうございます。まさに私が希望していた内容です。Delphiで無事確認できました。(sc:= ・・・は、 msc:=・・・ の入力ミスだと思われます)【お礼が送信できないので補足で失礼します】

その他の回答 (3)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.4

#3です。 解決されたようですが、、、 DelphianWorld の Miscellaneous にあります。 http://www.delphianworld.com/ http://www6.airnet.ne.jp/~sone_san/delphi/cgi-bin/ssi.cgi?miscella.html

kuuko
質問者

お礼

親切なご回答ありがとうございました。

kuuko
質問者

補足

度重なるご回答ありがとうございます。 ご紹介いただきましたコンポーネントのダウンロードできました。Delphiで機能の確認を行いました。私の要望する範囲の機能を試した結果、No.#2様紹介のコンポーネントと同じ結果を得ることができました。ありがとうございました。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.3

TMathsParser というコンポーネントがあります。 http://www.geocities.jp/fujimaki691202/ 希望にそうものか不明ですのでご自分で試して下さい。

kuuko
質問者

補足

ご回答ありがとうございます。ご指定のURLからコンポーネントをダウンロードしようと試みましたが、残念ながらできませんでした。

noname#86752
noname#86752
回答No.1

Delphiのことは知らないのですが、そういう時は逆ポーランド記法と言うものを使います。(他の方法もあるかもしれませんが) チャレンジしがいのある問題で、プログラム初心者への課題としてだされるほど有名な問題です。過去にC言語で作ったことがありますが、とても勉強になった記憶があります。 お手軽に済ませたいならDelphiにはそういうことをやってくれるコンポーネント(?)があるかも知れないので、探してみてください。 「逆ポーランド」か「Reverse Polish Notation」でどうぞ。

kuuko
質問者

お礼

親切なご回答ありがとうございました。

kuuko
質問者

補足

「逆ポーランド記法」を教えていただきありがとうございました。インターネット等で調べ、問題解決にがんばります。

関連するQ&A