おさらい!関数 とっても大事 ちょっぴり難しい 書けなきゃ始まらないね 書けるようになろう! おさらい!関数 2 そもそも関数って? 数学の関数と似たようなもの ►sin とか cos とか ►だけど数学っぽくない関数もある printf や scanf も関数 ►別に計算に使うわけじゃなくても関数なんだね ►何か共通点は見えてくるかな? FunctionName(arg1, arg2) こんな形で使うのが関数 おさらい!関数 3 今回やりたいこと なるほど関数って今まで使ってたんだね ►じゃあもう勉強することはない? 今度は自分で作れるようになろう ►関数は自分で書いてこそ威力を発揮する まずはC言語講習の頃と同じ Win32 コンソールアプリケーション のプロジェクトを作ろう おさらい!関数 4 まず書いてみる まずは下のコードを main 関数より上に書こう // x の y 乗を返す関数 double Power(double x, int y) { double result = 1; // 0 < y のときは掛け算 for (int i = 0; i < y; i++) { result *= x; } // y < 0 のときは割り算 for (int i = 0; y < i; i--) { result /= x; } // 結果を返す これで関数を自作したことになる return result; } おさらい!関数 5 作ったら使おう さっきのコードの下に main 関数を書こう ►ファイルの最初で #include を忘れないようにね! int main() { printf("3^3 = %f\n", Power(3, 3)); printf("4^-1 = %f\n", Power(4, -1)); printf("2^0 = %f\n", Power(2, 0)); return 0; } 3^3 = 27.000000 4^-1 = 0.250000 2^0 = 1.000000 続行するには何かキーを押してください . . . おさらい!関数 6 関数の作り方 関数の書き方を抽象化するとこんな感じ 戻り値の型 XXXXXXX(XXXX, 関数名 引数1 XXXXXX 引数2 XXX) { 処理 戻り値 return XXXXXXX; } ► ► 戻り値 引数 の型は 戻り値の型 であることに注意! の個数はいくつでも良い(無くても良い) おさらい!関数 7 どうやって動くの? 例えばこんなコードを実行すると // fooに○○を保持 戻り値の型 foo = XXXXXXX(XXXX, 関数名 引数1 XXXXXX 処理 引数2 XXX); を経た上で・・・ // fooに○○を保持 戻り値の型 foo = XXXXXXX; 戻り値 XXXXXX こんな風に変身する 6ページの例で確認してみよう! おさらい!関数 8 スラスラ書くために コードを組み立てる戦略 おさらい!関数 9 実践してみよう 2点間の距離 を取得する関数を作ってみよう! アプローチはこんな感じ ►戻り値の型は何かな? ►関数名は和英辞書とかで調べて考えてみよう ►引数は何が必要かな? ►肝心の処理はどうしよう? おさらい!関数 10 戻り値の型は? 座標が整数でも距離は実数になるよね ►距離がピッタリ整数になることはそんなにない ►切り捨てると精度に問題がありそう 戻り値は double にしよう おさらい!関数 11 関数名は? 一目瞭然な名前が良いね ►「動詞+名詞」の形にするのが一般的 ►「距離」は「Distance」 ►「取得」は「Get」 ►「距離」を「取得」するので・・・ 関数名は GetDistance にしよう おさらい!関数 12 引数は? 2点間の距離を求めるのに必要な物は? ►「2点」だよね ►ここでは2次元整数座標と仮定する ►(x, y) の組が2つ必要 ►4つの変数 (x1, y1), (x2, y2) が必要だね おさらい!関数 13 処理を考える前に一息 関数の外枠を作ってしまおう ►こんな感じになるね double GetDistance(int x1, int y1, int x2, int y2) { 処理 return 戻り値 ; } 処理 をクネクネして 戻り値 おさらい!関数 を欲しい式にしよう 14 処理は? もう察しがつくよね ►いわゆる三平方の定理的なアレです ►プログラムで実装するとこんな感じになるね double result = 0; // 各成分の差の2乗を足していく result += (x1-x2) * (x1-x2); result += (y1-y2) * (y1-y2); // その平方根 result = sqrt(result); おさらい!関数 15 完成! 全部合わせるとこういうことだね! double GetDistance(int x1, int y1, int x2, int y2) { double result = 0; // 各成分の差の2乗を足していく result += (x1-x2) * (x1-x2); result += (y1-y2) * (y1-y2); // その平方根 result = sqrt(result); // 結果を返す return result; } おさらい!関数 16 別解 まとめてこう書くことも可能だよ ►あまり長くならない処理は1行にしても良いね double GetDistance(int x1, int y1, int x2, int y2) { return sqrt((x1-x2) * (x1-x2) + (y1-y2) * (y1-y2)); } これで関数おさらいはおしまい! ►みんなおつかれさま! おさらい!関数 17
© Copyright 2024 ExpyDoc