一种快速可预制的随机数组产生方法(2)
CString strc;
int ct=0; // 用于记录当前已经取得的随机数个数
for(m=0;m { file1.ReadString(strc); } // 取出有用的行,直到取够为之 for(int n=0;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 { aw1=strc.GetLength(); aw2=strc.Find(" "); // 找到作为间隔的前三个空格所在位置 strc=strc.Right(aw1-aw2-m_Txt_Spacing); // 取这三个空格右边的所有字符串 } // 下面取出剩下的字符串中每三个空格前面的字符串,就是所要查一个数据 for(m=0;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 { 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++; } } 本工程在VC++5.0、WindowsXP环境中调试通过。 本方法所产生的随机数组实质上是数池中相连的一组数,对于某一数组长度只能产生m_Txt_Line×m_Txt_Row个不同的随机数组。因此越大的数池显然效果越好。此外,我们可以采用另外一种更好的办法捞取随机数组。即首先用时间作为种子产生随机数,从数池中捞取相应序号的数值,然后又用该数值作为种子生成随机数,再从数池中捞取相应序号的数值。 如此循环下去,直至取够需要的随机数组。该方法的程序也很容易写出,各位可以一试。
- 上一篇:启程动态数组V2.0[组图]
- 下一篇:C语言之指针、数组和函数