電卓アプリの課題2完成

電卓アプリの課題2が一応できました。

出来上がりはこんなかんじです。

変数の値はプリセットの固定値を使うことがわかれば、変数を入力出来るようにするのは簡単ですね。

しかし、演算スタックの内容を算数のように表示するのはややこしい…。

括弧をつける制御がなかなかうまくいかず、ずるしてます。

descriptionOfProgram:の確認

演算スタックの表示を課題の例でテストします。(EはEnterです)

 

10 sqrt

 

3 E 5 +

 

π

 

x

 

3 E 5 E 6 E 7 + * ー

 

3 E 5 + sqrt

 

3 sqrt sqrt

 

3 E 5 sqrt

 

x a a * *

 

3 E 5 + 6 *

 

3 E 5 E

 

3 E 5 + 6 E 7 * 9 sqrt

一応、課題に書かれている例は全て上手く表示出来ています。

しかし、ずるしてるので、こうなります。

 

3 E 2 + 4 * 2 * 3 /

不要な括弧がついちゃってますね^^;

どうやってずるしてるかは、恥ずかしすぎるので控えます。

他にも怪しい部分があります。

■変数かどうかの判断

課題に「演算子と同じ文字列は変数として受け付けない」という記述があったので、文字列でかつ演算子ではないものを変数と判断しています。

こういう処理のしかたは危なっかしいとは感じるのですが…。

そんな感じでずるしてゆるく作ったのに、Viewコントローラのソースコードが152行、brainのソースコードが294行になりました。

課題には、brainは100ステップ以下で50ステップでも記述可能などと書かれていたので大分長くなってしまいました。

一応、ヒントに書いてあるNSSetのcontainsObject: メソッドを使ってif文を少なくしたりヘルパーメソッドをいくつか作って使い回したりしているんですが…。

このソースコードのステップ数の制限が一番きつい課題かもしれません。