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

学生向けにプログラミングを解説。Java、C++、Ruby、PHP、データベース

C++プログラミング入門その16 関数の定義

<<前  [TOP]  次>>


Visual Studioで新規プロジェクトを作り、次のcppファイルを作成して下さい。


KansuuTest6.cpp 直

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

int square( int x ) {

	return x*x;
}

void 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乗計算した数字が画面に表示されます。





Visual Studioで新規プロジェクトを作り、次の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;
}

void 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 )とは違い、コースの長さを変えても大丈夫なように作っています。





<<前  [TOP]  次>>