我必须编写一个函数来查找类的值数组的模式。它需要两个参数:值数组和一个等于数组中有效值数的变量。这听起来很容易,但经过一周的尝试后,我的代码似乎无法工作。
我们的想法是采用一维数组并将其存储在二维数组中,其中第一个值是值数组中的值,第二个值是值发生的次数。到目前为止,它不是很正常,或根本没有。问题感觉应该是显而易见的,但我已经被困了一个星期。
我正在使用包含以下内容的数组对其进行测试: 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次。
答案 0 :(得分:0)
2 x if (y[j][1] = max)
- 与(match = false)问题类似 - 此时max
为2,因此值将被2覆盖。
第一列的问题听起来像是由match = false
问题引起的。修复它并重新编译后它仍然存在吗?
答案 1 :(得分:0)
修正了它。我把这里写的主要功能包含在这里。
Input1.txt: 9.0,4.0,4.0,4.0,4.0,4.0,5.0,5.0,6.0,6.0,6.0,6.0,6.0,6.0,7.0,1.0,9.0,10.0,4.0,-9999
我将一些=
更改为==
并修复了其中一个for循环中的数学错误,现在我看起来似乎是......金色。 Aurum est potestas。 :d
#include <iostream>
#include <cstdlib>
#include <fstream>
void mode(double x[], const int n);
using namespace std;
int main()
{
const int N = 100;
double x[N];
void mode (double x[],int n);
int n;
ifstream inFile;
inFile.open("input1.txt");
n=0;
inFile>>x[n];
while (x[n]!=-9999)
{
n++;
inFile >>x[n];
}
inFile.close( );
mode(x,n);
inFile.open("input2.txt");
n=0;
inFile >>x[n];
while (x[n]!=-9999)
{
n++;
inFile >>x[n];
}
inFile.close( );
mode(x,n);
inFile.open("input3.txt");
n=0;
inFile >>x[n];
while (x[n]!=-9999)
{
n++;
inFile >>x[n];
}
inFile.close( );
mode(x,n);
system ("PAUSE");
return 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;
for(p=0;p<=n-1;p++)
{
y[p][0] = x[p];
y[p][1]++;
}
for(j=1; j<=(n-1); j++)
{
for (k=0; k<=m; k++)
if (x[j] == y[k][0])
{
y[k][1]++;
match = true;
cout<<y[k][0]<<" "<<y[k][1]<<endl;
}
if (match == true)
{
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++;
}
cout<<"There are "<<numofmodes<< " modes in the data set."<<endl;
for(j=0; j<=(n-1); j++)
{
if (y[j][1] == max)
{
cout<<"The number "<<y[j][0]<<" appears "<<max<<" times."<<endl;
}
}
cout<<endl;
}
输出: 数据集中有2种模式。 数字4出现6次。 数字6出现6次。
数据集中有2种模式。 数字2出现3次。 数字5出现3次。
数据集中有4种模式。 数字1出现2次。 数字7出现2次。 数字19出现2次。 数字30出现2次。
按任意键继续。 。