- 締切済み
逆ポーランド記法における単項演算子などの処理
開いていただきありがとうございます。 質問内容は題名の通りなのですが、 中置記法の式を逆ポーランド記法に変換して計算を行う際に単項演算子をどのように扱うかで悩んでいます。+-などのように文脈に応じて意味合いが変化するものもあり、もうひとつスマートに処理することができません。 また前置・後置インクリメントなどに対応するとしたらなおざりに処理するわけにもいきませんし、三項演算子に至ってはどのように処理すればいいのかさっぱりです。 電卓に留まらず、簡単な処理系に組み込むという前提で、これらをどのように使えばよいかご教示いただければと存じます。
- みんなの回答 (3)
- 専門家の回答
関連するQ&A
- 中置記法から前置記法(ポーランド記法)について
どうも、はじめまして 初めて質問を投稿させていただきます・・・ ひとつどうしても前置記法(ポーランド記法)についてわからないことがあります。 中置記法で A×(B + C) と (B + C)×A は同じ答えですよね? これをそれぞれ前置記法にすると・・・ ×A + BC と × + ABC となるのでしょうか?? もし、そうであるのならば・・・ 2つとも前置記法で出される結果は同じでしょうか?? よろしくおねがいします。
- ベストアンサー
- 数学・算数
- オーバーロードされたメンバ関数のポインタをとる
オーバーロードされたメンバ関数のポインタをとるにはどうしたらよいでしょうか? 具体的には前置インクリメント演算子 ++()と、後置インクリメント演算子 ++(int)の両方のをオーバーロードしたときに両方のメンバ関数ポインタがとりたいです。 環境はVC7.1です。 よろしくお願いします。
- ベストアンサー
- C・C++・C#
- インクリメントについて
インクリメントについて C言語のプログラム中に(1)の文(前置演算子)が存在するのですが、(2)の文(後置演算子)に置き換えても構いませんか? if(a) ++a; ・・・(1) if(a) a++; ・・・(2) 教授下さい。 よろしくお願い致します。
- ベストアンサー
- C・C++・C#
- C#における++演算子のオーバーロードについて
はじめまして。 いろいろ調べてみたのですが、わからなかったので、質問させてください。 C#における++演算子のオーバーロードについてなのですが、 まずは、以下のコードをご覧ください。 ================================================================ using System; class Test { private int Num; public Test(int x) { this.Num = x; } public static Test operator ++(Test t) { Test result = new Test(t.Num + 1); return result; } public override string ToString() { return this.Num.ToString(); } } class TestDemo { public static void Main() { Test t = new Test(0); Console.Write(t++ + "\n"); Console.Write(t + "\n"); Console.Write(++t + "\n"); Console.Write(t + "\n"); } } ================================================================ 実行結果 0 1 2 2 ================================================================ ++演算子のオーバーロード関数の実装が一つなのに 前置インクリメントと後置インクリメントが適切に行われています。 二つのインクリメントが行われるときに同じメソッドが 呼び出されていると思うのですが、同一の実装で、振る舞いが 異なるのは、なぜなのでしょうか?どのようなカラクリで 実行されているのでしょうか?全くわかりません。どなたか 教えてください。よろしくお願いします。
- ベストアンサー
- C・C++・C#
- Perlインクリメントデクリメント
あっていますでしょうか? インクリメント演算子とデクリメント演算子 インクリメント(加算)演算子は変数の数値を一つ増やす。 デクリメント(減算)演算子は変数の数値を一つ減らす。 ++ インクリメント演算子 変数の値を1増やす $a++ ++$a $aの値を1増やす -- デクリメント演算子 変数の値を1減らす $a-- --$a $aの値を1減らす $a=1; 変数$aに1を代入する print "はじめは$aでした。\n"; $aの代わりに1が入り はじめは1でした。と表示する。 $a++; $aに1を足す。 print "1増えて$aになりました。\n"; $aの代わりに2が入り、1増えて2になりました。 と表示する。 $a--; $aから1減らす。 print "1減って$aに戻りました。\n"; $aの代わりに1を入れて 1減って1に戻りました。 と表示する ↓ 実行結果 ↓ はじめは1でした。 1増えて2になりました。 1減って1に戻りました。 $a++ と ++$a の違い インクリメント演算子、デクリメント演算子には2通りの書き方があります。 ++$a(前置)と$a++(後置) --$a(前置)と$a--(後置) 前置の場合は変数の参照より先に演算が行われます。 後置の場合は変数の参照より後に演算が行われます。 $x=$a=1; 変数$xと$aに1を代入する。 $x=++$a; $aに1を足した後に$xに代入する。$xの値は2になる。 $x=$a=1; 変数$xと$aに1を代入する。 $x=$a++; 変数$aの値を$xに代入した後に$aに1を足す。$xの値は1。 文字もインクリメント出来ます。 $x="A"; "A"を$xに代入する。 $x=++$x; Aから一つ増やしてBにして$xに代入する。 $x="aaa"; "aaa"を$xに代入する。 "aaa"を一つ増やして"aab"を$xに代入する。 ただし、文字のデクリメントはできません。
- ベストアンサー
- Perl
- 後置インクリメントの計算過程について
後置インクリメントの計算過程について Javaに関して初めての質問となります。よろしくお願いいたします。数日前に学習し始めたばかりの超・初心者です。 現在、基本的な演算について、インクリメント・デクリメントのそれぞれ前置と後置の違いを学習したところなのですが、どうも後置の理解が完璧でないようで、仮に変数をxとした場合、式内にxが二度出てくる場合の後置の計算が理解できません。 具体的には int x, y; x = 10; y = x++ + x++; 上記でコンパイルした結果、y=21となる過程を教えていただけませんでしょうか。 私の理解では、x++は計算に使用した後にxに1を加算するので、まず y = 10 + 10 で、y = 20 となり、その後にxに1を加算してx=11が私の理解です。 よろしくお願いいたします。
- ベストアンサー
- Java
- 逆ポーランド記法について
学校で A=(B-C)/D+E*Fを逆ポーランド記法で書くのを講師が ABC-DE+F*/= と書いたのですが/の位置は ABC-D/E+F*= こう書くのだと思ったのですが何が違うのでしょうか?
- 締切済み
- C・C++・C#
お礼
遅くなってしまい申し訳ございません。 文法の定義をそのまま関数にするのですね。 もうひとつ理解できていない節があるのですが、加減と乗除とで別定義を設けているのは優先順位ゆえでしょうか? すると演算子の優先度が10段階ある場合は、似たようなものが10個は必要……? 少し考えてみます。 確かに専門書を買うのがてっとり場合のでしょうが、 自分のような初学者でも、簡単にとは言わずともついていけるような内容で、 かつ肝心な部分をYACCに投げていない本をご存じでしたら教えてくださると助かります。 田舎在住なもので、書店におかれている限りは確認したのですが、冒頭から意味不明か「YACCを使いましょう」しか見当たりませんでした。