ページ 11

無題

Posted: 2009年6月16日(火) 23:08
by ユーリ
学校の課題なのですが、配列に格納された10個の整数の中から、最大値、最小値を表示するというプログラムです。
  #include <stdio.h>

   main(void)

  {

int d[10]={11,64,98,56,34,77,23,82,42,48};
int i,j,w;

for(i=0;i<9;i++){
for(j=9;j>=i+1;j--){

if(data[j]<data[j-1]){
w=data;
data=data[j];
data[j]=w;
     }
    }
}
for(i=0;i<10;i++){
printf("data[%2d]=%5d\n",i,data);
    }
  

    return 0;
   }
ここまで作ってみたのですが、どのように最少、最大を表示すればいいですかね

Re:無題

Posted: 2009年6月16日(火) 23:28
by やっくん
とりあえず、まず修正点です(打ち間違えかもしれませんが。)
int d[10] → int data[10]

それと全角のスペースがところどころ混じっていますね。
ソースを投稿する際は
ソースを

<Pre>

#include <stdio.h>

main(void) {

</Pre>

と、<Pre>~</Pre>で囲むと綺麗にインデントしますよ。<>←半角で。

Re:無題

Posted: 2009年6月16日(火) 23:35
by ランド
昇順(小さい順)に並べようとしているのでしょうか?
だとすると、

if(data[j]<data[j-1]){
w=data;
data=data[j];
data[j]=w;
}

にてj番目とj-1番目を比較しているのに、j番目とi番目を交換しているので不可解な結果が表示されます。
後は、並べ替えた結果、最小と最大の値が何番目に来ているかを考えればわかるはずです。

Re:無題

Posted: 2009年6月16日(火) 23:58
by pooka
>w=data;
>data=data[j];
>data[j]=w;
この処理がどういうものか理解していますか?
少なくとも今の課題では必要ないかと思います。

例えば最大値を考えると
int max;
max = data[0];
for(i=1;i<10;i++)
	 if(max < data)
		max = data;
printf("max:%d\n",max);

こんな感じに、if文でmaxの値より大きいときmaxにその時の値を代入するようにしていき、
最後にmaxの値を表示するようにすればいいと思います。

やっくんさんの
><Pre>~</Pre>で囲むと綺麗にインデントしますよ。<>←半角で。
に追加で、もとのプログラムがきちんとインデントされていないとプレタグで囲んだだけではきれいに表示されません。

Re:無題

Posted: 2009年6月17日(水) 09:20
by ユーリ
配列に格納された十個の中から最大と最小を出すには
どういった感じでやればいいのでしょう
ヒントをお願いします

Re:無題

Posted: 2009年6月17日(水) 09:25
by やそ
用意された配列の並びを変更してよいなら、
ソート(小さい順などに)して両端の数が最少、最大になっているはずなので
それを表示すれば良いと思います。
変えてはいけないのなら、作業用に同じ大きさの配列でも用意しておけば可能ですかね。

Re:無題

Posted: 2009年6月17日(水) 10:20
by ユーリ
ありがとうございました
解決しました

Re:無題

Posted: 2009年6月17日(水) 10:29
by non
課題を出した先生の立場から考えると、これは、ソートの課題なのでしょうか?
ユーリさんは、このソートで解く方法を自分で考えたのでしょうか?
第3者の立場で見ますと、自分で考えたとは思えません。なぜならノーヒントで
ソートの方法を考えられるのであれば、このような質問はしません。

とすると、授業でソートについて習ったかどうかが重要だと思います。習いましたか?
しかし、課題の問題文だけを読むと、ソートをした後でというニュアンスがありません。
結論から言えば、先生はソートをせずに最大と最小を求めろという課題を出したのだと
思います。

やり方についてはpookaさんが答えを示されています。そのメッセージをスルーして
いるのはなぜでしょうか?