• 締切済み

逆ポーランド法の表記について

X*(Y-Z)を逆ポーランド表記で表すと、(1)XYZ-*ですか? (2)YZ-X*ですか?回答は(2)みたいなのですが、どうも違いがわかりません。

みんなの回答

  • sahara4
  • ベストアンサー率53% (14/26)
回答No.4

この場合、(1)も(2)も正解だと思います。 ただ、コンパイラだと、()を優先的に処理して機械語に落とすので、(2)の手順になるんじゃないでしょうか? 最適化された場合は、どう転ぶか分りませんが。。。

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.3

>(y-z)を優先するため 何より優先するのでしょうか。 正解は 「*(かける)より(y-z)を優先する」ですが、 この問題を作った人は、「xより(y-z)を優先する」と勘違いしたのでしょうね。 (x-y)*(z-w) の場合、(x-y)より(z-w)を優先するとは言わないでしょ。

  • matsu77
  • ベストアンサー率100% (1/1)
回答No.2

僕も(1)が正解だと思います。 逆ポーランド表記は以下のようなツリー考えます。 (1)  (5)   ↓ ↑   *  /  \      X    - (2)  Y  Z    (3)  (4) 先ず、(1)から一番左の子(2)へ下りrootへ戻ります。 このとき逆ポーランド表記は「X」。 次に(3)の子へ下り更に(4)へ行きます。 このとき逆ポーランド表記は「XYZ」。 最後に(5)へ戻ると「XYZ-*」となります。

unsui
質問者

お礼

x×(y-z)÷(i+j)を逆ポーランド法で示すという問いに対して、回答は、「(y-z)を優先するため"yz-",次にxを掛けるため"yz-x×",次に(i+j)を優先するため"yz-x×ij+",最後に÷を行い、"yz-x×ij+÷"と表記される。」となっています。やっぱり間違っていますよね…。

  • flextime
  • ベストアンサー率45% (31/68)
回答No.1

私も正解は(1)だと思います。 X*(Y-Z)は(Y-Z)を先に計算するので(Y-Z)をαと置き換えると  X*(Y-Z)=X*α で、これを逆ポーランド表記にすると  Xα* …(a) αは(Y-Z)で、これを逆ポーランド表記にすると  YZ- …(b) (a)のαを(b)で置き換えると  XYZ-* なお、(2)のYZ-X*を普通の表記法(中置表記法)にすると  (Y-Z)*X で、X*(Y-Z)にはならないと思います。

unsui
質問者

お礼

問題はx×(y-z)÷(i+j)を逆ポーランド法で示すというものです。回答はyz-x×ij+÷であると書かれているのですが、私もxyz-×ij+÷が正しいと思うのですが。。

関連するQ&A