龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

一种快速可预制的随机数组产生方法(2)

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
CString strc; int ct=0; // 用于记录当前已经取得的随机数个数 for(m=0;m { file1.ReadString(strc); } // 取出有用的行,直到取够为之 for(int n=0;n { if(n+my==m_Txt_Line) file1.

  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个不同的随机数组。因此越大的数池显然效果越好。此外,我们可以采用另外一种更好的办法捞取随机数组。即首先用时间作为种子产生随机数,从数池中捞取相应序号的数值,然后又用该数值作为种子生成随机数,再从数池中捞取相应序号的数值。

  如此循环下去,直至取够需要的随机数组。该方法的程序也很容易写出,各位可以一试。

精彩图集

赞助商链接