初めてのObjective-Cアプリ開発(iPhone編)⑪計算機を作る その4(計算処理を修正する)


前回の続きを進めていきたいと思います。

前回は条件分岐文を用いて、「=」ボタンを押した時に四則演算を

行う処理を作成しました。しかし、今のままだと演算処理を2回以上連続して

行うことができません。

今回は1+2+3のように連続して四則演算の処理を行う方法から実装していきたいと思います。

1、3回以上連続して演算の処理を行う

では作成していきましょう。

1+2+3といった具合に順番にボタンを押していく場合を考えます。

iPhoneの電卓で試してみると、2度目の「+」を押した際にラベルには1+2の結果である3が

表示されているかと思います。

つまり、2度目の「+」ボタンを押すと、まず始めに「=」ボタンと同じ計算処理を行い、

その計算結果をnumに代入していることになります。

ということは、四則演算のそれぞれのボタンの最初に「=」と同じ処理を書いてあげればいいのですね。

アプリ作成画面①

このように記述してください。もちろん「×」と「÷」のボタンにも同じ処理を記述しましょう。

2、「=」ボタンが連続で押された時の処理を考える

これで大まかな計算処理はこれで実装できたかと思いますので、これからは細かい部分を

調整していきたいと思います。

まず始めに「=」ボタンが連続して押された時の処理について考えていきましょう。

iPhoneの電卓の場合、連続して「=」を押すとその直前に押された数値と演算処理が

繰り返し行われているかと思います。

例えば3+6=の場合9、15、21、27、33……と6が連続して足されていきます。

100-5=の場合は95、90、85、80、75、70……と5が連続して引かれていきます。

このようになっていればいいのですね。

では現状どういう動きをするのかシミュレータで確認してみましょう。

3+6=をしてみると9、12、15、18、21……と最初に押した数字が連続して足されてしまっています。

ソースを見てみると、

- (IBAction)equal:(id)sender
    if (flg == 1) {
        sum = num + sum;
        self.lb.text = [NSString stringWithFormat:@"%d",sum];
    }else if (flg == 2) {
        sum = num - sum;
        self.lb.text = [NSString stringWithFormat:@"%d",sum];
    }else if (flg == 3) {
        sum = num * sum;
        self.lb.text = [NSString stringWithFormat:@"%d",sum];
    }else if (flg == 4) {
        sum = num / sum;
        self.lb.text = [NSString stringWithFormat:@"%d",sum];
    }
}

足し算の時「=」ボタンを連続で押すと最初の数字であるnumが続けて足されてしまいます。

また、引き算や割り算にいたっては予想とは全く違う処理が行われてしまいますね。

このままではまずいので、以下のように変更しましょう。

- (IBAction)equal:(id)sender {
    if (flg == 1) {
        num = num + sum;
        self.lb.text = [NSString stringWithFormat:@"%d",num];
    }else if (flg == 2) {
        num = num - sum;
        self.lb.text = [NSString stringWithFormat:@"%d",num];
    }else if (flg == 3) {
        num = num * sum;
        self.lb.text = [NSString stringWithFormat:@"%d",num];
    }else if (flg == 4) {
        num = num / sum;
        self.lb.text = [NSString stringWithFormat:@"%d",num];
    }
}

演算式の左辺のsumをnumに、テキスト表示をsumからnumに変更します。

これで正常に動くはずです。

ページ:

1

2
  • このエントリーをはてなブックマークに追加

PAGE TOP