【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.18760

最大、最小をとり要素番号も表示する方法
投稿者---爆発(2004/12/16 02:52:40)


こんばんわ。数値を取得し、配列に格納しながら最大値、最小値を
求めます。そして最大値、最小値が格納されている配列番号も
表示させようとしています。がなかなかうまくいきません。
というのは、最大値、最小値が複数個存在したときに番号を
1つではなくすべて表示させたいからなのです・・・

PCはWindows XP、Visual C++6.0を使用しています。

途中までのソースはこちらです。

#include <stdio.h>

void main(void)
{
        int k;
        int a[20];
        int max;
        int min;
        int i;
        int max_num;
//    int b[20];
        int c[20];

        max = 0;
        min = 500;
        i = 0;

        while(i <5){

                scanf("%d",&k);

                a[i] = k;

                /*    最大値   */
                if(a[i] > max){
                        max = a[i];
                        max_num = i;
//            b[i] = max_num;
                }

                /*    最小値   */
                if(a[i] < min){
                        min = a[i];
                        c[i] = i;


                }

                i++;

        }

        /*    結果表示    */
        printf("回数 = %d\n",i);
        printf("最大値 = %d\n",max);
        printf("最小値 = %d\n",min);
        printf("最大値の配列番号 = ");
//    for(j=0;j<i;j++){
                printf("%d ",max_num);
//    }
//    printf("\n最小値の配列番号 = ");
//    for(j=0;j<i;j++){
//        printf("%d ",c);
//    }
}



汚くなっているのですが、申し訳ありません。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:最大、最小をとり要素番号も表示する方法 18762 あかま 2004/12/16 03:31:01


No.18762

Re:最大、最小をとり要素番号も表示する方法
投稿者---あかま(2004/12/16 03:31:01)


配列c[]は最小値の要素番号を格納する配列ですよね?すると

c[i] = i;

これがおしくもできない部分です。
例えば3番目の要素で最小値が見つかったときに

c[3] = 3;

となってしまいます。ほんとはc[]のはじめの要素に

c[0] = 3;

と入力して、5番目の要素で同じ値の最小値が見つかったときは

c[1] = 5;

というように次のc[]に要素番号を格納したいのだと思います。
それを実現するにはiのほかにc[]専用のカウンタが必要になります。
そして、もしまた新しい最小値が見つかったときは、またそのカウンタをリセットしてc[0]に新しい要素番号を格納します。
b[i]についても同様です。


別の方法でよければもう少し簡単な方法も。
要素番号を保存しないで一旦、最大値と最小値だけ求めます。
int a[20];に入力した値をとってあるので、a[]の値をfor文で順に見ていって
もし最大値や最小値と同じ値が見つかったら、その要素番号を出力します。
何回かfor文を実行する必要がありますが参考までに。


その他、プログラムの手直しを少々。
int j;
が宣言されていない。

i = 0;
while(i <5){
    //省略
    i++;
}
はfor文にしたほうが構造的にいいかなと。

max_num = i;
b[i] = max_num;
↓
b[i] = i;
と同じ意味。c[]では直ってますね。

ではがんばってください。
配列に慣れるとプログラムの幅が広がります。




この投稿にコメントする

削除パスワード

No.18774

Re:最大、最小をとり要素番号も表示する方法
投稿者---爆発(2004/12/17 00:19:13)


なんとか完成させることができました!
色々ヒントくださりありがとうございました。
本当にお世話になりました。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