Objective-C 基本講座

乱数・キャストを使う

全333コースを10日間無料で

ぜひご覧ください。

無料で視聴する すべての加入プランを見る
または
#defineと#ifの使い方を紹介します。あわせて乱数の作り方、キャストを使った整数と実数間の変換について学習します
講師:
07:01

字幕

このレッスンではコンパイラ指令の define と if の使い方を紹介します まず例としてお見せするソースコードは モンテカルロ方で円周率を求めるものです これは半径 R に接する円の正方形内に 点をでたらめに打ったならば その点が円の中に打たれる確率は 正方形の面積分の円の面積と同じだろうという 所から円周率を求める方法です 興味がある人は画面を止めて式を見直しても 構いませんが 速い話が適当に点を打てば円内だった点の数を 打った点の数で割って4倍すると 円周率が求まるという話です プログラムにすると次のようになります まず円内の点の総数を0に初期化しておき 予め決めておいた点の総数分ループします ループの中では毎回無作為に 点を打つ位置を決定し 点が円内だったなら円内の点の総数を 1つ増やす これで円周率が求まります 無作為に点の位置 X Y を決定するのに 使っている arc4random 関数は 呼ばれる度に規則性の無い でたらめな数を戻します 一般にこの様な規則性のないでたらめな数の 連続を乱数列と呼びます 乱数列の各要素を乱数を呼びます 打つ点の総数 TRYCOUNT は 本来変数で持つべきですが 今回は学習目的で define を使ってみます define は#が付いているので コンパイラへの指令です そのため最後に セミコロンを付ける必要はありません 改行までが1命令と見なされます コンパイラはソース中で define の後に続く単語に出会ったら その単語をその後に続く単語に置き換えます 次に無作為に点の位置を X Y に決定するに 使っている arc4random 関数を説明しましょう arc4random は乱数 厳密には疑似乱数を戻す関数です この関数を使うときは stdlib.h をインクルードします 戻り値の範囲は 0から2の32乗−1となります これは32ビットすべて正の数側に使った時に 記憶できる最大値でそのため 戻り値の型も32ビット すべて正の数側に使った整数型である u_int32_t が指定されています しかしそうなるとその値を座標にして 点が円内かどうか調べるために ピタゴラスの定理で計算しようとすると 型として記憶できる範囲を 超える可能性が出てきます そのため X Y は double 型の変数にして そこに代入するようにしています また X Y は正の数となるので 点が打たれる範囲は第1象限のみと なってしまいますが 比率的には同じことなので 問題ありません そして半径 R はこの場合 arc4random 関数が戻す最大の値である 32乗−1ということになります この2の32乗−1の値は 外部で UNINT32_MAX として デファインされているので これを使います そしてその書き合わせたものを 比較に使うことになるので こちらも double 型にして 計算する必要があります そのためここでキャストを使っています キャストはカッコ中に返還先の型を記述し 返還元の値の手前に置くことで指定します ここでは u_int32_t 型から double 型でしたが その逆もできます キャスト明示することでコンパイラは 指定された型で計算を行ないます 実は arc4random 関数の戻り値を double 型の変数に入れるときも 暗黙裏にこのキャストが行なわれています その他数字リテラルは小数点をつけると 実数型になるという決まりもあるので 覚えておいてください X Y にどんな値が設定されているのかも 確認したいと思うので printf でコンソールに出力しましょう ただこうすると もしループを1万回行なったら 1万回出力されてしまいます その対策として define を使います こうしておいて もう1つのコンパイラ指令である if を使えば TRYCOUNT が 10 より大きい時は プリント関数が消え TRYCOUNT が 10 以下の時は printf が復活します コンパイラ指令の if には else がないので このような書き方になります 因にこの PRINT_POSITION の define では 仮引数を受け取れるようになっています カッコ内が仮引数でそこだけは置き換える側の 文字列の持っていけるようになっています 例えばソースコードに 次のように書かれていたなら 置き換わった後も alpha, beta は残ります では実際に動かしてみましょう Xcodeの画面に切り替えます PRINT_POSITION は先ほどの説明の例として わざと X Y ではなくA B としています またご覧のように TRYCOUNT が 10 より大きい側は 何も書いていません run すると X Y 座標が出力されます π はまあそれなりの値というところです 次は百万回のループにしましょう π だけが出力されました この場合 PRINT_POSITION は セミコロンだけ残して消えてしまっています このレッスンではコンパイラ指令の define と if の使い方を紹介しました

Objective-C 基本講座

このコースはプログラミング初心者でもObjective-CによるiOSアプリ開発の体系的な理解が得られるように構成されています。プログラムの動作の原理、Objective-C言語の役割、そこで利用されるCocoa touchオブジェクトの役割、基本的なiOSアプリの作成方法などを学習します。ぜひこのコースをアプリ開発に踏み出すさいの第一歩としてください!

6時間39分 (69 ビデオ)
現在、カスタマーレビューはありません…
 
ソフトウェア・トピック
価格: 3,990
発売日:2015年11月18日

このコースは、「オンデマンド」でご利用可能であり、ダウンロードすることもオンラインで見ることもできます。

ダウンロードすると、オフラインでコースを使用し、豊富なインターフェースをフルに活用できます。複数のデバイスを使用したり、 一度に全コースをダウンロードしたくない場合は、アカントにログインして、ストリーミング・ビデオとしてコースのレッスンを視聴してください。

ビデオトレーニングをお楽しみいただけますように! お問い合わせは、cs-jp@lynda.com宛までご連絡ください。