玻璃种类的判断(精确决策)

#include<bits/stdc++.h>
using namespace std;

//玻璃的存储定义
typedef struct
{
    string str;
    //14种化合物
    double Sio2;
    double Na2O;
    double K2O;
    double CaO;
    double MgO;
    double AI2O3;
    double Fe2O3;
    double CuO;
    double PbO;
    double BaO;
    double P2O5;
    double SrO;
    double SnO2;
    double SO2;

} Element;

Element  input[8];                 //定义存储表单3的数组
Element FGGlass;                 //定义风化高钾玻璃
Element FQGlass;                 //定义风化铅钡玻璃
Element WGGlass;                //定义无风化高钾玻璃
Element WQGlass;                //定义无风化铅钡玻璃

double GJCnt = 0.0;
double QBCnt = 0.0;

void initF();
void initW();
void inputThreeTable(Element in[]);        //输入表单3的数据
void outputThreeTable(Element in[]);     //输出表单3的数据
void decision(Element in[]);
void statisticF(Element t);
void statisticW(Element t);

void initF()    //初始化风化玻璃的化合物含量
{
    FGGlass.Sio2 = 94.56;
    FGGlass.Na2O = 0;
    FGGlass.K2O = 0.505;
    FGGlass.CaO = 0.935;
    FGGlass.MgO = 0.32;
    FGGlass.AI2O3 = 2.155;
    FGGlass.Fe2O3 = 0.26;
    FGGlass.CuO = 1.895;
    FGGlass.PbO = 0;
    FGGlass.BaO = 0;
    FGGlass.P2O5=0.305;
    FGGlass.SrO = 0;
    FGGlass.SnO2 = 0;
    FGGlass.SO2 = 0;

    FQGlass.Sio2 = 28.525;
    FQGlass.Na2O=1.11;
    FQGlass.K2O = 0.525;
    FQGlass.CaO = 2.48;
    FQGlass.MgO = 1.365;
    FQGlass.AI2O3 = 7.05;
    FQGlass.Fe2O3 = 1.37;
    FQGlass.CuO = 5.285;
    FQGlass.PbO = 42.96;
    FQGlass.BaO = 17.725;
    FQGlass.P2O5=7.065;
    FQGlass.SrO = 0.56;
    FQGlass.SnO2 = 0.655;
    FQGlass.SO2 = 7.975;
}

void initW()    //初始化非风化玻璃的化合物含量
{
    WGGlass.Sio2=73.03;
    WGGlass.Na2O=2.74;
    WGGlass.K2O=9.86;
    WGGlass.CaO=5.36;
    WGGlass.MgO=1.25;
    WGGlass.AI2O3=7.10;
    WGGlass.Fe2O3=3.23;
    WGGlass.CuO=2.78;
    WGGlass.PbO=1.43;
    WGGlass.BaO=1.43;
    WGGlass.P2O5=2.33;
    WGGlass.SrO=0.08;
    WGGlass.SnO2=2.36;
    WGGlass.SO2=0.42;

    WQGlass.Sio2=53.725;
    WQGlass.Na2O=3.96;
    WQGlass.K2O=0.355;
    WQGlass.CaO=2.31;
    WQGlass.MgO=0.835;
    WQGlass.AI2O3=7.88;
    WQGlass.Fe2O3=2.295;
    WQGlass.CuO=4.23;
    WQGlass.PbO=23.52;
    WQGlass.BaO=14.13;
    WQGlass.P2O5=3.17;
    WQGlass.SrO=0.455;
    WQGlass.SnO2=0.22;
    WQGlass.SO2=1.83;
}

void inputThreeTable(Element in[])      //输入表单3的数据
{
    for(int i=0; i<8; i++)
    {
        cin>>in[i].str;
        cin>>in[i].Sio2>>in[i].Na2O>>in[i].K2O;
        cin>>in[i].CaO>>in[i].MgO>>in[i].AI2O3;
        cin>>in[i].Fe2O3>>in[i].CuO>>in[i].PbO;
        cin>>in[i].BaO>>in[i].P2O5>>in[i].SrO;
        cin>>in[i].SnO2>>in[i].SO2;
    }
}

void outputThreeTable(Element in[])  //输出表单3的数据
{
    for(int i=0; i<8; i++)
    {
        cout<<in[i].str<<" ";
        cout<<in[i].Sio2<<" "<<in[i].Na2O<<" "<<in[i].K2O
            <<" "<<in[i].CaO<<" "<<in[i].MgO<<" "<<in[i].AI2O3
            <<" "<<in[i].Fe2O3<<" "<<in[i].CuO<<" "<<in[i].PbO
            <<" "<<in[i].BaO<<" "<<in[i].P2O5<<" "<<in[i].SrO
            <<" "<<in[i].SnO2<<" "<<in[i].SO2<<endl;
    }
}

