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

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

C++プログラミング入門その10 論理演算のプログラム

>>この記事には書き直した新しいページがあります。<<


<<前  [TOP]  次>>


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


【EnzanTest1.cpp】

#include <iostream>

void main() {
	int a, b, c, ans, mondaisu, seikaisu;
	mondaisu = 4;
	seikaisu = 0;

	std::cout << "以下の問題では、真の時は1を、偽の時は0を入力してください。";
	std::cout << std::endl << std::endl;

	/*問題1*/
	a=5; b=3;

	std::cout << "a=" << a << ", b=" << b;
	std::cout << " の時、a>1 && b>2 は真(1)か偽(0)か?答え=> ";
	std::cin >> ans;

	if ( ans == (a>1 && b>2) ){
		seikaisu++;
	}

	/*問題2*/
	a=2; b=-2;

	std::cout << "a=" << a << ", b=" << b;
	std::cout << " の時、a<0 || b<0は真(1)か偽(0)か?答え=> => ";
	std::cin >> ans;

        if ( ans == (a<0 || b<0) ){

                seikaisu++;
        }

	/*問題3*/
	a=-4; b=-2;

	std::cout << "a=" << a << ", b=" << b;
	std::cout << "の時、a<0 && b>0 は真(1)か偽(0)か?答え=>=> ";
	std::cin >> ans;

        if ( ans == (a<0 && b>0) ){

                seikaisu++;
        }

	/*問題4*/
	a=8; b=-2; c=0;

	std::cout << "a=" << a << ", b=" << b << ", c=" << c;
	std::cout << " の時、a>0 && b>-2 || c>-1 は真(1)か偽(0)か?答え=>=> ";
	std::cin >> ans;

        if ( ans == (a>0 && b>-2 || c>-1) ){
                seikaisu++;
        }

		std::cout << "正解は、" << mondaisu;
		std::cout << " 問中" << seikaisu <<  "問です。" << std::endl;

	if ( mondaisu == seikaisu) {
		std::cout << "全問正解です。次の課題に進んでください。" << std::endl;
	}
	else {

		std::cout << "もう一度やり直してください。" << std::endl;
	}
}



論理演算とは、真と偽の値をもつものの間の演算のことで、結果は必ず真または偽になるものです。
論理演算子には次の3つがあります。

演算子機能優先順位
否定
&&and(かつ)
||or(または)
ただし、論理andと論理orは2項演算子であるのに対し、否定演算子は単項(一つの論理値に作用する)演算子です。


もう少し詳しく説明すると次のようになります。
否定真のものを否定すれば偽。偽を否定すれば真。
論理 and2つの論理値が同時に真であるときのみ真。それ以外はすべて偽。
論理 or2つの論理値が同時に偽であるときの偽。それ以外はすべて真。
真偽を数字で表すと、偽は0、真は1である。


論理演算で、真(true)であるというのは、数字で表すと 1 になります。
逆に偽(false)であるということは 0 になります。


サンプルプログラムをビルドしてデバッグしてみましょう。
選択が4つ以上あるクイズを考え、答えの番号を入力させるプログラムです。
正しければ正解であることを表示して終了し、間違っていれば誤答であることを表示します。





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


【EnzanTest2.cpp】

#include <iostream>

void main() {

	int a, b, c;

	std::cout << "三角形の3辺の長さを入力してください。" << std::endl;

	std::cout << "まず最初に、一辺の長さ aを自然数で入力してください。--->" << std::endl;

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

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

		std::cout << "次にもう一辺の長さ bを自然数でstd::。--->" << std::endl;

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

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

		std::cout << "最後に 辺の長さcを自然数で入力してください。--->" << std::endl;

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

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

	if ((a+b>c && b+c>a && c+a>b) == 1 ){

		std::cout << "三角形として成り立っています" << std::endl;
        }
	
	else {

		std::cout << "三角形として成立していません。" << std::endl;
	}
}



