四則演算
カッコ(括弧)のいる計算式
小学生の頃から親しんできた計算式は、中置記法と言うものです。これは、オペランド(数値のこと)とオペランドの間にオペコード(演算子のこと)がある数式の書き方のことです。言葉で書くと難しそうですが、要は通常の電卓で計算するやり方ですね。
「1 + 2」を計算する時に"1"や"2"がオペランドで、その間にある"+"がオペコードというわけです(+が1と2の中に置かれるから中置記法)。この記法は学校で習う計算の並びと同じだから素直に理解できるし、日本製の電卓は中置記法を前提にしています。
しかし、オペコードの"+, -, *, /"には優先順位があるので、"*"や"/"を"+"や"-"よりも先に計算する必要があります。つまり、数式「1 + 2 * 3」という式は、廉価な電卓では「2 * 3 + 1」としなければ計算を誤ってしまいます。
一方、高価な関数電卓になると、「1 + 2 * 3」の順で計算しても、電卓の内部で優先順位に従って計算してくれることが多いですね。しかし、それでも「2 * (1 + 3)」という数式になると、開き括弧や閉じ括弧を使いながらの計算となってしまうことは否めません。
ちなみに、コンピュータでは掛ける記号の「×」は「*」になることに注意してください。「3 × 2」は「3 * 2」と表現されるし、割る記号の「÷」は「/」になります。つまり、「3 ÷ 2」は[3 / 2」となります(分数に似ていますね)。
カッコ(括弧)のいらない計算式
それでは、逆ポーランド記法だと、どんな書き方になるのでしょうか。
結論から言えば、逆ポーランド記法は「1 2 +」のようにオペランドの後にオペコードがある記法です。つまり、オペコードがオペランドの後に置かれる「後置記法」ということになります。
後置記法という呼び方ですが、逆ポーランド記法の呼び名が一般的です。
ただ、中置記法と記法は違っても、数式であることには変わりはないため、「1 2 +」の答えは「1 + 2」と同じです。この記法は、日本語の並びと同じと考えると理解しやすいかもしれません。例えば、「1 2 +」は"1に2を足す"と言い表せます。
さて、逆ポーランド記法ですが、優先順位は全て人間の頭で考えることになります。例えば、中置記法の「1 + 2 * 3」は逆ポーランド記法では「1 2 3 * +」になります。オペコードの"*"と"+"の並びが逆になっていますね。この数式も日本語で読むと"1に2と3を掛けたものを足す"と表現できます。きれいに日本語の並びと同じになっているのがわかりますね。
このようなやり方を、複雑な数式に対しても一貫して行なうのが特徴です。例えば、以下の数式を中置記法と逆ポーランド記法にしてみましょう。
1 + 2 * -----
5
中置記法 ⇒ 「1 + 2 * (3 + 4) / 5」
逆ポーランド記法 ⇒ 「1 2 3 4 + * 5 / +」
違いがわかったでしょうか。あまり気付かないことですが、逆ポーランドの書き方は計算に使うキータッチの数を最少にします。
例えば、関数電卓だったら「1 + 2 * (3 + 4) / 5」の計算に使うキータッチ数は括弧があるから11回ですが、逆ポーランド記法だと9回です。小さな差ですが、キータッチ数は確実に少なくなっています。
中置記法と後置記法(逆ポーランド記法)の対比
以下に中置記法と後置記法の対比例を示します。眺めていると徐々に変換規則が分かってくると思いますので、挑戦してみてください。
対比は徐々に難しくなるように並べてあります。簡単なほうから一つずつ、じっくりと変換してみてください。慣れればあっという間に変換できている自分に気付くはずです。
これは簡単。
中置記法 後置記法(逆ポーランド記法)「1 + 2」 「1 2 +」
「1 * 2」 「1 2 *」
ちょっとは数式らしく…
中置記法 後置記法(逆ポーランド記法)「1 * 2 + 3」 「1 2 * 3 +」
「1 + 2 * 3」 「1 2 3 * +」
括弧のある数式だと…
中置記法 後置記法(逆ポーランド記法)「1 * (2 + 3)」 「1 2 3 + *」
「(1 + 2) * 3」 「1 2 + 3 *」
優先順位に気をつけて…
中置記法 後置記法(逆ポーランド記法)「1 + 2 + 3」 「1 2 + 3 +」
「1 + 2 * 3 + 4」 「1 2 3 * + 4 +」
これができれば卒業!
中置記法 後置記法(逆ポーランド記法)「(1 + 2) / (3 + 4)」 「1 2 + 3 4 + /」
「1 + 2 * (3 + 4) / (5 - 3)」 「1 2 3 4 + * 5 3 - / +」
中置記法と後置記法の対比が理解できたでしょうか。実は、ここが第一の山です。習うより慣れろじゃありませんが、この四則演算を逆ポーランドで記述できるようになれば、rpnの半分は理解したようなものです。
逆ポーランド電卓の「rpn」は他の関数も全て、逆ポーランド記法の並びに従って設計してあるため、とても応用が利きます。今後の展開を期待して、まずは四則演算をマスターしておきましょう。
以下の中置記法を後置記法(逆ポーランド記法)に変換せよ。
(1) 1 + 2 / 3
(2) 1 + 2 / 3 + 4
(3) { (1 + 2) + (3 - 4) / (5 - 6) } / 7 + 8
(4) 6 / 2 * (1 + 2)
(5) 6 / 2(1 + 2)
…………………………………………………………………………………………