こんにちは､ そしてようこそ｡
関数の最も基本的な概念､ 基本的なことをかなり話しました｡
関数に関するより高度な概念として､ 関数ポインタや静的・自動的な静的変数､
再帰性などがあります｡
でも､ そういうことは上級クラスで議論することになるんです｡
関数の基本がわかったところで､ 関数の作り方や使い方に慣れるように､
課題を提供したいと思います｡
実際にいろいろな関数を書いてみるわけです｡
このような様々な関数を書く練習を始める必要があります｡
そして､ なぜ関数を書きたいのか｡ なぜなら､ それによってコードがより整理され､
よりモジュール化され､ 重複を避けることができるからです｡ すべての長所を突き詰めた｡
そこで､ この課題の目的は､ 関数に慣れ親しみ､ これらの利点を理解することです｡
つまり､ 3つの関数を書くわけですが､ これらの関数は1つのプログラムの中ですべて定義することができるのです｡
2つの非負整数値の最大公約数を求め､
その結果を返す関数を書いて欲しい｡
だから､ GDCという関数名を作ればいいんです｡
この関数は2つの整数をパラメータとして受け取る必要があります｡
最大公約数を求めるアルゴリズムは非常にシンプルです｡
ネットで調べてもいいし､ どんな数学の本でもいい｡
これらの課題で注目してほしいのは､ どんどん難易度が上がっていることです｡
すべてのヒントを提供するつもりはありません｡
GDCのアルゴリズムを考えなければならない｡
でも､ とても簡単で､ よくあることなんです｡
よくある機能ですね｡
この関数がデータを受け取り､ データを返すようにする｡
負でない2つの整数を受け付ける｡
負の整数をチェックしたければしてもいいし､ しなくてもいいし､
それはあなた次第です｡
また､ 数値の絶対値を計算する関数も書いてほしい｡
数の絶対値は正の値､ 正の値です｡
つまり､ 負の数である5があれば､ その絶対値は5である｡
正の数である5があれば､ 絶対値は5､ とても簡単な関数です｡
実は､ この関数の実装で必要なのは､ 本当に0より小さいかどうかをチェックすることだけなんです｡
そして､ もしそうなら､ それがポジティブなものであることを確認するだけです｡
変数なら､ xは負のxに等しいというだけです｡
この関数が動作することを確認するために､ intsとfloatでテストすることをお勧めします｡
絶対値関数をもっと使いやすくするために､ パラメータをfloatで受け取ってfloatに返すようにします｡
そうすれば､ 実際にint型で使っても､ 精度が落ちることはないでしょう｡
intを渡すと､ 自動的にfloatに変換されます｡
また､ int型でパラメータをint型にして､ floatを使おうとするとint型を返してしまうと､
データが失われてしまいます｡
だから､ 浮き輪を持たせる｡
3つ目の関数は､ 数値の平方根を計算するものです｡
ヘルパーや標準ライブラリの関数は使わないでください｡
自分で作成したアルゴリズムで平方根を行う｡
また､ このメソッドに渡されるパラメータも確認してほしい｡
関数に渡される値が何かあって､ その値がマイナスなら､ メッセージを表示して､
マイナスを返して欲しいのです｡
これはどういうことかというと､ 実はもう一つ作った関数､ 絶対値をヘルパー関数として使うことができるのです｡
それを使っているんですね｡
ある関数が別の関数を利用することをヘルパー関数と呼ぶことがある｡
そこで､ 平方根関数......絶対値関数を呼び出してほしいのです｡
それを利用して､ 引数が負であるかどうかをテストすることができます｡
また､ 実際に平方根の計算をするときにも使うことができます｡
負の数を返すとはいえ､ 平方根そのものを実行するときには､
絶対値関数を呼び出したい｡
そこで､ 書いてほしいのがこの3つの機能です｡
これから関数を作る､ つまり宣言することを学びます｡
関数のプロトタイプをファイルの先頭に置くのは､ 良い習慣なので覚えておいてください｡
正しいデータを返してほしい｡
これらの関数にデータを渡してほしいので､
関数のシグネチャ全体を理解する必要があります｡
そして､ これらの関数を呼び出すことになります｡
実際にプログラムをテストするときには､ たくさんのテストケースを用意してください｡
複数の値でGDC関数を呼び出す｡
負の数で呼び出す｡
絶対値関数を多くの異なる値で呼び出す｡
main関数内の関数を呼び出すだけで､ これらすべてをテストすることができます｡
そして､ これで通常の出力も可能です｡
次の講義で私の解答をお見せしますが､ これについて考え､
少し計画を立て､ どんな関数が返ってくるかを考えてみてください｡
ここで多くのヒントを与えても､
何を返すのか､ どのようにデータを取るのか､ 関数宣言などを理解することです｡
頑張ってください｡