void decision(Element in[])     //决策函数
{
    for(int i=0; i<8; i++)
    {
        //初始化
        GJCnt = 0;
        QBCnt = 0;
        //统计
        if(in[i].str == "风化")
            statisticF(in[i]);
        else
            statisticW(in[i]);
        //决策
        string s =  GJCnt > QBCnt ? "高钾玻璃" : "铅钡玻璃";
        //输出
        cout<<"A"<<(i+1)<<" = "<<s<<endl;
    }
}

void statisticF(Element t)      //统计风化的数据
{
    //SiO2
    if(fabs(t.Sio2-FGGlass.Sio2) < fabs(t.Sio2-FQGlass.Sio2))
        GJCnt += 0.9433;
    if(fabs(t.Sio2-FGGlass.Sio2) > fabs(t.Sio2-FQGlass.Sio2))
        QBCnt += 0.3464;
    //Na2O
    if(fabs(t.Na2O-FGGlass.Na2O) < fabs(t.Na2O-FQGlass.Na2O))
        GJCnt += 0;
    if(fabs(t.Na2O-FGGlass.Na2O) > fabs(t.Na2O-FQGlass.Na2O))
        QBCnt += 0.0321;
    //K2O
    if(fabs(t.K2O-FGGlass.K2O) < fabs(t.K2O-FQGlass.K2O))
        GJCnt += 0.0082;
    if(fabs(t.K2O-FGGlass.K2O) > fabs(t.K2O-FQGlass.K2O))
        QBCnt += 0.0040;
    //CaO
    if(fabs(t.CaO-FGGlass.CaO) < fabs(t.CaO-FQGlass.CaO))
        GJCnt += 0.0087;
    if(fabs(t.CaO-FGGlass.CaO) > fabs(t.CaO-FQGlass.CaO))
        QBCnt += 0.0262;
    //MgO
    if(fabs(t.MgO-FGGlass.MgO) < fabs(t.MgO-FQGlass.MgO))
        GJCnt += 0.0059;
    if(fabs(t.MgO-FGGlass.MgO) > fabs(t.MgO-FQGlass.MgO))
        QBCnt += 0.0112;
    //AI2O3
    if(fabs(t.AI2O3-FGGlass.AI2O3) < fabs(t.AI2O3-FQGlass.AI2O3))
        GJCnt += 0.0194;
    if(fabs(t.AI2O3-FGGlass.AI2O3) > fabs(t.AI2O3-FQGlass.AI2O3))
        QBCnt += 0.0397;
    //Fe2O3
    if(fabs(t.Fe2O3-FGGlass.Fe2O3) < fabs(t.Fe2O3-FQGlass.Fe2O3))
        GJCnt += 0.0027;
    if(fabs(t.Fe2O3-FGGlass.Fe2O3) > fabs(t.Fe2O3-FQGlass.Fe2O3))
        QBCnt += 0.0104;
    //CuO
    if(fabs(t.CuO-FGGlass.CuO) < fabs(t.CuO-FQGlass.CuO))
        GJCnt += 0.0157;
    if(fabs(t.CuO-FGGlass.CuO) > fabs(t.CuO-FQGlass.CuO))
        QBCnt += 0.0218;
    //PbO
    if(fabs(t.PbO-FGGlass.PbO) < fabs(t.PbO-FQGlass.PbO))
        GJCnt += 0;
    if(fabs(t.PbO-FGGlass.PbO) > fabs(t.PbO-FQGlass.PbO))
        QBCnt += 0.3804;
    //BaO
    if(fabs(t.BaO-FGGlass.BaO) < fabs(t.BaO-FQGlass.BaO))
        GJCnt += 0;
    if(fabs(t.BaO-FGGlass.BaO) > fabs(t.BaO-FQGlass.BaO))
        QBCnt += 0.1175;
    //P2O5
    if(fabs(t.P2O5-FGGlass.P2O5) < fabs(t.P2O5-FQGlass.P2O5))
        GJCnt += 0.0034;
    if(fabs(t.P2O5-FGGlass.P2O5) > fabs(t.P2O5-FQGlass.P2O5))
        QBCnt += 0.0514;
    //SrO
    if(fabs(t.SrO-FGGlass.SrO) < fabs(t.SrO-FQGlass.SrO))
        GJCnt += 0;
    if(fabs(t.SrO-FGGlass.SrO) > fabs(t.SrO-FQGlass.SrO))
        QBCnt += 0.0042;
    //SnO2
    if(fabs(t.SnO2-FGGlass.SnO2) < fabs(t.SnO2-FQGlass.SnO2))
        GJCnt += 0;
    if(fabs(t.SnO2-FGGlass.SnO2) > fabs(t.SnO2-FQGlass.SnO2))
        QBCnt += 0.0062;
    //SO2
    if(fabs(t.SO2-FGGlass.SO2) < fabs(t.SO2-FQGlass.SO2))
        GJCnt += 0;
    if(fabs(t.SO2-FGGlass.SO2) > fabs(t.SO2-FQGlass.SO2))
        QBCnt += 0.0915;
}

