blogtitle
RSS Twitter
  • TOP
  • このブログについて
  • imotenもくじ
  • VPS拡張編
    • VPS機能拡張
    • セキュリティ対策
    • WordPress設定
  • ブログ主おすすめ
    • おすすめアプリ
    • おすすめ周辺機器
    • Xcode
    • ターミナルサービス設定
  • レシピ(料理)

【Objective-C】XcodeでiPhoneアプリを作る基礎を学ぶ11【四則演算計算機を作る その5】

Day:2013.2.17 0:05 Comments: 8

code iPhone Xcode

Xcode


いい加減このシリーズやめてくれないかなという声も聞こえてきそうなくらいですけど、ブログ主がアプリを作るための基礎作りをしているということで許してください(;´Д`)w

計算機編も5話目となり、そろそろ佳境です。


XcodeでiPhoneアプリを作る基礎を学ぶ まとめ


フラグ


ハイ来ました。

フラグ処理。

死亡フラグとか言われてるアレですアレ。

=ボタンを押したときに、前に押した四則演算ボタンが+ボタンとかーボタンとかを覚えておけるようにフラグ処理を行う。

この辺の記述が正しいのか、プログラミングど素人の自分にはさっぱりわからない。

うーむ。不安だ。


四則演算に数字を割り当て


足し算、引き算、かけ算、割り算に数字を割り当てることにした。

まず、calcFlugというプロパティ(インスタンス変数)を作る。

+ボタンを押したら変数calcFlugに1を代入。

ーボタンは2、×ボタンは3、÷ボタンは4を代入する。


skitchgtyyN6



calcFlugの数字によって足し算や引き算を行うようにすればいいんじゃないか?と考えた。

0〜3でもいいのかなと思ったけど、変数には最初は0が入っているので、0は何もボタンを押していませんよ、ということにした。

0に足し算を割り当てると、何も押してない状態が足し算になっちゃって変だし。

とりあえずコードを書いてみた。


– (IBAction)additionButton:(id)sender {

  self.subtotal += self.countNumber;
  self.countNumber = 0;
  self.calcFlug = 1;

}


+ボタンが押されたら、calcフラグに1を代入する。

これで=ボタンが押されたとき、この数字によってどの四則演算をするか判断させることに。

他の四則演算ボタンも作成。

以下のようになる。


/* 足し算 */

– (IBAction)additionButton:(id)sender {

  self.subtotal += self.countNumber;
  self.countNumber = 0;
  self.calcFlug = 1;

}

/* 引き算 */

– (IBAction)subtractionButton:(id)sender {

  self.subtotal -= self.countNumber;
  self.countNumber = 0;
  self.calcFlug = 2;

}

/* かけ算 */

– (IBAction)multiplicationButton:(id)sender {

  self.subtotal *= self.countNumber;
  self.countNumber = 0;
  self.calcFlug = 3;

}

/* 割り算 */

– (IBAction)divisionButton:(id)sender {

  self.subtotal /= self.countNumber;
  self.countNumber = 0;
  self.calcFlug = 4;

}


これで各四則演算ボタンに各機能が割り当てられた。



=ボタン


四則演算に1〜4までの数値が割り当てられたので、=ボタン1つでも四則演算が処理が可能になる。

=ボタンを押したとき、calcFlugの中に格納されている数字を確認してどの四則演算を行えば良いか判断する。

さて、このときに書くコードなんだけども、if文を使って書くと

『calcFlugの中が1の場合、足し算を行い、そうじゃなかったら、もしclucFlugの中が2の場合、引き算を行い・・・』

という面倒くさい書き方をしなければならなくなる。

それでも動くけど、100個くらいFlugの数値があったらその文を書くのが非常に面倒くさいしバグの温床にもなる。


switch


そういう時に使うのがswitch文。

中の数字が4の場合、その処理を行う、というような書き方が出来る。

文章では説明しにくいから実際見てみよう。


switch (calcFlug) {

  case 1: //足し算
    self.subtotal += self.countNumber;
    break;

  case 2: //引き算
    self.subtotal -= self.countNumber;
    break;

  case 3: //かけ算
    self.subtotal *= self.countNumber;
    break;

  case 4: //割り算
    self.subtotal /= self.countNumber;
    break;

  default:
    break;
}


calcFlugの数字が2(case 2:)の場合は引き算を行い、処理を抜ける(break;)。

というように、該当するものだけを処理してさっさと処理を抜ける便利なシロモノ。

breakがないとそのまま下に記述されている処理が流れるので忘れずに記述しよう。



コードはなるべく共有する


前回も書いたけど、似たような処理を行う場合、なるべくコードを共有した方がバグ取りなどの管理も楽。

よくよく見たら、四則演算ボタンを押したときの四則演算処理と、=ボタンを押したときの四則演算処理が似ているのでまとめてしまう。


/* 四則演算ボタン */

– (IBAction)additionButton:(id)sender {

  [self calc];
  self.calcFlug = 1;

}

– (IBAction)subtractionButton:(id)sender {

  [self calc];
  self.calcFlug = 2;

}

– (IBAction)multiplicationButton:(id)sender {

  [self calc];
  self.calcFlug = 3;

}

– (IBAction)divisionButton:(id)sender {

  [self calc];
  self.calcFlug = 4;

}

/* イコールボタン */

– (IBAction)answerButton:(id)sender {

  [self calc];
  self.calcFlug = 0;
  self.subtotal = 0;

}

/* 計算処理 */

– (void)calc{

  switch (calcFlug) {

  case 1: //足し算
    self.subtotal += self.countNumber;
    break;

  case 2: //引き算
    self.subtotal -= self.countNumber;
    break;

  case 3: //かけ算
    self.subtotal *= self.countNumber;
    break;

  case 4: //割り算
    self.subtotal /= self.countNumber;
    break;

  default:
    break;

}

self.countNumber = self.subtotal;
[self labelOutput];
self.countNumber = 0;

}


計算処理は別にcalcという処理を作り、ボタンが押されたときにそれを呼び出すというように変更。(赤文字の部分)

1+4ー2という計算を行った場合、1+4を押したときまでは何も計算されないが、+ボタンを押したときにcalcFlugに1(足し算用フラグ)が代入される。

ーボタンを押したときにcalcFlugを確認し、足し算フラグの1が入っているのを確認して1+4が計算される。

そしてsubtotalに1+4の計算結果5が代入され、calcFlugに2(引き算用フラグ)が代入される。

計算小計がラベルに表示された後、countNumberの中身はクリアされる。

というように処理を行うようにコードを書いてみたが、ド素人プログラマにはこれがいいソースコードかどうかは不明。

とりあえずちゃんと動いてる。



クリアボタンを作成


クリアボタンを押すと計算結果がすべてクリアされるCボタンを作成。


– (IBAction)clearButton:(id)sender {

  self.subtotal =0;
  self.countNumber = 0;
  self.calcFlug =0;
  self.buttonNumber = 0;

  [self labelOutput];

}



80%ほど完成


テストしてみたら、四則演算は問題なくできた。

だけど、小数点表示やマイナス表示が出来ない。

う、うーん。

変数の型がおかしいんだろうか。

ちょいと調べてみよう。


関連記事


    • 【Objective-C】XcodeでiPhoneアプリを作る基礎を学ぶ10【四則演算計算機を作る その4】
    • 【Objective-C】XcodeでiPhoneアプリを作る基礎を学ぶ9【四則演算計算機を作る その3】
    • 【Objective-C】XcodeでiPhoneアプリを作る基礎を学ぶ14【懐中電灯アプリを作る】
    • 【Objective-C】XcodeでiPhoneアプリを作る基礎を学ぶ7【四則演算計算機を作る その1】
    • 【Objective-C】XcodeでiPhoneアプリを作る基礎を学ぶ8【四則演算計算機を作る その2】


« 【iOS】kindleで本を買ってみた【iPad mini】 Mac用Finder拡張アプリPathFinderが凄すぎる »



Comments: 8

  1. 青りんご より:
    2013年2月17日 4:41 PM

    もしかしたら最初のほうのが原因かもしれません。
    >NSInteger num1 = 1;

    引用ですがIntegerは英語の整数の意味。
    プログラミングの勉強をした時も
    整数はint型だったけど、小数は型が違ったような気がします。
    もし違ったらごめんなさい(T_T)

    返信
    • 葛葉 キョウジ(管理人) より:
      2013年2月17日 8:44 PM

      変数の型が小数点扱えない型なんですよね。
      floatを使えばいけると思うんですけど、
      変数の型がNSIntegerとintって何が違うのかようわからなくて(;´Д`)
      不可思議ですw

      返信
  2. 青りんご より:
    2013年2月17日 11:00 PM

    俺もあんまり詳しくはわかりませんが、小数のNSIntegerにあたるのが
    CGFloatだと、本に書いてますよw 
    時間があったらダメ元でお試しを(^_^;)

    返信
    • 葛葉 キョウジ(管理人) より:
      2013年2月18日 9:37 AM

      CGFloatとfloatの違いってなんなのかがよく解らなくて(;´Д`)
      とりあえず動けばいいやって感じでやってみますw

      返信
  3. nalabjp より:
    2013年2月23日 12:42 AM

    https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGGeometry/Reference/reference.html#//apple_ref/doc/uid/TP30000955-CH2g-CJBBHACB

    32bitだとfloatで64bitだとdoubleとして扱います。
    今のiOSで使用しているARMアーキテクチャは32bitなので
    floatと同じということになります。
    参考までに。

    返信
    • 葛葉 キョウジ(管理人) より:
      2013年2月23日 12:24 PM

      おおお、ありがとうございますヽ(´ー`)ノ
      勝手に判断してくれるなら便利ですね。
      ちょっと実験してみます。

      返信
  4. hiropon より:
    2014年5月4日 5:22 PM

    管理人さん
    こんにちわ。
    このブログのおかげでとっかかりのiPhone電卓が
    とりあえず動かせるようになりました。
    とても参考になりました!

    返信
    • 葛葉 キョウジ(管理人) より:
      2014年5月5日 12:40 PM

      それはそれは。
      お役に立てて何よりです。
      この記事を書いた当時はプログラミング自体ほとんど理解してない状態だったので、
      今読むと恥ずかしい限りです。

      返信
