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

📄 disone.cpp

📁 某个实验事编写粗糙集智能信息处理的程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				minvalue=maxcols[num][1];
                num++;
			  }

		     num=1;
		      for(i=0;i<maxnum;i++)
			  {
			    if(minvalue==maxcols[num][1])
				maxcol=maxcols[num][0];
			    num++;
			  }
		}
		// 删除i所在的列和列值为1的行
		for(i=0;i<rows;i++)
			if(matrix[i][maxcol]==1)
			{
				//行标志标为0
                countrows[i]=0;

				for(j=0;j<cols;j++)
					matrix[i][j]=-1;
			}
		  
			for(i=0;i<rows;i++)
			   matrix[i][maxcol]=-1;
            
			//列标志标为0
			countcols[maxcol]=0;

		   cuts[0]++;
		   cuts[cuts[0]]=maxcol;
		 
		 for(i=0;i<cols;i++)
			 if(countcols[i]!=0)
			 {
				 countcols[i]=0;
				 for(j=0;j<rows;j++)
				 if(matrix[j][i]==1)
					 countcols[i]++;
			 }
		for(i=0;i<rows;i++)
			if(countrows[i]!=0)
			{
				countrows[i]=0;
				for(j=0;j<cols;j++)
					if(matrix[i][j]==1)
						countrows[i]++;
			}
		for(i=0;i<rows;i++)
				if(countrows[i]!=0)
					remains+=countrows[i];

	}while(remains>0);
	delete countrows;
	delete countcols;
	
	for(i=0;i<rows;i++)
		delete matrix[i];
	delete matrix;
	
	for(i=0;i<cols;i++)
		delete maxcols[i];
	delete maxcols;

	get_cut(cuts);

}

void CDisOne::get_cut(int *pos)
{
	int i,j;                                       //循环变量
	int cut_num;                                   //每个属性的断点数
	int * new_pos;
	int num;
    cut=new float *[iAttNum];
	for(i=0;i<iAttNum;i++)
	{
		cut_num=0;
		num=0;
		cut[i]=new float[(int)interval[i][0]+1];
		for(j=0;j<pos[0];j++)
			if(pos[j+1]<interval[i][0])
			{
				cut_num++;
				cut[i][cut_num]=interval[i][pos[j+1]+1];
			}
		cut[i][0]=(float)cut_num;
        new_pos=new int[pos[0]-cut_num+1];
		new_pos[0]=pos[0]-cut_num;
		for(j=0;j<pos[0];j++)
			if(pos[j+1]>=interval[i][0])
				new_pos[++num]=pos[j+1]-(int)interval[i][0];
		delete []pos;
		pos=new int[num+1];
		for(j=0;j<num+1;j++)
			pos[j]=new_pos[j];
		delete []new_pos;
	}
	delete []pos;
}

void CDisOne::make_new_table()
{
	int i,j,k;                                        //循环变量
	int m;
	selectsort(cut);
	new_table=new int *[iRecordNum];
	for(i=0;i<iRecordNum;i++)
	{
		new_table[i]=new int[iAttNum+1];
		for(j=0;j<iAttNum;j++)
		{
			m=0;
			for(k=0;k<cut[j][0];k++)
			{
		    	if(infotable[i][j]<cut[j][k+1])
				{
					new_table[i][j]=m;
					break;
				}
				m++;
				if(infotable[i][j]>cut[j][(int)cut[j][0]])
					new_table[i][j]=m;
			}
			if(cut[j][0]==0)
				new_table[i][j]=0;
		}
		new_table[i][iAttNum]=(int)infotable[i][iAttNum];
	}
}

int CDisOne::search(float val, int condition)
{
	int i;                                      //循环变量
	int num;
	for(i=0;i<att_val[condition][0];i++)
		if(val==att_val[condition][i+1])
			num=i+1;
	return num;

}

int CDisOne::load_table()
{
	int i,j;
	infotable=new float * [iRecordNum];
	for(i=0;i<iRecordNum;i++)
	{
		try
		{
			infotable[i]=new float[iAttNum+1];
		}
		catch(CMemoryException * e)
		{
			::MessageBeep(MB_ICONHAND);
			AfxMessageBox("Out of the memory!",MB_OK|MB_ICONSTOP);
			e->Delete();
			return -2;
		}
		for(j=0;j<iAttNum+1;j++)
			for(j=0;j<iAttNum+1;j++)
    		infotable[i][j]=(float)atof(pStringTable[i][j]);	  
	}
	return 1;
}

