簡潔なプログラム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
チタン合金

簡潔なプログラム

#1

投稿記事 by チタン合金 » 8年前

コード:

#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言語初心者なのでお手柔らかにお願いします。

hide

Re: 簡潔なプログラム

#2

投稿記事 by hide » 8年前

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

チタン合金

Re: 簡潔なプログラム

#3

投稿記事 by チタン合金 » 8年前

回答ありがとうございます。
その前に後者の方でエラーが出てしまうのですが、(ローカル変数が初期化できていない)と出ます。

コード:

#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);


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

hide

Re: 簡潔なプログラム

#4

投稿記事 by hide » 8年前

コード:

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

チタン合金

Re: 簡潔なプログラム

#5

投稿記事 by チタン合金 » 8年前

回答ありがとうございます。
しかしこの問題の

コード:

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

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

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

hide

Re: 簡潔なプログラム

#6

投稿記事 by hide » 8年前

minの方に5を入力
minに直接入力を行うようなプログラムではないですね。
そもそもこのプログラム、ご自身で内容わかってます? すべての行にコメント入れてみてはどうですか?

たいちう
記事: 418
登録日時: 13年前

Re: 簡潔なプログラム

#7

投稿記事 by たいちう » 8年前

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

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

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

たいちう
記事: 418
登録日時: 13年前

Re: 簡潔なプログラム

#8

投稿記事 by たいちう » 8年前

最初の質問についてですが、整数値cも追加したらどうなるでしょうか。
3つの整数に重複がないとすると、大小関係は6通りになります。

コード:

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

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

チタン合金

Re: 簡潔なプログラム

#9

投稿記事 by チタン合金 » 8年前

なるほど、回答ありがとうございました。
後は、自分で色々試してみます。

閉鎖

“C言語何でも質問掲示板” へ戻る