ページ 11

簡潔なプログラム

Posted: 2016年2月27日(土) 13:15
by チタン合金

コード:

#include<iostream>

int main(void){

int a, b;

cout << "整数値aを入力せよ:";
cin >> a;

cout <<"整数値bを入力せよ:";
cin >> b;

if (a > b)
   cout << "小さい方の値は"<< b << "です。\n"
          << "大きい方の値は" << a <<"です。\n";
else 
      cout << "小さい方の値は" << a <<"です。\n" 
              << "大きい方の値は" << b <<"です。\n";

      return(0);
}
これを簡潔なプログラムに直すと

コード:

 
int max = a;
int min = a;
if(a > b)
       min = b;
else   
       max = b;
       
cout << "小さい方の値は" << min << "です。\n";
cout << "大きい方の値は"<<  max << "です。\n";
となるようです。

なぜこっちの方が、いいのか解釈が解りません。
C言語初心者なのでお手柔らかにお願いします。

Re: 簡潔なプログラム

Posted: 2016年2月27日(土) 13:49
by hide
必ずしも後者のプログラムがイイとは限りませんが
後者の書き方が役に立つパターンとして、そのプログラムの後に
比べた整数の大きいほうの値に10を足して小さいほうの値をかけたものを出力する
とかやってみるとイイのではないでしょうか。

Re: 簡潔なプログラム

Posted: 2016年2月27日(土) 15:23
by チタン合金
回答ありがとうございます。
その前に後者の方でエラーが出てしまうのですが、(ローカル変数が初期化できていない)と出ます。

コード:

#include<iostream>

int main(void) {
	int a, b = 0;
	int max = a;
	int min = a;
	
	using std::cout;
	using std::cin;
	
	
	


	cout << "整数値aを入力せよ:";
	cin >> a;

	cout << "整数値bを入力せよ:";
	cin >> b;

	if (a > b)
		min = b; 
		
		
	else 
		max = b;


	cout << "小さい方の値は" << min << "です。\n";
	cout << "大きい方の値は" << max << "です。\n";

	cin.ignore();
	getchar();
	return(0);


}
色々直して試してみたのですが、解りませんでしたー、
よろしくお願いします。

Re: 簡潔なプログラム

Posted: 2016年2月27日(土) 15:39
by hide

コード:

int a, b = 0;
これは int型でaとbを定義して、 bに0を初期値として与えています。
つまり aは初期化されていないです。

Re: 簡潔なプログラム

Posted: 2016年2月27日(土) 15:49
by チタン合金
回答ありがとうございます。
しかしこの問題の

コード:

cout << "小さい方の値は" << min << "です。\n";
cout << "大きい方の値は" << max << "です。\n";

ここの値が、なぜかおかしなことになってしまうのです。
例えばminの方に5を入力しても小さい方の値は、0ですと出てきてしまいます。

この問題集の記述がおかしいのか何なのか解らないのですが、
本当に申し訳ないですが、ご足労かけますが、よろしくお願いします。

Re: 簡潔なプログラム

Posted: 2016年2月27日(土) 16:17
by hide
minの方に5を入力
minに直接入力を行うようなプログラムではないですね。
そもそもこのプログラム、ご自身で内容わかってます? すべての行にコメント入れてみてはどうですか?

Re: 簡潔なプログラム

Posted: 2016年2月27日(土) 19:55
by たいちう
> ここの値が、なぜかおかしなことになってしまうのです。
> 例えばminの方に5を入力しても小さい方の値は、0ですと出てきてしまいます。

minはaで初期化していますが、その時のaの値は0なので、
minは0で初期化されるという事です。

aに数値を入力した後に、minとmaxをaで初期化せるのが、
問題集の意図でしょう。

Re: 簡潔なプログラム

Posted: 2016年2月27日(土) 20:06
by たいちう
最初の質問についてですが、整数値cも追加したらどうなるでしょうか。
3つの整数に重複がないとすると、大小関係は6通りになります。

コード:

cout << "1番小さい値は" << a << "です。\n"
     << "次に小さい値は" << b << "です。\n"
     << "1番大きい値は" << c << "です。\n";
というような書き方を6か所書くことになります。
出力のフォーマットを変更したくなった場合も、6か所直すことになります。
一般的に、これは良い方法とは言えません。
「大小の判定」のロジックと「結果の表示」を分けた方がシンプルになります。

ただ元々のプログラムも十分シンプルなので、著者の意図が判りにくいのでしょう。

Re: 簡潔なプログラム

Posted: 2016年2月28日(日) 07:31
by チタン合金
なるほど、回答ありがとうございました。
後は、自分で色々試してみます。