void CDisOne::OnDisOneSave(LPCTSTR lpszPathName)
{
	int i,j;
	fstream fpw;
	fpw.open(lpszPathName,ios::out);
	if(!fpw)
	{
		::MessageBeep(MB_ICONHAND);
		AfxMessageBox("some error happen, file can't be opend!",
		MB_OK|MB_ICONSTOP);
        exit(0);
	}
	fpw<<"Style:"<<"train"<<endl;
	fpw<<"Stage:2"<<endl;
    fpw<<"Condition attributes number:"<<iAttNum<<endl;
    fpw<<"Records number:"<<iRecordNum<<endl;
	
	for(i = 0;i < iAttNum+1;i++)
		fpw<<pAttName[i]<<" ";
	fpw<<endl;

	for(i = 0;i < iAttNum+1;i++)
		fpw<<pDataType[i]<<" ";
	fpw<<endl;
	
	for(i=0;i<iRecordNum;i++)
	{
		for(j=0;j<iAttNum+1;j++)
		{
			fpw<<new_table[i][j];
			fpw<<" ";
		}
		fpw<<endl;
	}
    fpw<<"[Cuts]"<<endl;
	
    for(i=0;i<iAttNum;i++)
	{
	    fpw<<i<<endl<<cut[i][0]+1<<endl;
		fpw<<"["<<"*"<<",";
		for(j=0;j<(int)cut[i][0];j++)
		{
           fpw<<cut[i][j+1]<<")"<<" "<<j<<endl;
		   fpw<<"["<<cut[i][j+1]<<",";
		}
		fpw<<"*"<<")"<<" "<<j;
		fpw<<endl;
	}
    fpw.close();
}


BOOL CDisOne::ReadDataFromFile(char *filename)
{
	FILE *fp;
	if((fp = fopen(filename,"r")) == NULL)
	{
		::MessageBeep(MB_ICONHAND);
		AfxMessageBox("Couldn't open the file",MB_OK|MB_ICONSTOP);
		return FALSE;
	}//end if

	fscanf(fp,"Style:%s\n",cStyle);
	fscanf(fp,"Stage:%d\n",&iStage);
	fscanf(fp,"Condition attributes number:%d\n",&iAttNum);
	if(_stricmp(cStyle,"train") == 0 && iStage<=1)
	{
		fscanf(fp,"Records number:%d\n",&iRecordNum);
		if(!SetAttName(fp,iAttNum+1))
			return FALSE;
		if(!SetDataType(fp,iAttNum+1))
			return FALSE;
		if(!SetStringTable(fp,iAttNum+1,iRecordNum))
			return FALSE;
	}
	return TRUE;
}




BOOL CDisOne::SetAttName(FILE* fp, int count)
{
	int i;
	if(pAttName == NULL)
	{
		try
		{
			pAttName = 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
			{
				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++)
		fscanf(fp,"%s",pAttName[i]);
	fscanf(fp,"\n");
	return TRUE;
}

BOOL CDisOne::SetDataType(FILE *fp, int count)
{
	int i;
	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++)
		fscanf(fp,"%s",pDataType[i]);
	return TRUE;
}

BOOL CDisOne::SetStringTable(FILE* fp, int column, int row)
{
	int i,j;
	
	if(pStringTable == NULL)
	{
		try
		{
			pStringTable = new char**[row];
		}
		catch(CMemoryException* e)
		{
			::MessageBeep(MB_ICONHAND);
			AfxMessageBox("Out of memory!",MB_OK|MB_ICONSTOP);
			e->Delete();
			return FALSE;
		}
		for(i = 0;i < row;i++)
		{
			try
			{
				pStringTable[i] = new char*[column];
			}
			catch(CMemoryException* e)
			{
				::MessageBeep(MB_ICONHAND);
				AfxMessageBox("Out of memory!",MB_OK|MB_ICONSTOP);
				e->Delete();
				return FALSE;
			}
			for(j = 0;j < column;j++)
			{
				try
				{
					pStringTable[i][j] = new char[MAX];
				}
				catch(CMemoryException* e)
				{
					::MessageBeep(MB_ICONHAND);
					AfxMessageBox("Out of memory!",MB_OK|MB_ICONSTOP);
					e->Delete();
					return FALSE;
				}
				strcpy(pStringTable[i][j]," ");
			}//end for
		}//end for
	}//end if
	
	for(i = 0;i < row;i++)
		for(j = 0;j < column;j++)
			fscanf(fp,"%s",pStringTable[i][j]);
	
	return TRUE;
}

⌨️ 快捷键说明

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