返信をキャンセルする。

email confirm*

post date*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

  • お知らせ


    毎週日曜25時から25時30分までは定期サーバーメンテナンスタイムです。
    サーバーの再起動やアップデートを行いますので、ブログに接続出来なくなる場合があります。

  • About

    kyoji_kuzunoha HN:葛葉キョウジ
    Apple信者です。
    iPhoneを使いたくてSoftBankにMNPしたら、電波がクソ過ぎてトランシーバー並みに使えなかったので、なんとかdocomo回線で使おうと研究した結果、SIMフリーiPhoneにたどり着く。
    でも、docomoメールが使えないので色々調べたらimotenという神サーバーソフトがあることを知り、VPSと出会う。
    imotenのために仕方なく借りたVPSを色々いじっているうちにのめり込み、チューニングしまくってAirVideoサーバー、WebDAVサーバー、ミュージックストリーミングサーバーにセットアップして超快適な環境に。
    設定方法などを自分のメモとして書きためつつ、現在はXcodeを勉強中。
    ゲーム、ガジェット、料理が大好きな30オーバーのオッサンです。
    毎日ブログ更新してます。(日曜は休み)
  • 最近のコメント

    • 【お風呂で】ジップロック最強すぎワロタ【iPhone&iPad】 に お風呂でiPhoneを楽しむための簡単防水術 | おにぎりまとめ より
    • 【白黒】iPhoneの画面の色が反転してしまった時の対処法【ネガ】 に 山野邊弘次 より
    • 【白黒】iPhoneの画面の色が反転してしまった時の対処法【ネガ】 に 山野邊弘次 より
    • 【白黒】iPhoneの画面の色が反転してしまった時の対処法【ネガ】 に 山野邊弘次 より
    • いい蕎麦屋。悪い蕎麦屋。 に やまがた より
    • 【白黒】iPhoneの画面の色が反転してしまった時の対処法【ネガ】 に たけ より
    • 【白黒】iPhoneの画面の色が反転してしまった時の対処法【ネガ】 に 葛葉 キョウジ(管理人) より
    • 【白黒】iPhoneの画面の色が反転してしまった時の対処法【ネガ】 に 匿名 より
    • 【白黒】iPhoneの画面の色が反転してしまった時の対処法【ネガ】 に 匿名 より
    • 【白黒】iPhoneの画面の色が反転してしまった時の対処法【ネガ】 に 葛葉 キョウジ(管理人) より
  • 最近の投稿

    • 【内臓保護】酒量を思い切り減らしてみた【アル中予防】
    • 毎日豆乳を飲んでみた【1ヶ月目】
    • MacBookに対応しているMoshiのUSB-C充電ケーブルを買ってみた
    • MacBookにインストールしたアプリ
    • MacBook2016の使用感その1
    • 【Mac】ことえりのライブ変換を使ってみた【El Capitan】
    • ジャストシステムのポータブルバッテリーを買ってみた
    • 【MacBook】iPhoneのテザリングについて
    • MacBook2016とアクセサリを購入してみた
    • iPhone6PlusからiPhone6sに乗り換えてしばらく経った現在の使用感
  • 人気記事

    • 【imoten】SIMフリーiPhoneで、iモードメール@docomo.ne.jpを使ってみた。設定編【yahoo!版】 481件のコメント
    • 【Gmail】CentOS6.x(64bit)でimotenを設定して@docomo.ne.jpメールを使う【主にさくらインターネット編】 268件のコメント
    • imotenQ&A 184件のコメント
    • 【DTI】SIMフリーiPhoneでdocomo.ne.jpメールを送受信する方法【outlook.com編】 130件のコメント
    • 【Gmail】CentOS5.x(32bit)でimotenを設定して@docomo.ne.jpメールを使う【主にDTI編】 126件のコメント
    • 【iPhone】imotenの送信メールをSSLで暗号化する【docomoメール】 112件のコメント
    • 【MyCloud】さくらVPSをAirVideoサーバーにする【ストリーミング】 99件のコメント
    • docomo版iPhone5s(5c)用SIMについてちょこっと考察してみた 99件のコメント
    • 【imoten】SIMフリーiPhoneで、iモードメール@docomo.ne.jpを使ってみた。設定編【Gmail編】 97件のコメント
    • SPモードメールをiPhoneでプッシュさせる【docomo.ne.jp】 97件のコメント
  • アーカイブ

  • カテゴリー

    • amazon
    • android
    • Apple
      • AppStore
      • iPad
      • iPhone
      • Mac
    • AppleWatch
    • blog
      • WordPress
      • 移転作業ログ
    • code
    • docomo
    • Game
      • 100万人の信長の野望
      • 3DS・DS
      • PCgame
      • PlayStation
      • XBOX360
    • MVNO
    • News
    • SIM
    • VPS
      • imoten
        • DTI
        • imoten機能拡張
        • さくらVPS
        • はじめに
      • セキュリティ対策
      • 機能拡張
    • Windows
      • ターミナルサービス
    • Xcode
    • おすすめアプリ
    • おすすめ周辺機器
    • グルメ
      • レシピ
    • もっと評価されるべき
    • リモートデスクトップ
    • レビュー
    • 健康
      • ダイエット
      • ランニング
    • 動画
      • TAS
      • スーパープレイ
    • 周辺機器
    • 学習
      • 英語
    • 未分類
    • 雑談

Copyright © くずのは探偵事務所,All right reserved.