⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 liesamplerecognise.cpp

📁 某个实验事编写粗糙集智能信息处理的程序
💻 CPP
📖 第 1 页 / 共 4 页
字号:
		}
	
	return TRUE;
}

BOOL CLieSampleRecognise::SetAttName1(FILE* fp, int count,int *att,int atbcount)
{//有约简属性的时候读入属性名称 count:为属性个数.att为删除了的属性表;atbcount为删除了的属性个数
	TRACE("set att name\n");
	int i,j,k=0;
	if(pAttName == NULL)
	{//分配内存
		try
		{
			pAttName = new char*[count];
		}
		catch(CMemoryException* e)
		{
			TRACE("memeory error  1\n");
			::MessageBeep(MB_ICONHAND);
			AfxMessageBox("Out of the memory!",MB_OK|MB_ICONSTOP);
			e->Delete();
			return FALSE;
		}

		for(i=0;i < count;i++)
		{
			try
			{
				pAttName[i]=new char[MAX];
			}
			catch(CMemoryException* e)
			{
				::MessageBeep(MB_ICONHAND);
				AfxMessageBox("Out of the memory!",MB_OK|MB_ICONSTOP);
				e->Delete();
				return FALSE;
			}
		}//end for
	}//end if
	for(i=0;i < count;i++)
	{//
		for(j=0;j<atbcount;j++)
		{
			if(i!=atb[j])
				k++;
		}
		if(k==atbcount)//k不为删除了的属性
		     fscanf(fp,"%s",pAttName[i]);
	    else//否则设该属性为'*'
             strcpy(pAttName[i],"*");
		k=0;
	}
	return TRUE;
}

BOOL CLieSampleRecognise::SetDataType1(FILE *fp, int count,int *att,int atbcount)
{//设置数据类型 count:属性个数 att:删除了的属性表;atbcount:删除了的属性个数
	TRACE("SetDatType\n");
	int i,j,k=0;
	if(pDataType == NULL)
	{//分配内存
		try
		{
			pDataType = new char*[count];
		}
		catch(CMemoryException* e)
		{
			::MessageBeep(MB_ICONHAND);
			AfxMessageBox("Out of the memory!",MB_OK|MB_ICONSTOP);
			e->Delete();
			return FALSE;
		}
		for(i = 0;i < count;i++)
		{
			try
			{
				pDataType[i]=new char[MAX];
			}
			catch(CMemoryException* e)
			{
	   			::MessageBeep(MB_ICONHAND);
	   			AfxMessageBox("Out of the memory!",MB_OK|MB_ICONSTOP);
				e->Delete();
	   			return FALSE;
			}
		}//end for
	}//end if
	for(i=0;i < count;i++)
	{
		for(j=0;j<atbcount;j++)
		{
			if(i!=atb[j])
				k++;
		}
		if(k==atbcount)
		     fscanf(fp,"%s",pDataType[i]);
	    else
		 	strcpy(pDataType[i],"Float");
		k=0;
	}
	return TRUE;
}



int CLieSampleRecognise::GetIncompletion()
{//判断是否需要补齐  需要补齐:return 1; else return 0
	TRACE("GetIncompleteion\n");
	for(int i = 0;i < iRecordNum;i++)
	{
		for(int j = 0;j < iAttNum+1;j++)
		{
			if(strcmp(pStringTable[i][j],"?") == 0  || strcmp(pStringTable[i][j],"*") == 0
				|| strcmp(pStringTable[i][j],"-") == 0 )
				return 1;
		}
	}
	return 0;
}

int CLieSampleRecognise::GetDiscrete()
{
	TRACE("GetDiscrete\n");
	for(int i = 0;i < iAttNum;i++)
	{
		if(_stricmp(pDataType[i],"Float") == 0) 
			iFloat++;
		if(_stricmp(pDataType[i],"Integer") == 0)
			iInteger++;
		if(_stricmp(pDataType[i],"String") == 0)
			iChar++;
	}
	if(iFloat != 0 || iChar != 0)
		return 1;
	return 0;
}

BOOL CLieSampleRecognise::SetIntegerTable(int column, int row)
{//将整形值读入到pIntTable中  遗失值为-1;否则为对应整型
		TRACE("SetInitTable\n");
 //   AfxMessageBox("GHJGHJLGH'JH");
	int i,j;
	if(pIntTable == NULL)
	{
		try
		{
			pIntTable = new int*[row];
		}
		catch(CMemoryException* e)
		{
			::MessageBeep(MB_ICONHAND);
			AfxMessageBox("Out of memory2!",MB_OK|MB_ICONSTOP);
			e->Delete();
			return FALSE;
		}
		for(i = 0;i < row;i++)
		{
			try
			{
				pIntTable[i] = new int[column];
			}
			catch(CMemoryException* e)
			{
				::MessageBeep(MB_ICONHAND);
				AfxMessageBox("Out of memory3!",MB_OK|MB_ICONSTOP);
				e->Delete();
				return FALSE;
			}
		}//end for
	}//end if
	for(i = 0;i < row;i++)
	{
		for(j = 0;j < column;j++)
		{
			if(strcmp(pStringTable[i][j],"-") == 0)
				pIntTable[i][j] = -1;
			else
				pIntTable[i][j] = atoi(pStringTable[i][j]);
		}//end for(j)
	}//end for
	return TRUE;
}

