maiiT
@maiiT

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

逆ポーランド表記法について教えてください

解決したいこと

基本情報の過去問で、中置記法「Y=(A+B)×(C-(D/E))」を逆ポーランド表記法にすると「YAB+CDE/-×=」になるとありました。
ということは、逆に言えば「YAB+CDE/-×=」を中置記法にすると「Y=(A+B)×(C-(D/E))」なんだと思うのですが、
なぜ「Y=(A+B)×(C-(E/D))」でないのか疑問です。
逆ポーランド表記法は、「スタックを用いた計算方法」だとどこかに書いていたので、
自分では、D→Eの順番でスタックにプッシュされているなら、
ポップはE→Dだから「D/E」ではなく「E/D」じゃないのかなと思ったのですが、考え方が誤っているようです。。
どのあたりが誤っているのか、ご教示いただけませんでしょうか。

0

3Answer

そもそも掛け算の演算子が必要だと思いますが、違いますかね?

$ YAB+CDE/-*= $


D→Eの順番でスタックにプッシュされているなら、
ポップはE→Dだから「D/E」ではなく「E/D」じゃないのかなと思った

D/E は Dが被除数、Eが除数 で、この関係を崩してしまうと 計算結果が違ってきてしまうので、除数→被除数の順にpopすることは分かっていて D/E するものと思います。

0Like

Comments

  1. @maiiT

    Questioner

    すみません!ありがとうございます。直しました。

(スタックがどうのとか以前に,定義として)

中置が A + B という記法(演算子を真ん中に置く)であるのに対して
逆ポーランドでは演算子を後ろにおいて A B + とする,っていう話なのですから

逆ポーランドで D E / とあれば,それは
中置では D / E (演算子を真ん中に持ってくる)に対応する,というだけの話ではないでしょうか.

0Like

Comments

  1. 「スタック~」で言うならば,
    スタックから項を2つPOPしてきた際に, それをどう使うのか?(:どっち順で使うべきなのか) という話ですよね.

    二択なので,一方が正しくて,他方が誤り.
    で,正しい順というのが,あなたの考えとは逆である,ということでしょう.

  2. @maiiT

    Questioner

    ありがとうございます。自分が勝手に決めつけていたようです。。言われてみれば、それだけのことでしたね^^;

スタックで考えると、 / はまず E をポップしてアキュムレータ(一時記憶)に入れ、 D をポップしてそれをアキュムレータの値で割り(つまり D 割る E です)、結果をスタックにプッシュします。

この処理の流れは、何かスタック構造に固有の事情があってそうしているのではなく、逆ポーランド記法 D E / が D 割る E を表すという定義が先にあり、それに沿うように計算しているだけです。

0Like

Comments

  1. @maiiT

    Questioner

    ありがとうございます。他の回答者さまたちもおっしゃっていたとおり、そういうものなのだと思うのですが、
    さらに説明をくださり、「なるほど」感が増しました。ありがとうございました。

Your answer might help someone💌