- - PR -
逆ポーランド技法を用いた電卓の作成方法
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-12-17 22:22
優希です。
お世話になっております。 電卓の作成方法について お尋ねします。 今回、テキストボックスAに 数式が表示されている状態で、 イコールキー(=)を押下すると、 結果がテキストボックスBに表示される、 という電卓を作成しようとしております。 ここで問題なのですが、 四則演算の計算方法で、 (+、−)よりも(×、÷)の方が 優先されるという定義に基づき作成したいと 考えております。 そのためには、『逆ポーランド技法』というものが 必要になってくるということなので、 作成に関するアドバイスを頂きたいと 思います。 数式が表示されない電卓であれば、 作れているのですが、 逆ポーランド技法でどのように作れば良いかというのが、 ぜんぜん思いつかないのです。 開発環境は、Visual Studio .NET 2002(VC++)、W indowsフォームを使って行います。 些細なことでも構いませんので、 よろしくお願いいたします。 | ||||
|
投稿日時: 2003-12-17 23:18
その前に質問ですが、そもそも「逆ポーランド記法」というものを理解していらっしゃいますか?意地悪ですが、「理解していらっしゃらないんだろうな」という前提での質問ですが。
というのは、四則演算の順序を気にしていらっしゃるからです。逆ポーランド記法はスタックの練習問題としてよく出され、「前から順番」だったと思うのですが。。。 とりあえず、ぐぐってみました。これがずばり。 http://www.sm.rim.or.jp/~shishido/pol.html | ||||
|
投稿日時: 2003-12-17 23:19
>四則演算の計算方法で、
>(+、−)よりも(×、÷)の方が >優先されるという定義に基づき作成したいと >考えております。 >そのためには、『逆ポーランド技法』というものが >必要になってくるということなので、 >作成に関するアドバイスを頂きたいと思います。 多分「逆ポーランド記法」ですよね.有名な技術なので検索をかければ ウジャウジャでます.HPの関数電卓で有名です.(^^) #http://www.hpmuseum.org/ 問題なのは,逆ポーランド記法とこの電卓の作成とは,おそらく何の関係もない ことです.逆ポーランド記法で入力すれば,そのような優先順位を評価する仕組み なしで等価なものが簡単に作れるという特徴があるだけで,数式通りに入力した ものを構文解析するのはまた別の技術だと思います. | ||||
|
投稿日時: 2003-12-18 00:10
こんにちわ。諸農です。
既にコメントがついていますが。 逆ポーランド技法が少しだけ解説されている書籍を知っていたので。。。 「プログラミングの宝箱 アルゴリズムとデータ構造」 http://www.cbook24.com/bm_detail.asp?sku=4797324198 書籍に掲載されているコードはCとJavaです。 最終章の「テンパズル」のところで考え方の解説があります。 参考になればいいのですが。 ではでは(^^)/ _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||
|
投稿日時: 2003-12-18 00:23
検索するなら,「中置記法」とか「後置記法」というキーワードもよいですよ。 たいてい,中置記法(普段使う数式)を使うプログラムでは 中置記法を解析した結果として,逆ポーランド記法と同じ順序の キューを構築したり,あるいは逆ポーランド記法と同じように スタックデータを積み上げる,という方法をとります。 なので,逆ポーランド記法のキューの内容(これは記法そのものですが)や スタックの中身をどのように処理するか,などの知識は必要で, けっこう関係はあると思いますよ。 [ メッセージ編集済み 編集者: raccoon 編集日時 2003-12-18 00:29 ] | ||||
|
投稿日時: 2003-12-18 00:42
キーワードをいくつかあげておきます。「キーワード」は書籍やGoogleで
調べてみてください。 ・式の解析は「字句解析」「構文解析」の2段階に分かれます。 それぞれの処理を行う部分を「レキシカルアナライザ lexical analyzer」、 「パーサ(パーザ)parser」と呼びます。 ・「字句解析」「構文解析」を行うプログラムを生成するツールが いくつかあります。C/C++だとlex/flex/yacc/bison、JavaだとJavaCC/JFlex /CUP/ANTLRなどがあります。 とはいえ、四則演算(+括弧つき)くらいなら、ツールをつかうほうが 手間が増えます。 ・手で「構文解析」プログラムを作る場合は「演算子順位法」「再帰下降法」を 使うことが多いです。四則演算なら「演算子順位法」が一番容易です。 ・デザインパターンだと「インタプリタ」パターンが該当します。 また、「構文解析」で「構文木」を生成する場合はその構文木は 「コンポジット」パターンになるでしょう。 ・四則演算などの構文を表すには「BNF Backus Naur Form バッカス・ナウア・フォーム」やそれを拡張した「EBNF」を使います。四則演算ならBNFで表現できるでしょう。 ・こういった処理はコンパイラ作成を説明してる書籍に載っています。 しかし、四則演算処理はそういった書籍のほんのさわりの部分でしかないです。 ・ちなみに以前「演算子順位法」で四則演算+括弧をC言語で組んだときは、 50〜100行程度に収まったと思います。 [ メッセージ編集済み 編集者: ちいにぃ 編集日時 2003-12-18 00:44 ] | ||||
|
投稿日時: 2003-12-18 06:56
優希です。
みなさん、アドバイスの程、ありがとうございます。 教えて頂いたサイトを参考にしながら、 早速、作成を試みようと思います。 結果・問題などあった時点で、 また報告をさせて頂きたいと思います。 ありがとうございました。 ではっ! | ||||
|
投稿日時: 2003-12-18 08:20
優希さんこんにちは。
普通の電卓なら、 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cptutorials/html/debugging_the__net_framework_sample_application.asp とかでしょうか? 電卓キーを使用して 7+8 などの簡単な数式を入力し、[=] ボタンをクリックします。 とか書かれているので、やりたいことができるかもしれません。 |