BOOL CLieSampleRecognise::SetCutResult(FILE* fp)
{
	TRACE("Setcutresult\n");

	int n;
	int iColumn;
	int iCuts;
	struct CutRecord* pHead = NULL;
	struct CutRecord* pEnd = NULL;
	char* temp = new char[MAX];
	if(fscanf(fp,"%s",temp) == -1)
	{//文件结束,没有断点
		delete[] temp;
		return FALSE;
	}
	if(strcmp(temp,"[Cuts]") != 0)
	{
		delete[] temp;
		return FALSE;
	}

	bCuts = TRUE;
	while(fscanf(fp,"%d",&iColumn) != -1)
	{
		fscanf(fp,"%d",&iCuts);
		try
		{
			pEnd = new CutRecord;
		}
		catch(CMemoryException* e)
		{
			::MessageBeep(MB_ICONHAND);
			AfxMessageBox("Out of memory4!",MB_OK|MB_ICONSTOP);
			e->Delete();
			return FALSE;
		}
		try
		{
			pEnd->cpCut = new char*[iCuts];
		}
		catch(CMemoryException* e)
		{
			::MessageBeep(MB_ICONHAND);
			AfxMessageBox("Out of memory5!",MB_OK|MB_ICONSTOP);
			e->Delete();
			return FALSE;
		}
		for(int i = 0;i < iCuts;i++)
		{
			try
			{
				pEnd->cpCut[i] = new char[MAX];
			}
			catch(CMemoryException* e)
			{
				::MessageBeep(MB_ICONHAND);
				AfxMessageBox("Out of memory6!",MB_OK|MB_ICONSTOP);
				e->Delete();
				return FALSE;
			}
		}//end for
		pEnd->iColumn = iColumn;
		pEnd->iCuts = iCuts;
		pEnd->p = NULL;
		for(i = 0;i < iCuts;i++)
		{
			fscanf(fp,"%s\n",temp);
			fscanf(fp,"%d\n",&n);
			strcpy(pEnd->cpCut[n],temp);
		}//end for
		if(pHead == NULL)
		{
			struCutRecord = pEnd;
			pHead =pEnd;
		}//end if
		else
		{
			pHead->p = pEnd;
			pHead = pEnd;
			pEnd = pEnd->p;
		}//end else
	}//end while

	delete[] temp;
	return TRUE;
}

BOOL CLieSampleRecognise::SetRuleTable1(FILE *fp, int column, int row,int *atb,int atbcount)
{ //从文件中读入规则到pRuleTable中 column:列数; row:行数;atb:删除了的属性表;atbcount:删除了的属性数
	TRACE("SetRuleTable\n");

	int i,j,k=0;
	if(pRuleTable == NULL)
	{
		try
		{
			pRuleTable = new char**[row];
		}
		catch(CMemoryException* e)
		{
			::MessageBeep(MB_ICONHAND);
			AfxMessageBox("Out of memory6!",MB_OK|MB_ICONSTOP);
			e->Delete();
			return FALSE;
		}
		for(i = 0;i < row;i++)
		{
			try
			{
				pRuleTable[i] = new char*[column];
			}
			catch(CMemoryException* e)
			{
				::MessageBeep(MB_ICONHAND);
				AfxMessageBox("Out of Memory7!",MB_OK|MB_ICONSTOP);
				e->Delete();
				return FALSE;
			}
			for(j = 0;j < column;j++) //column是规则数目
			{
				try
				{
					pRuleTable[i][j] = new char[MAX];
				}
				catch(CMemoryException* e)
				{
					::MessageBeep(MB_ICONHAND);
					AfxMessageBox("Out of memory7!",MB_OK|MB_ICONSTOP);
					e->Delete();
					return FALSE;
				}
				strcpy(pRuleTable[i][j]," ");
			}//end for
		}//end for
	}//end if
	///先读列再读行
for(i=0;i<row;i++)
{	//读入扩充了的规则表.在删除属性处为'-';否则为文件中的属性值
   for(j = 0;j<column;j++)
   {
		k=0;
		for(int x=0;x<atbcount;x++)
		{
			if(j!=atb[x])
				k++;
		} 
		if(k==atbcount)
             fscanf(fp,"%s",pRuleTable[i][j]);
		else
			strcpy(pRuleTable[i][j],"-");
   }
//   fscanf(fp,"\n");//添加
		//outout<<endl;
}
//outout.close();
	return TRUE;
}