三角形の3辺の長さを与えたときに、その三角形が成立しているかどうかを調べるプログラムです。


三角形というのは、どんな長さの3辺を与えても三角形が成立するわけではありません。


例えば、斜辺の長さが異常に長い1000のような値をとるとき、他の2辺が1,1の長さならば明らかに、これは三角形として成立しません。
一般に三角形の3辺をa, b, c とすると、一般に三角形の成立条件は、a+b >c かつ b + c > a かつ c + a > b です。


三辺の長さ(自然数)をキーボードから入力できるようにしています。


サンプルプログラムをビルドしてデバッグしてみましょう。
三角形として成立していれば、「三角形として成り立っています」と出力され、成立していなければ、「三角形として成立していません。」と出力されます。





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


【EnzanTest3.cpp】

#include <iostream>

void main() {

	int a, b, c, temp;

	std::cout << " 三角形の3辺の長さを入力してください。"<< std::endl;
	std::cout << "まず最初に、一辺の長さ aを自然数で入力してください。--->" << std::endl;

        for (std::cin >> a ; !std::cin ; std::cin >> a){
			std::cin.clear();
			std::cin.ignore();
			std::cout << "入力が間違ってます" << std::endl << "長さ aを自然数で入力してください。-->";
        }
	std::cout << "次にもう一辺の長さ bを自然数で入力してください。--->" << std::endl;

        for (std::cin >> b ; !std::cin ; std::cin >> b){
			std::cin.clear();
			std::cin.ignore();
			std::cout << "入力が間違ってます" << std::endl << "長さ bを自然数で入力してください。-->";
        }
		std::cout << "最後に 辺の長さcを自然数で入力してください。--->" << std::endl;

        for (std::cin >> c ; !std::cin ; std::cin >> c){
			std::cin.clear();
			std::cin.ignore();
			std::cout << "入力が間違ってます" << std::endl << "長さcを自然数で入力してください。-->";
        }
	if ( a < b ){
		temp=a; a=b; b=temp;
	}
	if ( a < c ){
		temp=a; a=c; c=temp;
	}
	if ((a+b>c && b+c>a && c+a>b) == 1 ){

		std::cout << "三角形は成立しています。" << std::endl;

		if ((a*a == b*b + c*c) == 1 ){
			std::cout << "この三角形は直角三角形です。" << std::endl;
		}
		else if ((a*a > b*b + c*c) == 1 ){
			std::cout << "この三角形は鈍角三角形です。" << std::endl;
                }
		else if ((a*a < b*b + c*c) == 1 ){
			std::cout << "この三角形は鋭角三角形です。" << std::endl;
                }
        }
	
	else {

		std::cout << "三角形として成立していません。"<< std::endl;
	}
}



三角形の3辺の長さを与えたときに、その三角形が成立しているかどうかを調べ、三角形の成立条件を調べた上で、形状を調べるプログラムです。


三角形の形状にはいろいろなものがあるが、これは、直角三角形、鈍角三角形、鋭角三角形のどれかを調べるプログラムです。
以下では、最も長い辺を a とし、それ以外の辺を b, c としています。
ただし、どれか2つ、あるいは3つの辺が等しい場合も含んでいます。


1.直角三角形 a*a = b*b + c*c が成立するもの。
2.鈍角三角形 a*a > b*b + c*c が成立するもの。
3.鋭角三角形 a*a < b*b + c*c が成立するもの。


最も長い辺を求めるために以下の処理を行っています。

if ( a < b ){
     temp=a; a=b; b=temp;
}
if ( a < c ){
     temp=a; a=c; c=temp;
}

これで、 a > b かつ a > c になっています。


サンプルプログラムをビルドしてデバッグしてみましょう。
与えられた条件に対し、直角三角形、鈍角三角形、鋭角三角形のどれかを表示します。





<<前  [TOP]  次>>