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

📄 zssscaler.cpp

📁 某个实验事编写粗糙集智能信息处理的程序
💻 CPP
字号:
// ZssScaler.cpp: implementation of the CZssScaler class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "ZssScaler.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CZssScaler::CZssScaler()
{

}

CZssScaler::~CZssScaler()
{

}


//写入离散化的结果
void CZssScaler::WriteResult(FILE *pwritefile, FILE *preadfile,fpos_t filepos,
    CArray<float,float> *parray_nonstr, CStringArray *parray_str)
{
	fsetpos(preadfile, &filepos);
	int i_indexstr=-1,i_indexnon=-1;
	char str_temp[ZSSLEN];
	CString str1;
	CWordArray str_array,nonstr_array;
	str_array.SetSize(m_iConAttrNum);
	nonstr_array.SetSize(m_iConAttrNum);
	
	for (int i=0;i<m_iConAttrNum; i++)
	{
		if (stricmp("String", m_AttrType[i])==0)
		{
			i_indexstr++;
			str_array[i]=i_indexstr;
		}
		else
		{
			i_indexnon++;
			nonstr_array[i]=i_indexnon;			
		}
	}
	int i_result;
	float f_temp;

	//根据离散化的数据写文件
	for(long l_i=0; l_i<m_iRecordNum; l_i++)
	{
		for(i=0; i<m_iConAttrNum; i++)
		{
			fscanf(preadfile,"%s",str_temp);
			if (0==stricmp("String", m_AttrType[i]))
			{
				//i_result为字符串str_temp的离散化值
				i_result=GetIndex(str_temp,parray_str[str_array[i]]);
				fprintf(pwritefile,"%-7d",i_result);
			}	
			else
			{
				f_temp=(float)(atof(str_temp));
				i_result=GetPosition(f_temp,parray_nonstr[nonstr_array[i]]);
				fprintf(pwritefile,"%-7d",i_result);
			}
		}
		fscanf(preadfile,"%s",str_temp);
		fprintf(pwritefile,"%-7s\n",str_temp);
	}
}

//写断点的信息
void CZssScaler::WriteFileTail(FILE *pfile, CArray<float,float> *parray_nonstr, CStringArray *parray_str)
{
	fprintf(pfile,"[Cuts]\n");
	int i_strcount=-1,i_nonstrcount=-1,i_len,j;
	for(int i=0; i<m_iConAttrNum; i++)
	{
		if(stricmp("String", m_AttrType[i])==0)
		{
			i_strcount++;
			CStringArray &array1=parray_str[i_strcount];
			i_len=array1.GetSize();
			fprintf(pfile,"%d\n%d\n",i,i_len);
			for(j=0; j<i_len; j++)
				fprintf(pfile,"%s  %d\n",array1[j], j);			
		}
		else
		{
			i_nonstrcount++;
			CArray<float,float> &array=parray_nonstr[i_nonstrcount];
			i_len=array.GetSize();//断点数目
			fprintf(pfile, "%d\n%d\n[*,",i,i_len+1);//区域个数
			if (i_len==1)
			   fprintf(pfile,"%.5f]  %d\n(%.5f,",array[0],0,array[0]);
            else 
			for (j=0; j<i_len; j++)
			{
				fprintf(pfile,"%.5f)  %d\n[%.5f,",array[j],j,array[j]);
			}			
			fprintf(pfile,"*]  %d\n",i_len);
		}
	}
}

//得到字符串条件属性的断点信息
void CZssScaler::GetBreakPoint_InStrAttr(FILE *pfile, 
		int i_attr, CStringArray &str_array, fpos_t file_pos)
{
	fsetpos(pfile, &file_pos);
	char str_temp[ZSSLEN];
	str_array.RemoveAll();
	MoveFilePoint(pfile, i_attr);//移动文件指针
	for(long i=0; i<m_iRecordNum; i++)
	{		
		fscanf(pfile,"%s",str_temp);
		if(!IsStringInStringArray(str_temp,str_array))
			str_array.Add(str_temp);
		MoveFilePoint(pfile,m_iConAttrNum);		
	}
}

/*寻找一个字符串在字符串数组总的位置
输入参数: str:字符串
-----------array:字符串数组*/
int CZssScaler::GetIndex(CString str, CStringArray &array)
{
	int size,i;
	size=array.GetSize();
	for(i=0;i<size;i++)
	{
		if (strcmp(str,array[i])==0)
			return i;
	}
	return -1;//没有找到
}

//计算一个浮点数f_temp在一个浮点数数组中的位置
int CZssScaler::GetPosition(float f_temp, CArray<float,float> &array)
{
	int i_len=array.GetSize();
	for(int i=0; i<i_len; i++)
	{
		if (f_temp<array[i])
			return i;
	}
	return i_len;
}

⌨️ 快捷键说明

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