📄 cell.cpp
字号:
#include <iostream>
#include<fstream>
using namespace std;
double u;
int m,n;
int f(int a,int b,int c,int d,double*power,double val)
{ if((a*power[0]+b*power[1]+c*power[2]+d*power[3]-val)>=0)
return 1;
else
return -1;
}//f函数计算第一种编码的输出值。
int ff(int a,int b,int c,int d,int e,int f,int g,int h,double*power,double val)
{
if((a*power[0]+b*power[1]+c*power[2]+d*power[3]+e*power[4]+f*power[5]+g*power[6]+h*power[7]-val)>=0)
return 1;
else
return -1;
}//ff函数计算第二种编码的输出值。
double change(double power,double u,int teach,int y,int x)
{
power=power+2*u*(teach-y)*x;
return power;
}//change函数用于修正权重。
int main()
{
int brand[20];
int atti[20];
int per[20];
int park[20];
int gendar[20];
int park1[10][20];//相对于第二种编码
int brand1[10][20];//相对于第二种编码
ifstream input;
int a;
cout<<"请输入编码方式,1or2:";
cin>>a;
/*由用户输入选择编码形式,若输入1则从文件input.txt中读取数据,2从in.txt,其他数字返回错误。*/
if(a==2)
input.open("in.txt");
else if(a==1)input.open("input.txt");
else {cout<<"输入方式错误!"<<endl;return 0;}
input>>m>>n>>u;
int i=0;
//相对2种不同编码读取数据。
if(a==1)
while(input>>brand[i]>>per[i]>>atti[i]>>park[i]>>gendar[i]) i++;
else if(a==2)
while(input>>brand1[i][0]>>brand1[i][1]>>brand1[i][2]>>per[i]>>atti[i]>>park1[i][0]>>park1[i][1]>>park1[i][2]>>gendar[i]) i++;
double power[20]={1.0};
double val=1.0;
bool loop=true;
int k=0;
int test=0;
/*对每个不满足条件的权重进行修正,然后重新计算所有样本。*/
while(loop)
{
int temp;
//相对2种不同编码执行不同操作。
if(a==1){
temp=f(brand[k],per[k],atti[k],park[k],power,val);
while(temp!=gendar[k])
{
test=0;
power[0]=change(power[0],u,gendar[k],temp,brand[k]);
power[1]=change(power[1],u,gendar[k],temp,per[k]);
power[2]=change(power[2],u,gendar[k],temp,atti[k]);
power[3]=change(power[3],u,gendar[k],temp,park[k]);
val=val-2*u*(temp-gendar[k]);
temp=f(brand[k],per[k],atti[k],park[k],power,val);
}
}//第一种仅计算4个权重。
else if(a==2)
{
temp=ff(brand1[k][0],brand1[k][1],brand1[k][2],per[k],atti[k],park1[k][0],park1[k][1],park1[k][2],power,val);
while(temp!=gendar[k])
{
test=0;
power[0]=change(power[0],u,gendar[k],temp,brand1[k][0]);
power[1]=change(power[1],u,gendar[k],temp,brand1[k][1]);
power[2]=change(power[2],u,gendar[k],temp,brand1[k][2]);
power[3]=change(power[3],u,gendar[k],temp,per[k]);
power[4]=change(power[4],u,gendar[k],temp,atti[k]);
power[5]=change(power[5],u,gendar[k],temp,park1[k][0]);
power[6]=change(power[6],u,gendar[k],temp,park1[k][1]);
power[7]=change(power[7],u,gendar[k],temp,park1[k][2]);
val=val-2*u*(temp-gendar[k]);
temp=ff(brand1[k][0],brand1[k][1],brand1[k][2],per[k],atti[k],park1[k][0],park1[k][1],park1[k][2],power,val);
}
}//第二种则计算8个。
test++;
k++;
k=k%n;
if(test==n)
loop=false;
}
ofstream output;
if(a==1) output.open("output.txt");
else output.open("out.txt");
output<<"power is as below:"<<endl;
for(int i=0;i<m;i++)
output<<power[i]<<endl;
output<<"value is as below:"<<endl;
output<<val<<endl;
input.close();
output.close();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -