クラスの値の配列のモードを見つける関数を作成する必要があります。値の配列と、配列内の有効な値の数に等しい変数の 2 つの引数を取ります。簡単そうに思えましたが、1 週間試してみたところ、自分のコードが機能していないように思えます。
アイデアは、1 次元配列を取得して 2 次元配列に格納することです。最初の値は値の配列からの値であり、2 番目の値はその値が発生する回数です。これまでのところ、まったく正しく機能していないか、まったく機能していません。問題は明らかであるように感じますが、私は 1 週間困惑しています。
次を含む配列でテストしています:9.0、4.0、4.0、4.0、5.0、5.0、6.0、6.0、6.0、7.0、1.0、9.0、10.0
コード:
void mode(double x[], const int n)
{
int j, k, m=1, p, numofmodes=0;
bool match=false, breaker;
double y[100][2]={0}, max=0;
y[0][0] = x[0];
y[0][1] = 1;
for(j=1; j<=(n-1); j++) //
{
for (k=0; k<=(m-1); k++)
if (x[j] == y[k][0])
{
y[k][1]++;
match = true;
}
if (match == false)
{
y[m][0] = x[j];
y[m][1] = 1;
m++;
}
match = false;
}
for(j=0; j<=(n-1); j++)
{
if (y[j][1] > max)
max = y[j][1];
}
for(j=0; j<=(n-1); j++)
{
if (y[j][1] = max)
numofmodes++;
}
for(j=0; j<=(n-1); j++)
{
cout<<y[j][0]<<" "<<y[j][1]<<endl;
}
cout<<"There are "<<numofmodes<< " modes in the data set."<<endl;
for(j=0; j<=(n-1); j++)
{
if (y[j][1] = max)
{
cout<<y[j][0]<<" appears "<<max<<" times."<<endl;
}
}
}
出力: 9 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 データ セットには 13 のモードがあります。9は2回登場。0 が 2 回表示されます。0 が 2 回表示されます。0 が 2 回表示されます。0 が 2 回表示されます。0 が 2 回表示されます。0 が 2 回表示されます。0 が 2 回表示されます。0 が 2 回表示されます。0 が 2 回表示されます。0 が 2 回表示されます。0 が 2 回表示されます。0 が 2 回表示されます。