=による計算のうち、数字=の演算で、1つ前の数字と演算子の組み合わせでモードを変えながらの通常演算とメモリ演算(結果、オペランド)計算を組み込みました。
また、これまでオペランド(数値)がnilの場合の処理を十分考えていなかったので、取り敢えずインプットステータス(モード)のみを更新する処理を組み込みました。
そして=の演算をモードによって以下のとおり使い分けます。
あとは数値入力時と演算子が入ってきたときに、インプットステータス(モード)をそれぞれ変更します。
また、=演算のあとに、インプットステータスをクリア(false,false)しなくてはいけません。
結果、通常演算、結果メモリ演算、オペランドメモリ演算がいかのとおりできました。ただし、他のモードでどう動くかはまだ検証していません。
とりあえずエンジンはここまでにしてUIを実装していくかなぁ
モードは、演算キュー の中に以下の入力モード(タプル)を組み込んでいます。
演算をする前にこのメモリを呼び出してから計算に入ります。
private var memorizedInputMode : (num: Bool, calc: Bool)
let previousInputMode = memorizedInputMode
memorizedInputMode = inputMode
if inputOperand == nil {
operaterQueue = inputOperater
return nil
}
そして=の演算をモードによって以下のとおり使い分けます。
case "=":
switch previousInputMode {
case (num:true, calc:true): //normal operation <1:true +:true> (2=)
print ("normal operation")
let returnVal = equalOperation()
operand1 = returnVal
let ret = String2formattedNumberString (returnVal!)
return ret
case (num:false, calc:true): //result operation <nil:false +:true> (2=)
print ("result operation")
operand2 = inputOperand
let returnVal = equalOperation()
operand1 = returnVal
let ret = String2formattedNumberString (returnVal!)
return ret
case (num:false, calc:false): // operand operation < (2=) >
operand1 = inputOperand
print ("operand operation " + operand1! + operaterQueue! + operand2!)
let returnVal = equalOperation()
operand1 = returnVal
let ret = String2formattedNumberString (returnVal!)
return ret
default:
print ("bat input status")
}
あとは数値入力時と演算子が入ってきたときに、インプットステータス(モード)をそれぞれ変更します。
また、=演算のあとに、インプットステータスをクリア(false,false)しなくてはいけません。
結果、通常演算、結果メモリ演算、オペランドメモリ演算がいかのとおりできました。ただし、他のモードでどう動くかはまだ検証していません。
2
Operater5 *
2
Operater5 =
normal operation
4
Operater5 +
1
Operater5 =
result operation
5
1
Operater5 -
2
Operater5 =
normal operation
-1
3
Operater5 =
operand operation 3-2
1
5
Operater5 =
operand operation 5-2
3
とりあえずエンジンはここまでにしてUIを実装していくかなぁ
0 件のコメント:
コメントを投稿