====== 関数の作り方 ======
**サブルーチン(sub-routine):定義済み処理**
* 手続き(procedure)
* 値を戻さない、処理だけの定義済み処理
* 関数(function)
* 処理結果として、値を戻す定義済み処理
両方ともC++/C言語では単に関数と呼ばれる!
サブルーチンに渡すパラメータの事を引数(ひきすうだよ)っていうよ
仕組み
add_abがどっかで定義されていることを知っていれば・・・
add_abの機能(引数は何か?戻り値は何か?(どんな機能なのか?))
を知っていなければ使えないよね!
int main()
{
int a,b;
cin >> a >> b; //aとbをキーボードから入力
int c;
c = add_ab(a, b); //aとbを足す関数add_abがどっかで定義済み
cout << a << "+" << b << "=" << c << endl;
}
こんな感じで書ける。
関数の作り方
戻り値の型 関数名(引数リスト)
{
引数リストの引数を変数として、処理内容を記述するブロック;
return(戻り値);
}
さっきのadd_abを考える
・intの変数を2個パラメータで受け取って、その2つを足した値を返す
int add_ab(int _x, int _y)
{
int z;
z = _x + _y;//2つのパラメータを足す
return(z);//zの値を処理結果として返す
}
入力された2つの値を
引き算する関数 int sub_ab(????, ????){}
掛け算する関数 int mul_ab(????,????){}
割り算をする関数 int div_ab(????, ????){}
割り算は、割る数が0の時(a÷bのb)はエラー
として0を返そう!
それ以外の時は整数でa÷bの商を返す!
をつくってみよう!
===== 加減乗除の関数を作る。まで =====
main側のサブルーチン呼び出しを考えると、たぶん。。。
cout << "加算" << a << "+" << b << "=" << add_ab(a,b) << endl;
cout << "減算" << a << "-" << b << "=" << sub_ab(a,b) << endl;
cout << "乗算" << a << "*" << b << "=" << mul_ab(a,b) << endl;
cout << "除算" << a << "/" << b << "=" << div_ab(a,b) << endl;
こうなると思われる。\\
== 呼び出す関数を定義してみる ==
#include
using std::cin;
using std::cout;
using std::endl;
//引数:整数_xと_y
//戻り値:_x+_yの加算結果
int add_ab(int _x, int _y)
{
//int z;
//z = _x + _y;//2つのパラメータを足す
//return(z);//zの値を処理結果として返す
return(_x + _y);
}
//引数:整数_xと_y
//戻り値:_x - _yの減算結果
int sub_ab(int _x, int _y)
{
return(_x - _y);
}
//引数:整数_xと_y
//戻り値:_x × _yの乗算結果
int mul_ab(int _x, int _y)
{
return(_x * _y);
}
//引数:整数_xと_y
//戻り値:_x ÷ _yの除算結果
int div_ab(int _x, int _y)
{
if(_y == 0)
{
return(0);
}
else
return(_x / _y);
}
//mainに来た時点では、int add_abは定義済み
int main() {
int a,b;
cout << "2つの整数を入力:";
cin >> a >> b;
//int c;
//c = add_ab(a, b);
cout << "加算" << a << "+" << b << "=" << add_ab(a,b) << endl;
cout << "減算" << a << "-" << b << "=" << sub_ab(a,b) << endl;
cout << "乗算" << a << "*" << b << "=" << mul_ab(a,b) << endl;
cout << "除算" << a << "/" << b << "=" << div_ab(a,b) << endl;
//int d = add_ab(100, 200);
//cout << "d=" << d << endl;
}
=== 表示部分を丸っと関数化してみる ===
結果の表示部分をサブルーチン化してみます。
cout << "加算" << a << "+" << b << "=" << add_ab(a,b) << endl;
cout << "減算" << a << "-" << b << "=" << sub_ab(a,b) << endl;
cout << "乗算" << a << "*" << b << "=" << mul_ab(a,b) << endl;
cout << "除算" << a << "/" << b << "=" << div_ab(a,b) << endl;
この部分の処理の、「機能」を考えてみます。\\
そうするとたぶん、文章で書くと以下のようになると思います。\\
**二つの整数の加減乗除の計算結果を表示する**処理
つまり、機能としては「2つの整数」を「加減乗除して」「計算結果を次々表示する」だけです。
* **「2つの整数」**は、引数で関数内に値を取り込めます。
* **「加減乗除して」**は、それぞれadd_ab(int _x, int _y)、sub_ab(int _x, int _y)、mul_ab(int _x, int _y)、div_ab(int _x, int _y)を呼び出すことで計算結果を求められます。
* **「計算結果を次々表示する」**は、「加減乗除して」の結果をそれぞれcoutで出力するだけです。
これを関数化するには、戻り値は特に必要ないことがわかります。\\
つまり、前にやった「手続き型」の関数をつくることになります。\\
手続き型の関数は結果をメインに戻さないので、戻り値がありません。\\
戻り値のない関数は以下のように定義します。\\
void 関数名(引数リスト)
{
処理内容ブロック;
}
→ 実際に作ってみる!\\
**次回(月曜?)答え合わせしよう!**
== 補足(蛇足) ==
関数名や変数名は、かっこいいものを使おう。\\
2つの引数(実数)があって、その掛け算の結果を返す関数名\\
// 概要 :2つの引数の乗算結果を返す関数
// 引数 :double _x 掛けられる数
// :double _y 掛ける数
//戻り値 :doble _x * _y の計算結果
//× かっこ悪い
double kakezan(dobule _x, double _y){ごにょごにょ;}
//〇 かっこいい
double mul_double_val(double _x, double _y){ごにょごにょ;}
時間、速さ、距離を表す実数変数\\
//時間、速さ、距離を表す変数
//× かっこ悪すぎる
double jikan, hayasa, kyori;
// time 時間
// velocity 速度
// distance 距離
//まぁまぁ〇 割とかっこいい方
double time, velocity, distance;