サブルーチン(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;