void statisticW(Element t)  //统计非风化的数据
{
    //SiO2
    if(fabs(t.Sio2-WGGlass.Sio2) < fabs(t.Sio2-WQGlass.Sio2))
        GJCnt +=  0.6925;
    if(fabs(t.Sio2-WGGlass.Sio2) > fabs(t.Sio2-WQGlass.Sio2))
        QBCnt +=  0.5784;
    //Na2O
    if(fabs(t.Na2O-WGGlass.Na2O) < fabs(t.Na2O-WQGlass.Na2O))
        GJCnt +=  0.0283;
    if(fabs(t.Na2O-WGGlass.Na2O) > fabs(t.Na2O-WQGlass.Na2O))
        QBCnt +=  0.0374;
    //K2O
    if(fabs(t.K2O-WGGlass.K2O) < fabs(t.K2O-WQGlass.K2O))
        GJCnt +=  0.1037;
    if(fabs(t.K2O-WGGlass.K2O) > fabs(t.K2O-WQGlass.K2O))
        QBCnt +=  0.0026;
    //CaO
    if(fabs(t.CaO-WGGlass.CaO) < fabs(t.CaO-WQGlass.CaO))
        GJCnt +=  0.0652;
    if(fabs(t.CaO-WGGlass.CaO) > fabs(t.CaO-WQGlass.CaO))
        QBCnt +=  0.0122;
    //MgO
    if(fabs(t.MgO-WGGlass.MgO) < fabs(t.MgO-WQGlass.MgO))
        GJCnt +=  0.0132;
    if(fabs(t.MgO-WGGlass.MgO) > fabs(t.MgO-WQGlass.MgO))
        QBCnt +=  0.0103;
    //AI2O3
    if(fabs(t.AI2O3-WGGlass.AI2O3) < fabs(t.AI2O3-WQGlass.AI2O3))
        GJCnt +=  0.0674;
    if(fabs(t.AI2O3-WGGlass.AI2O3) > fabs(t.AI2O3-WQGlass.AI2O3))
        QBCnt +=  0.0447;
    //Fe2O3
    if(fabs(t.Fe2O3-WGGlass.Fe2O3) < fabs(t.Fe2O3-WQGlass.Fe2O3))
        GJCnt +=  0.0236;
    if(fabs(t.Fe2O3-WGGlass.Fe2O3) > fabs(t.Fe2O3-WQGlass.Fe2O3))
        QBCnt +=  0.0146;
    //CuO
    if(fabs(t.CuO-WGGlass.CuO) < fabs(t.CuO-WQGlass.CuO))
        GJCnt +=  0.0273;
    if(fabs(t.CuO-WGGlass.CuO) > fabs(t.CuO-WQGlass.CuO))
        QBCnt +=  0.0157;
    //PbO
    if(fabs(t.PbO-WGGlass.PbO) < fabs(t.PbO-WQGlass.PbO))
        GJCnt +=  0.0072;
    if(fabs(t.PbO-WGGlass.PbO) > fabs(t.PbO-WQGlass.PbO))
        QBCnt +=  0.2110;
    //BaO
    if(fabs(t.BaO-WGGlass.BaO) < fabs(t.BaO-WQGlass.BaO))
        GJCnt +=  0.0146;
    if(fabs(t.BaO-WGGlass.BaO) > fabs(t.BaO-WQGlass.BaO))
        QBCnt +=  0.0930;
    //P2O5
    if(fabs(t.P2O5-WGGlass.P2O5) < fabs(t.P2O5-WQGlass.P2O5))
        GJCnt +=  0.0156;
    if(fabs(t.P2O5-WGGlass.P2O5) > fabs(t.P2O5-WQGlass.P2O5))
        QBCnt +=  0.0160;
    //SrO
    if(fabs(t.SrO-WGGlass.SrO) < fabs(t.SrO-WQGlass.SrO))
        GJCnt +=  0.0008;
    if(fabs(t.SrO-WGGlass.SrO) > fabs(t.SrO-WQGlass.SrO))
        QBCnt +=  0.0039;
    //SnO2
    if(fabs(t.SnO2-WGGlass.SnO2) < fabs(t.SnO2-WQGlass.SnO2))
        GJCnt +=  0.0240;
    if(fabs(t.SnO2-WGGlass.SnO2) > fabs(t.SnO2-WQGlass.SnO2))
        QBCnt +=  0.0024;
    //SO2
    if(fabs(t.SO2-WGGlass.SO2) < fabs(t.SO2-WQGlass.SO2))
        GJCnt +=  0.0041;
    if(fabs(t.SO2-WGGlass.SO2) > fabs(t.SO2-WQGlass.SO2))
        QBCnt +=  0.0375;
}

int main()
{
    //分类玻璃化合物数据初始化
    initW();
    initF();
    //重定向
    freopen("in.txt","r",stdin);
    //输入
    inputThreeTable(input);
    //输出
    cout<<"输入数据如下:"<<endl;
    outputThreeTable(input);
    //决策
    cout<<"******************************************************************"<<endl;
    decision(input);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值