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

📄 randomarrayfromtxt.cpp

📁 一个创建随机数的程序
💻 CPP
字号:


#include "stdafx.h"
#include "RandomArrayFromTxt.h"

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

/////////////////////////////////////////////////////////////////////////////
// CRandomArrayFromTxt

CRandomArrayFromTxt::CRandomArrayFromTxt()
{
}

CRandomArrayFromTxt::~CRandomArrayFromTxt()
{
}


BEGIN_MESSAGE_MAP(CRandomArrayFromTxt, CWnd)
	//{{AFX_MSG_MAP(CRandomArrayFromTxt)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CRandomArrayFromTxt message handlers

void CRandomArrayFromTxt::GetRandomArrayFromTxt(int m_Collect_Times,double *a_Random,int m_Txt_Line,int m_Txt_Row,int m_Txt_Spacing)
{
	int m,mx,my,cl;
	srand((unsigned)time(NULL));	// 生成时间种子
	m=rand()%m_Txt_Line;			// 返回一个0-m_Txt_Line-1的随机数,即查表的起始位置
	mx=m%m_Txt_Row;					// 查表起始位置的列号,文件头为0行0列
	my=m/m_Txt_Row;					// 查表起始位置的行号

	cl=(m_Collect_Times+mx-1)/m_Txt_Row+1;	// 需要从数表中读取的行数


	// 打开txt文本的数表。
	CStdioFile file1( "C:\\Documents and Settings\\Yg\\桌面\\7-15-1130\\Rd\\Debug\\ramdom1000.txt",CFile::modeNoTruncate | CFile::modeRead | CFile::typeText);


	CString strc;
	int ct=0;						// 用于记录当前已经取得的随机数个数

	for(m=0;m<my;m++)
	{
		file1.ReadString(strc);
	}
	

	// 取出有用的行,直到取够为之
	for(int n=0;n<cl;n++)			
	{
		if(n+my==m_Txt_Line)
			file1.SeekToBegin();	// 数表不够长,重新定位到文件头
		file1.ReadString(strc);
		
		if(n==0)					// 如果是取得的第一行
		{
			int aw1,aw2;
			aw1=strc.GetLength();
			for(m=0;m<mx+1;m++)		// 过掉前面无用的空格
			{
				aw1=strc.GetLength();
				aw2=strc.Find("   ");			// 找到作为间隔的前三个空格所在位置
				strc=strc.Right(aw1-aw2-m_Txt_Spacing);	// 取这三个空格右边的所有字符串
			}
			// 下面取出剩下的字符串中每三个空格前面的字符串,就是所要查一个数据
			for(m=0;m<m_Txt_Row-mx&&ct<m_Collect_Times;m++)
			{
				aw2=strc.Find("  ");			// 找到作为间隔的后三个空格所在位置
				if(mx==m_Txt_Row-1||m==m_Txt_Row-mx-1)
					a_Random[ct]=atof(strc);
				else
					a_Random[ct]=atof(strc.Left(aw2));	// 保存数据到数组
				aw1=strc.GetLength();
				aw2=strc.Find("   ");			// 找到作为间隔的前三个空格所在位置
				strc=strc.Right(aw1-aw2-m_Txt_Spacing);	// 取这三个空格右边的所有字符串
				ct++;
			}
		}
		else
		{
			GetRandomArrayFromALine(strc,a_Random,m_Collect_Times,m_Txt_Row,m_Txt_Spacing,ct);	
			ct+=m_Txt_Row;
		}
	}
	file1.Close();
}

// 从一行中取出数字
void CRandomArrayFromTxt::GetRandomArrayFromALine(CString strc,double *a_Random,int m_Collect_Times,int m_Txt_Row,int m_Txt_Spacing,int ct)
{
	int aw1,aw2;
	aw1=strc.GetLength();
	aw2=strc.Find("   ");
	strc=strc.Right(aw1-aw2-m_Txt_Spacing);		// 取这三个空格右边的所有字符串
	for(int m=0;m<m_Txt_Row&&ct<m_Collect_Times;m++)
	{
		aw2=strc.Find("   ");
		if(m==m_Txt_Row-1)
			a_Random[ct]=atof(strc);
		else
			a_Random[ct]=atof(strc.Left(aw2));	// 保存数据到数组
		aw1=strc.GetLength();
		aw2=strc.Find("   ");					// 找到作为间隔的前三个空格所在位置
		strc=strc.Right(aw1-aw2-m_Txt_Spacing);	// 取这三个空格右边的所有字符串
		ct++;
	}
}

⌨️ 快捷键说明

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