BOOL CLieSampleRecognise::SetBlockTable1(FILE *fp, int column, int row,int *atb,int atbcount)
{//设置封锁事实表
	TRACE("SetBlockTable\n");
	int i,j,k=0;
	if(pBlockTable == NULL)
	{
		try
		{
			pBlockTable = new char**[row];
		}
		catch(CMemoryException* e)
		{
			::MessageBeep(MB_ICONHAND);
			AfxMessageBox("Out of memory9!",MB_OK|MB_ICONSTOP);
			e->Delete();
			return FALSE;
		}
		for(i = 0;i < row;i++)
		{
			try
			{
				pBlockTable[i] = new char*[column];
			}
			catch(CMemoryException* e)
			{
				::MessageBeep(MB_ICONHAND);
				AfxMessageBox("Out of memory10!",MB_OK|MB_ICONSTOP);
				e->Delete();
				return FALSE;
			}
			for(j = 0;j < column;j++)
			{
				try
				{
					pBlockTable[i][j] = new char[MAX];
				}
				catch(CMemoryException* e)
				{
					::MessageBeep(MB_ICONHAND);
					AfxMessageBox("Out of memory11!",MB_OK|MB_ICONSTOP);
					e->Delete();
					return FALSE;
				}
				strcpy(pBlockTable[i][j]," ");
			}//end for
		}//end for
	}//end if
  for(i=0;i<row;i++)
  { 	   
	for(int j=0;j<column;j++)
	{ 
		k=0;
		for(int x=0;x<atbcount;x++)
		{
			if(j!=atb[x])
				k++;
		} 
		if(k==atbcount)
             fscanf(fp,"%s",pBlockTable[i][j]);
		else
			strcpy(pBlockTable[i][j],"-");
	}
//	fscanf(fp,"\n");//添加
  }	  
	return TRUE;
}


void CLieSampleRecognise::SampleRecogniseFew()
{//少数优先策略
	TRACE("sample recognise few\n");
	int i,j,k;
	int* temp;
	int temp1 = -1;
	float reliability;			//reliability
	int totalnum;
	int coveragenum;			//覆盖数
	int n = 0;
	int pos;
	char* d;
	try
	{
		pRecogniseResultTable = new char**[iTestNum];	//result table
	}
	catch(CMemoryException* e)
	{
	   ::MessageBeep(MB_ICONHAND);
	   AfxMessageBox("Out of memory11!",MB_OK|MB_ICONSTOP);
	   e->Delete();
	   return;
	}
	for(i = 0;i < iTestNum;i++)
		pRecogniseResultTable[i] = new char*[2];//识别结果
	for(i = 0;i < iTestNum;i++)
	{
		try
		{
			pRecogniseResultTable[i][0] = new char[MAX];
			pRecogniseResultTable[i][1] = new char[MAX];
		}    
     	catch(CMemoryException* e)
		{ 
	       ::MessageBeep(MB_ICONHAND);
	       AfxMessageBox("Out of memory!",MB_OK|MB_ICONSTOP);
	       e->Delete();
	       return;
		}
	}   
    try
	{
		d = new char[MAX];
	    temp = new int[iRuleNum];
	}
	catch(CMemoryException* e)
	{
	   ::MessageBeep(MB_ICONHAND);
	   AfxMessageBox("Out of memory!",MB_OK|MB_ICONSTOP);
	   e->Delete();
	   return;
	}
	CString tempstring;
	CString trimstring;
	CString compstring;
		
	for(i = 0;i < iTestNum;i++)
	{//对每个测试样本
		n = 0;
		bool bcollision=false;
		for(j = 0;j < iRuleNum;j++)
			temp[j] = 0;					//initialize temp[] to zero
		for(j = 0;j < iRuleNum;j++)
		{//遍历每条规则,找出匹配规则
			//------added by li e ,2001.6.27---------------
			if ( IsRuleAttAllNull(j) )
			{
/*				if( IsTestAttAllNull(i) )
				{
					for(int xxx=0;xxx<j;xxx++)
						temp[xxx]=0;
					temp[j]=1;
					temp1=j;
					n=1;
					// 此处continue已经没有意义
					//因为规则集中已经不再有全为空的情况.
					//而其余的规则肯定和该测试(识别)数据不匹配
				}
				break;
*/
				temp[j]=1;//特殊,对规则全为遗失属性值的情况
				temp1=j;
				n++;
				continue;
			}

			///  end li e     2001.6.27------------
			for(k = 0;k < iAttNum;k++)
			{//每个条件属性
				if(strcmp(pRuleTable[j][k],"-") == 0
					|| strcmp(pStringTable[i][k],"-") == 0)
					continue;//规则为‘-且长度为1,继续该循环				
				tempstring = pRuleTable[j][k];//不为空的情况
				if(tempstring[0] == '[' && strcmp(pDataType[k],"String")!=0 )//为连续区间
				{//比较范围情况[XXX,XXX),如果在这个范围,go on,否则跳出
					pos = tempstring.Find(',');
					trimstring = tempstring.Left(pos);
					trimstring.Remove('[');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -