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 次。

4

2 回答 2

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 次。

按任意键继续 。. .

于 2012-12-07T22:23:07.723 回答
0

2 x if (y[j][1] = max)- 类似于 (match = false) 问题 - 此时max为 2,因此任何值都被 2 覆盖。

第一列的问题听起来像是由于match = false问题造成的。修复并重新编译后是否仍然出现?

于 2012-12-07T01:30:26.643 回答