関数の作り方

サブルーチン(sub-routine):定義済み処理

両方とも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側のサブルーチン呼び出しを考えると、たぶん。。。<br>

	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 <iostream>
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つの整数」を「加減乗除して」「計算結果を次々表示する」だけです。

これを関数化するには、戻り値は特に必要ないことがわかります。
つまり、前にやった「手続き型」の関数をつくることになります。
手続き型の関数は結果をメインに戻さないので、戻り値がありません。
戻り値のない関数は以下のように定義します。

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;