miss_value.cpp
来自「某个实验事编写粗糙集智能信息处理的程序」· C++ 代码 · 共 218 行
CPP
218 行
// Miss_Value.cpp: implementation of the Miss_Value class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "../rset.h"
#include "Miss_Value.h"
#include "fstream.h"
#include <time.h>
#include "../MissRatedlg.h"
#include "iomanip.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
Miss_Value::Miss_Value()
{
pNum=new int[2];
}
Miss_Value::~Miss_Value()
{
for(int i=0;i<Rec_Num;i++){
delete[] pIS[i];
}
delete[] pIS;
//delete[] pDecis;
delete[] pNum;
for(int m=0;m<ConAttrNum+1;m++)
{
delete[] ConName[m];
delete[] ConType[m];
}
delete[] ConType;
delete[] ConName;
}
bool Miss_Value::InitIS(char *filename)
{
ifstream ReadFile;
ReadFile.open(filename,ios::in);
char buf[256];
ReadFile.getline(buf,256);
ReadFile.getline(buf,256);
ReadFile.getline(buf,256,':');
ReadFile>>ConAttrNum;// 读入条件属性数目
ReadFile.getline(buf,256,':');
ReadFile>>Rec_Num;//读入记录数
pIS=new int * [Rec_Num];
for(int i=0;i<Rec_Num;i++)
{
pIS[i]=new int [ConAttrNum];
}
pDecis=new int[Rec_Num];
ConName= new char*[ConAttrNum+1];
ConType= new char*[ConAttrNum+1];
for(i=0;i<ConAttrNum+1;i++)
{
ConName[i]=new char[20];
ConType[i]=new char[20];
}
for(i=0;i<ConAttrNum+1;i++)
ReadFile>>ConName[i];
for(i=0;i<ConAttrNum+1;i++)
ReadFile>>ConType[i];
char GetVal[6];
for(i=0;i<Rec_Num;i++)
{
for(int j=0;j<ConAttrNum;j++){
ReadFile>>GetVal;
if(strcmp(GetVal,"-")==0){
pIS[i][j]=-1;
}else{
pIS[i][j]=atoi(GetVal);
}
}
ReadFile>>pDecis[i];
}
ReadFile.close();
return true;
}
bool Miss_Value::perform(char* FileNameIn,char* FileNameOut)
{
int i,j,k;
ifstream ReadFile;
ReadFile.open(FileNameIn,ios::in);
if(ReadFile==0)
{
::AfxMessageBox("File Open error!");
return false;
}
char buf[256];
ReadFile.getline(buf,256,':');
ReadFile>>Style;
ReadFile.getline(buf,256,':');
ReadFile>>Stage;
ReadFile.getline(buf,256,':');
ReadFile>>ConAttrNum;// 读入条件属性数目
ReadFile.getline(buf,256,':');
ReadFile>>Rec_Num;//读入记录数
pIS=new int * [Rec_Num];
for(i=0;i<Rec_Num;i++)
{
pIS[i]=new int [ConAttrNum];
for(int k=0;k<ConAttrNum;k++)
pIS[i][k]=0;
}
// pDecis=new int[Rec_Num];//决策值
ConName= new char*[ConAttrNum+1];
ConType= new char*[ConAttrNum+1];
for(i=0;i<ConAttrNum+1;i++)
{
ConName[i]=new char[20];
ConType[i]=new char[20];
}
for(i=0;i<ConAttrNum+1;i++)
ReadFile>>ConName[i];
for(i=0;i<ConAttrNum+1;i++)
ReadFile>>ConType[i];
float MissRate;
if (! GetMissRate(&MissRate) )
return false;
int SumValue=Rec_Num*ConAttrNum;
int MissValue=int(SumValue*MissRate );
srand(unsigned (time(NULL)));
// the value of rand() is different every time when you run the programer
for(k=0;k<MissValue;k++){
i=int((float(rand())/float(RAND_MAX))*(Rec_Num));
j=int((float(rand())/float(RAND_MAX))*(ConAttrNum));
pIS[i][j]=-1;
}
fstream WriteFile;
WriteFile.open(FileNameOut,ios::out);
if(!WriteFile)
{
::AfxMessageBox("File Open error!");
return false;
}
WriteFile<<"Style:train"<<endl;
WriteFile<<"Stage:0"<<endl;
WriteFile<<"Condition attributes number:";
WriteFile<<ConAttrNum<<endl;
WriteFile<<"Records number:";
WriteFile<<Rec_Num<<endl;
for(i=0;i<ConAttrNum;i++) //写属性名称
WriteFile<<ConName[i]<<' ';
WriteFile<<ConName[ConAttrNum]<<'\n';
for(i=0;i<ConAttrNum;i++) //写数据类型
WriteFile<<ConType[i]<<' ';
WriteFile<<ConType[ConAttrNum]<<'\n';
for(i=0;i<Rec_Num;i++)
{
for(j=0;j<ConAttrNum;j++){
char *aa=new char[20];
ReadFile>>aa;
if(pIS[i][j]==-1)
WriteFile<<'-'<<" ";
else{
// if ((0==stricmp(ConType[j],"Float"))||
// (0==stricmp(ConType[j],"String")))
WriteFile<<aa<<" ";
// else if(0==stricmp(ConType[j],"Integer"))
// WriteFile<<aa<<" ";
delete []aa;
}
}
char *aa=new char[20];
ReadFile>>aa;
WriteFile<<" "<<aa;
delete[] aa;
WriteFile<<endl;
}
ReadFile.getline(buf,256);
//cuts
while(! ReadFile.eof())
{
ReadFile.getline(buf,256);
WriteFile<<buf<<endl;
}
ReadFile.close();
WriteFile.close();
return true;
}
bool Miss_Value::GetMissRate(float* missrate)
{
CMissRateDlg dlg;
if(dlg.DoModal()==IDOK)
{
*missrate=dlg.m_fRate;
return true;
}
else
return false;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?