学生向けプログラミング入門 | 無料

学生向けにプログラミングを無料で解説。Java、C++、Ruby、PHP、データベース、Ruby on Rails, Python, Django

C++ | 13 | 関数の定義

↓↓クリックして頂けると励みになります。



12 | 関数】 << 【ホーム】 >> 【14 | ポインター(pointer)

関数の定義
関数の定義



C++で関数を定義するには、次の手順に従います。

  • 関数の戻り値の型を決定する:

関数が返す値の型を決定します。関数が値を返さない場合は、戻り値の型としてvoidを使用します。

  • 関数名を指定する:

関数に一意の名前を付けます。関数名は識別子のルールに従って命名される必要があります。

  • 引数リストを指定する:

関数が受け取るパラメーターのリストを指定します。引数がない場合は、引数リストを空にします。

  • 関数の本体を定義する:

関数が行う処理を定義します。これは、波括弧({})で囲まれたコードブロックです。

  • 必要に応じて戻り値を返す:

関数が戻り値を返す場合は、returnステートメントを使用してその値を返します。

関数の定義が完了したら、その関数をプログラムの適切な場所で呼び出すことができます。




Visual Studio Codeで以下のcppファイルを作成して下さい。


新規作成 【KansuuTest6.cpp】

#include <iostream>
#include <stdlib.h>

int square( int x ) {

	return x*x;
}

int main() {

	int x;

	std::cout << "整数で入力してください。" << std::endl;

    for (std::cin >> x ; !std::cin ; std::cin >> x){

        std::cin.clear();
        std::cin.ignore();
        std::cout << "入力が間違ってます。" << std::endl << "整数で入力してください";
    }

    std::cout << "x * x = " << square( x ) << std::endl;
}



実際に自分で簡単な関数を作ってみます。
プログラム自体はキーボードから入力された整数を2乗して表示するという簡単なものです。


このプログラムでの関数は、

int square( int x ) {

    return x*x;
 }

の部分です。(main()関数は除く)


関数の定義は次の書式に従います。

戻り値の型 関数名 ( 型 引数, 型 引数,・・・) {

     実行文;
}



今回のプログラムでは、戻り値の型は「int」で引数の型も「int」です。
return文で戻り値を返しています。
return文で返す戻り値の型と関数の型は一致していなければなりません。


void型のような戻り値のない関数の場合はreturn文で戻り値を返す必要はありません。

return  式又は変数;



関数の使用(呼び出し)は「square( x )」のようにして行います。
関数の型は前に定義しているので呼び出しのときはいりません。

関数名 (引数, 引数,・・・)



サンプルプログラムを実行してみましょう。
キーボードから整数を入力します。
入力した整数の2乗計算した数字が画面に表示されます。

~/Desktop/Programming/CPP $ cd "/Users/**/Desktop/Programming/CPP/" && g++ tempCodeRunnerFile.cpp -o tempCodeRunnerFile 
&& "/Users/**/Desktop/Programming/CPP/"tempCodeRunnerFile

整数で入力してください。
5
x * x = 25



Visual Studio Codeで以下のcppファイルを作成して下さい。


新規作成 【KansuuTest7.cpp】

#include <iostream>
#include <stdlib.h>

void EnemyCourse(int course) {

	std::cout << "Enemy cource   0 2 4" << std::endl;

	if ( course == 0 ) {

		std::cout << "              |E-----|" << std::endl;
	}
	else if ( course == 1 ) {

		std::cout << "              |-E----|" << std::endl;
	}
	else if ( course == 2 ) {

		std::cout << "              |--E---|" << std::endl;
	}

	else if ( course == 3 ) {

		std::cout << "              |---E--|" << std::endl;
	}

	else if ( course == 4 ) {

		std::cout << "              |----E-|" << std::endl;
	}
	else if ( course == 5 ) {

		std::cout << "              |-----E|" << std::endl;
	}
}

void EnemyDistance(int courselength, int distance) {

	std::cout << "           ";

	for ( int i=0; i<courselength; i++) {

		std::cout << courselength-i-1;

	}

	std::cout << std::endl;

	std::cout << "distance |";

	for  (int i=0; i<courselength+i; i++) {

		if (courselength == distance) {

			std::cout << "E";
			courselength--;
		}
		else {

			std::cout << "-";
			courselength--;
		}
	}

	std::cout << "Y|   E:enemy , Y: yours " << std::endl;
}

int main() {

	int teki_kyori, teki_course, laser_course, round, sokudo=0;
	char rader='R';

	int seed, houkou;

	std::cout << "自然数で適当な数を入力してください。--> " << std::endl;

        for (std::cin >> seed ; !std::cin ; std::cin >> seed){

			std::cin.clear();
			std::cin.ignore();
			std::cout << "入力が間違ってます。" << std::endl << "自然数で適当な数を入力してください。--> ";


        }

	srand(seed);

	for(round=1; round<6; round++) {

		std::cout << "第 " << round << "ラウンド" << std::endl << std::endl;

		teki_course = rand()%6;

		sokudo ++;

		for(teki_kyori=10; ; teki_kyori-=sokudo) {

			if (teki_kyori<=0) {

				std::cout << "あなたの負けです" << std::endl;

				exit(0);
			}
			houkou = rand()%3-1;
			if ( teki_course == 0 ) {

				teki_course = rand()%2;
			}

			else if ( teki_course == 5 ) {

				teki_course = rand()%2+4;
			}

			else {

				teki_course += houkou;
			}

			EnemyDistance(10, teki_kyori);

			std::cout << "あなたはレーザーを撃ちますか?" << std::endl;
			std::cout << "それともレーダーを使いますか?" << std::endl;
			std::cout << "レーザー(F) or レーダー(R)" << std::endl;

			for (std::cin >> rader ; !std::cin ; std::cin >> rader){

				std::cin.clear();
				std::cin.ignore();
				std::cout << "入力が間違ってます。" << std::endl << "レーザー(F) or レーダー(R)";
		        }

			if ( rader == 'R' || rader == 'r' ) {

				EnemyCourse(teki_course);
			}
			else {

				std::cout << "撃つ方向を決めてください。" << std::endl;
				std::cout << "0~5のどれかを入力してください" << std::endl;

				for (std::cin >> laser_course ; !std::cin ; std::cin >> laser_course){

					std::cin.clear();
					std::cin.ignore();
					std::cout << "入力が間違ってます。" << std::endl << "0~5のどれかを入力してください";
			       }

				if (teki_course == laser_course) {

					std::cout << "あなたの勝ちです!" << std::endl;

					break;
				}

				else {

					std::cout << "外れました" << std::endl;
				}
			}
		}
	}
}



前のセクションで作成したゲームのメッセージを少し見やすくしています。
まずレーダーを用いたときに的のコースが数字で表示されたのを以下のように変更しました。

Enemy course   0 2 4
         |---E--|

この表示部分の処理を関数 EnemyCourse( int course )にまとめて記述しています。


さらに敵機の距離を表示する部分を次のように表示するようにしました。

       9876543210
distance  |---E-----Y|   E: enemy , Y: yours



敵機が一つ進むと次のようになります。

       9876543210
distance  |----E----Y|   E: enemy , Y: yours



この表示部分の処理を関数 EnemyDistance( int courselength, int distance )にまとめて記述しています。
この関数はEnemyCourse( int course )とは違い、コースの長さを変えても大丈夫なように作っています。

~/Desktop/Programming/CPP $ cd "/Users/**/Desktop/Programming/CPP/" && g++ KansuuTest7.cpp -o KansuuTest7 && "/Users/**/Desktop/Programming/CPP/"KansuuTest7

自然数で適当な数を入力してください。--> 
31ラウンド

           9876543210
distance |E---------Y|   E:enemy , Y: yours 
あなたはレーザーを撃ちますか?
それともレーダーを使いますか?
レーザー(F) or レーダー(R)
r
Enemy cource   0 2 4
              |--E---|
           9876543210
distance |-E--------Y|   E:enemy , Y: yours 
あなたはレーザーを撃ちますか?
それともレーダーを使いますか?
レーザー(F) or レーダー(R)
f
撃つ方向を決めてください。
0~5のどれかを入力してください
2
あなたの勝ちです!
第 2ラウンド

           9876543210
distance |E---------Y|   E:enemy , Y: yours 
あなたはレーザーを撃ちますか?
それともレーダーを使いますか?
レーザー(F) or レーダー(R)
・・・・
・・・・



12 | 関数】 << 【ホーム】 >> 【14 | ポインター(pointer)




↓↓クリックして頂けると励みになります。