アットウィキロゴ

Java解説/No.5/課題1

予備知識

まず、課題を解こうとする前に 逆ポーランド記法(後置記法) を理解する必要があります。

1年生の時にこれに関する課題が出た人もいれば、全くはじめて聞いた、という人もいると思いますので、ここで改めて逆ポーランド記法について説明します。

逆ポーランド記法とは?

逆ポーランド記法とは、一言で言うと 『操作対象の後ろに演算子を置く計算式の記法』 です。でもこれではちょっと分かりにくいので、例として、

1 + 2

という計算式を考えてみましょう。

この式は、普段私たちが使ってる書き方で、中置記法 といいます。この式の、

  • ""と"" が  "操作対象"
  • "" が  "演算子"

となります。式を見ると、操作対象である "1" と "2" の中間 に、演算子の "+" があります。この式が『中置記法』と呼ばれるのは、 演算子が操作対象の間にある から、ということなのです。

それでは、『後置記法』、つまり『逆ポーランド記法』とは? "後置" というのがポイントなので、演算子は後ろに置きます。

1 2 +

これが逆ポーランド記法の書き方です。 "1 と 2 を 足す" と、日本語で考えるとわかりやすいでしょう。同様に、 "3 4 -" "3 から 4 を 引く" ということになります。

この書き方を使うと、カッコが混じるような複雑な数式でも、カッコを使わずに書くことができるなどのメリットがあるほか、コンピュータープログラムで計算を簡単に組むことができるのです。

スタック

逆ポーランド記法をプログラムで計算させるには、 スタック を使うと簡単です。

スタックって何だったっけ?という人は、『タテに細長い、筒の入れ物』を考えてください。この入れ物には、1個分の箱を、上に積み重ねて入れられます。

ここに、数字や文字といった "データ" が入った箱を上から入れます。これが 『プッシュ』 です。上から箱を取り出して、データを取り出すことが 『ポップ』 となります。大体のイメージがつかめればOKです。

仕組み

では、実際にどういう仕組みで計算しているかというと、2つのスタックを使っています。

例えば、 "2 3 5 * +" という式 (2+3*5) を計算するなら以下のようになります(課題のページにあったものを分かりやすくしたものです)。

まず、計算式を分解して、計算式スタックに1つずつプッシュしていきます。

次に、 計算式スタックの底 から1つ取ります。ポップでは無いことに注意してください。これが課題プログラムの top メソッドです。

ここで取ったものによって、処理が違います。数字であれば、そのままそれを結果スタックにプッシュしますが、演算子であれば、結果スタックから2個ポップして、取った演算子に応じて計算します。"+" なら加算、"×" なら掛け算などです。そしてその計算結果を、結果スタックにプッシュします。

あとは、『計算式スタックの底から取って、処理する…』という流れを、計算式スタックの中身が無くなるまで繰り返すと、結果スタックの中に計算結果のデータが1つ残ります。これで逆ポーランド記法の計算はOKです。

実際の課題

仕組みがわかったところで、実際に課題でやらなきゃならないことを整理しましょう。

  • Stackクラスのメソッドを理解する
  • Stackクラスを完成させる (topメソッドを作る)
  • Calcクラスを完成させる (計算処理を完成させる)

上から順番にひも解いていきましょう。

⇒次へ(工事中)

コメント

Name
Messeage
  • 社長wwwすごすぎっすwww -- こまき (2009-05-25 13:10:08)
最終更新:2009年05月25日 13:10
添付ファイル