ページ 1 / 1
簡潔なプログラム
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を定義して、 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 チタン合金
なるほど、回答ありがとうございました。
後は、自分で色々試してみます。