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

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

 詳しくはこちら



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

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


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

No.20916

最頻値について
投稿者---木なし(2005/05/04 22:27:06)


最頻値って数字の領域がたくさんあるときはどのようにカウントしていけばいいのですか?


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:最頻値について 20919 Blue 2005/05/04 22:34:24


No.20919

Re:最頻値について
投稿者---Blue(2005/05/04 22:34:24)


>最頻値って数字の領域がたくさんあるときはどのようにカウントしていけばいいのですか?
これだけじゃ、望むような解答は得られない思いますが。

※環境(OSとコンパイラ)や症状は具体的に詳しく!

>数字の領域
具体的な範囲はどれくらいですか?
>最頻値
全体でどれくらいのサンプル数なのでしょうか?



この投稿にコメントする

削除パスワード

No.20922

Re:最頻値について
投稿者---魔裟十(2005/05/04 22:40:41)


数値は0から100などの間で、OSはウインドウズXPのVisual C++です。


この投稿にコメントする

削除パスワード

No.20924

Re:最頻値について
投稿者---Blue(2005/05/04 22:47:42)


それならば、一般的な方法としては、
int型(サンプル数により型は変更可)の配列を101個用意して、
その添え字の要素に+1づつするのだと思います。

例)
int nAppearance[ 101 ] = { 0 };

/* 1が出現したら */
nAppearance[ 1 ]++;



この投稿にコメントする

削除パスワード

No.20925

Re:最頻値について
投稿者---魔裟十(2005/05/04 22:53:16)


その場合、繰り返し入力が100回などたくさんの入力をする場合どうすればいいのですか?


この投稿にコメントする

削除パスワード

No.20929

Re:最頻値について
投稿者---Blue(2005/05/04 23:07:24)


>その場合、繰り返し入力が100回などたくさんの入力をする場合どうすればいいのですか?
int nAppearance[ 101 ] = { 0 };
int i;
int nInput;

/* 100の入力 */
for ( i = 0; i < 100; i++ )
{
    /* 入力された値を取得 */
    nInput = ○○○○○○;
    /* 入力された値の添え字の要素をカウントアップ */
    nAppearance[ nInput ]++;
}

/* 最頻値を検索 */

てナ感じになるでしょう。

入力して値を得るところは数字で且つ0〜100の間であることを注意します。(そこは考えてください。)
最頻値の検索は、101の配列の中から一番大きな値を持っている添え字(インデックス)のものになります。
(そこのロジックは簡単なので考えてください。)


すこしは、考えたことを示してください。
この掲示板は、
こうするにはどうすればいいですか?→○○します。
ではああするにはどうすればいいですか?→□□します。
というような、サポートセンターのようなところではないのです。
(他の人にとっては丸投げしていると捕らえられます。)



この投稿にコメントする

削除パスワード

No.20930

Re:最頻値について
投稿者---Ban(2005/05/04 23:09:40)


>その場合、繰り返し入力が100回などたくさんの入力をする場合どうすればいいのですか?

何も変わらないと思いますが、
100回なら100回ループすればいいのでは?
# ループ回数などは入力条件によります。




この投稿にコメントする

削除パスワード

No.20966

Re:最頻値について
投稿者---まきじ(2005/05/06 10:51:19)


#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define N 100

unsigned int InputNum(void);

int main(void){

    int bin[N + 1] = {0};
    unsigned int num;
    int i;
    int max = 0;
    
    while(num = InputNum() , num >= 0 && num <= N) bin[num]++;
    
    for(i = 0; i < N + 1; i++){
        if(bin[max] < bin[i]) max = i;
    } 
    
    printf("%d:%d\n",max,bin[max]);
    
    return 0;
}

unsigned int InputNum(void){

    char str[10];
    char *p;
    
    while(printf("0 〜 %d の数字を入力(終了は %d 以上):",N,N+1), 
            fgets(str,10,stdin) != NULL){
                if(*str >= '0' && *str <= '9') break;
    }
    
    p = strchr(str,'\n');
    if(p) *p = '\0';
    
    return atoi(str);
}




この投稿にコメントする

削除パスワード

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