こんばんは、
一応、電卓として動くのは完成しましたよ。
(いろいろと制限つきですが・・)
簡単にアルゴリズムのご説明をいたしますよ。
ボタンは
① C(クリア) 押した
② 0~9(数字) 押した
③ =(イコール) 押した
④ +-×÷(記号) 押した
⑤ +/- 押した
の種類があって入力に使います。
表示は
⑥ ディスプレイ(メインのおっきいの)
⑦ サブディスプレイ(右下の中くらいの)
⑧ 小ディスプレイ(左下の正方形の)
小数点(.)は前回宣言したとおり、使わないことにしますww
①~⑤の入力で⑥~⑧にどのように表示させてるかですが、こんなふうにしてみました。
① 問答無用で、全ての表示部分をクリアする。
② 小ディスプレイに何もなければディスプレイに、何かあればサブディスプレイに
入力済みの数字に10を掛けて押された数字を足す。
③ ディスプレイとサブディスプレイの値を小ディスプレイの方法で計算して、
ディスプレイの値として表示する。
④ 小ディスプレイを押された記号に表示する。
⑤ ディスプレイの値にマイナスをつける。
この項目だけで出来ています。この電卓。
まず
「~.h」 に内部的に保存しておく変数と、イベントハンドラの宣言?をボタンの数だけ用意してます。
@interface CalculatorViewController : UIViewController { IBOutlet UILabel * lblKeisanKekka ; IBOutlet UILabel * lblMessage ; IBOutlet UILabel * lblSub ; int display ; int subDisplay ; int ope ; //+:1 -:2 *:3 /:4 } -( IBAction )actionButtonClearTapped:( id )sender; -( IBAction )actionButton1Tapped:( id )sender; -( IBAction )actionButton2Tapped:( id )sender; -( IBAction )actionButton3Tapped:( id )sender; -( IBAction )actionButton4Tapped:( id )sender; -( IBAction )actionButton5Tapped:( id )sender; -( IBAction )actionButton6Tapped:( id )sender; -( IBAction )actionButton7Tapped:( id )sender; -( IBAction )actionButton8Tapped:( id )sender; -( IBAction )actionButton9Tapped:( id )sender; -( IBAction )actionButton0Tapped:( id )sender; -( IBAction )actionButtonTasuTapped:( id )sender; -( IBAction )actionButtonHikuTapped:( id )sender; -( IBAction )actionButtonWaruTapped:( id )sender; -( IBAction )actionButtonKakeruTapped:( id )sender; -( IBAction )actionButtonPuramaiTapped:( id )sender; -( IBAction )actionButtonEqualTapped:( id )sender; -( IBAction )actionButtonPointTapped:( id )sender;
*lblKeisanKekka; は、メインのディスプレイのラベルのこと
*lblMessage; は、小ディスプレイのラベルのこと
*lblSub; は、サブディスプレイのラベルこと。
int display ; は、lblKeisanKekkaの中身を保持する変数。
int subDisplay; は、lblSubの中身を保持する変数。
int ope;//+:1 -:2 *:3 /:4 は足し算か引き算か掛け算か割り算かを保持しておく変数。
//より右の緑の部分はコード内のメモを書くための部分。 さいごのactionButtonPointTappedは使ってませんけど。
で
「~.m」 に宣言したやつの中身を書きます。↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
①のクリアを押したときは、問答無用でディスプレイ部分をクリアして、
内部的に持っている変数も全部クリアしてすっきり。
クリアといっても、メインのディスプレイには
0 を設定してます。
-( IBAction )actionButtonClearTapped:( id )sender{ display = 0 ; subDisplay = 0 ; ope = 0 ; lblMessage . text = @"" ; lblKeisanKekka . text = [ NSString stringWithFormat : @"%d" , display ]; lblSub . text = @"" ; } ②は例として
「1」 のボタンを押したときのコードが↓です。
このようにラベルに表示してます。
if ~ else ~ の 条件分岐の構文は他のプログラム言語でもそのままっぽかったので、
すんなりなじめました。
ここで、条件分岐している理由は、さっき上の②の説明のとおり、どっちにディスプレイに表示するの?っていうことです。
-( IBAction )actionButton1Tapped:( id )sender{ if ( ope == 0 ) { display = display * 10 + 1 ; lblKeisanKekka . text = [ NSString stringWithFormat : @"%d" , display ]; } else { subDisplay = subDisplay * 10 + 1 ; lblSub . text = [ NSString stringWithFormat : @"%d" , subDisplay ]; } } ④(③は後で)は例として
「+」 のボタンを押したときのコードが↓です。
「+」が押された場合は中身の変数
「ope」 に
1 を保存してます。
-( IBAction )actionButtonTasuTapped:( id )sender{ ope = 1 ; lblMessage . text = @"+ " ; } ⑤(③は後で)のプラマイボタンを押したとき。
数字としたときと考えは同じ。
どっちかのディスプレイに
-1 を掛けて表示です。
-( IBAction )actionButtonPuramaiTapped:( id )sender{ if ( ope == 0 ) { display *= - 1 ; lblKeisanKekka . text = [ NSString stringWithFormat : @"%d" , display ]; } else { subDisplay *= - 1 ; lblSub . text = [ NSString stringWithFormat : @"%d" , subDisplay ]; } } ③はイコールを押したときの処理です。
swirch文による条件分岐の構文です。これも他の言語と一緒ですね。
そのときの「ope」の内容で計算方法を変えてます。
ゼロで割れたら数学の世界が崩壊してしまうので、ゼロで割ろうとしたときは除外します。
最後に、メインディスプレイに結果を、サブディスプレイとか小ディスプレイをクリアして終了です。
-( IBAction )actionButtonEqualTapped:( id )sender{ switch ( ope ) { case 1 : display += subDisplay ; break ; case 2 : display -= subDisplay ; break ; case 3 : display *= subDisplay ; break ; case 4 : if ( subDisplay == 0 ) { } else { display /= subDisplay ; } break ; default : break ; } lblKeisanKekka . text = [ NSString stringWithFormat : @"%d" , display ]; ope = 0 ; subDisplay = 0 ; lblMessage . text = @"" ; lblSub . text = @"" ; } ちなみにInterfaceBuilderでそれぞれのイベントハンドラとボタンとかを対応つけといてね。
青色の矢印でひっつけるだけです。
以前のブログ参照! ちなみにこの電卓の制限ですが、
まず、小数点が使えない・・・割ると、整数部分のみを表示する。
普通の電卓みたいに 記号→数字→記号→数字 と入力していっても計算されていかない。コレが結構不便。
イコールを押したときにだけ計算する。
数値が大きくなると狂う。
ちなみに特に0~9のボタンが押されたときの処理がほとんど同じにもかかわらず、同じコードを
書いてるんですね。
これを一つにまとめるようにしたいと思います。
そうしないと、上記のような制限を修正するにはちょっとしんどい。
のぉぉぉあ!!、よく見ると
3 のボタンの文字ちっちゃ!!いつからやーー。
>
計算機その1 >
計算機その2 >
計算機その3 >
計算機その4 >
計算機その5(★この記事★) <<
前の試練 HelloWorldを表示する >>
次の試練 いろんなツールを使う コレ持ってる。そこそこお勧め。
iPhone SDK Programming Manual/株式会社テクノロジックアート Amazon.co.jp
コレほしい。でもそこそこ高い。
iPhone SDKの教科書―Cocoa Touchプログラミング、最初の一歩/赤松 正行 Amazon.co.jp
にほんブログ村