c++ - 直方图计算程序

标签 c++ histogram

#include <iostream>
#include <math.h>

using namespace std;

int main()
{
    int arraylength;
    int lastbig = 0;
    int lastsmall = 0;
    int temp = 0;
    int numofgroups = 0;
    double gg = 0;
    cout<<"Enter the number of numbers you are going to enter "<<endl;
    cin>>arraylength;
    int data[arraylength];
    for(int ahmet = 0;ahmet < arraylength;ahmet++)
    {
         cout<<"Enter the num no."<<ahmet+1<<endl;
         cin>>data[ahmet];
    }
    for(int bbm = 0;bbm < arraylength;bbm++)
    {
            if(data[bbm]>lastbig)
            {        
                     lastbig = data[bbm];
            }
    }
    cout<<"Biggest "<<lastbig<<endl;
    for(int ddr = 0;ddr < arraylength;ddr++)
    {
            if(data[ddr]<lastbig && lastsmall == 0)
            {
                 lastsmall = data[ddr];
            }
            else if(data[ddr]<lastsmall)
            {
                 lastsmall = data[ddr];
            }
    }
    cout<<"smallest "<<lastsmall<<endl;
    temp = lastbig-lastsmall;
    cout<<"Enter the number of groups you want"<<endl;
    cin>>numofgroups;
    gg = (double)temp/numofgroups;
    cout<<"gg ="<<gg;
    gg = ceil(gg);
    cout<<"gg ="<<gg<<endl;
    int z = 0;
    int lastnumleft = 0;
    struct groups {
           int min;
           int max;
           int membercount;
           }group[numofgroups];
           int tmp = lastsmall;
    for(int dinghy = 0;dinghy<numofgroups;dinghy++)
    {
        if(dinghy == 0)
        {
             group[dinghy].min = tmp;
             group[dinghy].max = tmp + ((int)gg - 1);
             tmp = tmp + (int)gg;
        }
        else{
                 group[dinghy].min = tmp;
                 group[dinghy].max = tmp+((int)gg-1);
                 tmp = tmp + (int)gg;
                 }
    }
    for(int jpn = 0;jpn<numofgroups;jpn++)
    {
        for(int mtr = 0;mtr<arraylength;mtr++)
        {
            if(data[mtr]>group[jpn].min&&data[mtr]<group[jpn].max)
            {
                group[jpn].membercount++;
            }                                                                 
        }
    }
    for(int dingil = 0;dingil<numofgroups;dingil++)
    {
        if(!group[dingil].membercount){
        group[dingil].membercount = 0;
        }
    }
    for(int xyz = 0;xyz<numofgroups;xyz++)
    {
            cout<<group[xyz].min<<" - "<<group[xyz].max<<" "<<group[xyz].membercount<<endl;
    }
    cin.ignore();
    cin.get();
    return 0;
}

该程序实际上进行了制作组的直方图成员计数和数字的最小值最大值所需的计算,但我无法对数字进行分组,你能帮我吗:)

最佳答案

#include <iostream>
#include <math.h>

using namespace std;

int main()
{
    int arraylength;
    int lastbig = 0;
    int lastsmall = 0;
    int temp = 0;
    int numofgroups = 0;
    double gg = 0;
    cout<<"Enter the number of numbers you are going to enter "<<endl;
    cin>>arraylength;
    int *data = new int[arraylength];
    for(int ahmet = 0;ahmet < arraylength;ahmet++)
    {
        cout<<"Enter the num no."<<ahmet+1<<endl;
        cin>>data[ahmet];
    }

    for(int bbm = 0;bbm < arraylength;bbm++)
    {
        if(data[bbm]>lastbig)
        {        
                 lastbig = data[bbm];
        }
    }
    cout<<"Biggest "<<lastbig<<endl;

    for(int ddr = 0;ddr < arraylength;ddr++)
    {
        if(data[ddr]<lastbig && lastsmall == 0)
        {
             lastsmall = data[ddr];
        }
        else if(data[ddr]<lastsmall)
        {
             lastsmall = data[ddr];
        }
    }

    cout<<"smallest "<<lastsmall<<endl;
    temp = lastbig-lastsmall;
    cout<<"Enter the number of groups you want"<<endl;
    cin>>numofgroups;
    gg = (double)temp/numofgroups;
    cout<<"gg ="<<gg;
    gg = ceil(gg);
    cout<<"gg ="<<gg<<endl;
    int z = 0;
    int lastnumleft = 0;

    struct groups {
           int min;
           int max;
           int membercount;
    }*group;

    group = new groups[numofgroups];
    int tmp = lastsmall;

    for(int dinghy = 0;dinghy<numofgroups;dinghy++)
    {
        if(dinghy == 0)
        {
            group[dinghy].min = tmp;
            group[dinghy].max = tmp + ((int)gg - 1);
            tmp = tmp + (int)gg;
        }
        else
        {
             group[dinghy].min = tmp;
             group[dinghy].max = tmp+((int)gg-1);
             tmp = tmp + (int)gg;
        }
    }

    for(int jpn = 0;jpn<numofgroups;jpn++)
    {

 //need to initialize as it has some garbage value and that is what it is printing out.  

        group[jpn].membercount = 0;

        for(int mtr = 0;mtr<arraylength;mtr++)
        {

 // note the equalities as you need to include the first and the last numbers

            if(data[mtr]>=group[jpn].min&&data[mtr]<=group[jpn].max)
            { 
               group[jpn].membercount++;
            }                                                                 
        }
    }
    for(int dingil = 0;dingil<numofgroups;dingil++)
    {
        if(!group[dingil].membercount){
            group[dingil].membercount = 0;
        }
    }

    for(int xyz = 0;xyz<numofgroups;xyz++)
    {
        cout<<group[xyz].min<<" - "<<group[xyz].max<<" "<<group[xyz].membercount<<endl;
    }
    cin.ignore();
    cin.get();
    return 0;
}

现在可以正常工作了:)

关于c++ - 直方图计算程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7428657/

相关文章:

c++ - tr ("\302\261") 在Qt中是什么意思?

c++ - 带有 bool 逻辑的单个返回是否等同于保护子句?

c++ - 为什么括号在初始化空 vector 时会有所不同?

c++ - 编写一个程序,生成 0-99 范围内的 10000 个随机整数,并根据随机数据生成直方图

java - 在jFreeChart直方图中配置两个范围轴

C++ std::unique_ptr 存储在 std::map 中使用已删除的函数格式错误

c++ - 需要在 Codeblocks 中启用 C++11

r - ggplot2 密度直方图,宽度 =.5,vline 和中心条位置

python - plt.hist 显示 preprocessing.normalize 后奇怪的图

c++ - 如何加快LUT查找的直方图?