m_pa=new double[data.m_AryLength/10];
for(int i=0;i<data.m_AryLength/10;i++)
{
  data.PIs();   //假设函数中每次都计算得到一个值a,如何将它依次保存在m_pa中?}

解决方案 »

  1.   


    int nLen = data.m_AryLength/10;
    ASSERT(nLen>0);
    m_pa=new double[nLen];
    for(int i=0;i<nLen;i++)
    {
      m_pa [i] =  data.PIs();   
    }
      

  2.   

    但如果我的data.PIs()中有三个返回值,比方说是a、b、c,如何保存在m_pa、m_pb、m_pc中呢?
      

  3.   

    m_pa、m_pb、m_pc 3个都用new的方法分别申请
      

  4.   

    通过参数返回,参数可以是基本变量,也可以是struct.
      

  5.   

    struct _data
    {
       double a, b, c;
    }int nLen = data.m_AryLength/10;
    ASSERT(nLen>0);
    m_pa=new _data[nLen];
    for(int i=0;i<nLen;i++)
    {
      data.PIs(&m_pa[0]->a, &m_pa[0]->b, &m_pa[0]->c);   
    }
    funs data.pis(double *a, double *b, double *c)
    {
       *a = 1.0f;
       *b = 2.0f;
       *c = 3.0f;
    }
      

  6.   

    更正大,大概是这意思,你试试看struct _data 

      double a, b, c; 
    } int nLen = data.m_AryLength/10; 
    ASSERT(nLen>0); 
    m_pa=new _data[nLen]; 
    for(int i=0;i <nLen;i++) 

      data.PIs(&m_pa[i]->a, &m_pa[i]->b, &m_pa[i]->c);  

    funs data.pis(double *a, double *b, double *c) 

      *a = 1.0f; 
      *b = 2.0f; 
      *c = 3.0f; 
    }
      

  7.   

    我不用struct,我的代码其实是这样的:void CQTAView::OnTrendidentification() 
    {
    int nLen = data.m_AryLength/10;
            ASSERT(nLen>0);
    m_Plsy0=new double[nLen];
    m_xAve=new double[nLen];
    m_slope=new double[nLen];
    data.m_Plsstart=10*m_start;
    data.m_Plsend=10*(m_start+1);
    data.m_pLsy0 = m_Plsy0; 
            data.m_pXAve = m_xAve; 
    data.m_pSlope= m_slope;
    for(int m_start=0;m_start<nLen;m_start++)
    {
    data.PIs(data.m_pNumber,data.m_pDataAry,10*m_start,10*(m_start+1),m_Plsy0,m_xAve,m_slope);
    //这个地方应如何添加?
    m_Plsy0+=1;
    m_xAve+=1;
    m_slope+=1;
    }
    }void CData::PIs(double xTime[],double yValue[],int m,int n,double* m_pLsy0,double* m_pXAve,double* m_pSlope)
    {
       //传入时间和变量值
       //其中m为作最小二乘的起始点参数,n为作最小二乘的终点值参数
       double sxx=0,sxy=0,syy=0;               //初始化最小二乘的参数
       double av_x=0,av_y=0,y0=0;              //初始化最小二乘的参数
       m_Plsstart=m,m_Plsend=n;                //传入做最小二乘元素起始点,中止点
     //  double i_slope=0;                       //初始化直线的斜率
       for(int i=m_Plsstart;i<m_Plsend;i++)        //计算最小二乘估计均值参数
       {
        av_x+=xTime[i]/(m_Plsend-m_Plsstart);      //计算时间均值
        av_y+=yValue[i]/(m_Plsend-m_Plsstart);     //计算变量的均值
       }
       for(int j=m_Plsstart;j<m_Plsend;j++)        //计算最小二乘的参数
       {
        sxx+=(xTime[j]-av_x)*(xTime[j]-av_x);  //计算的参数
        sxy+=(xTime[j]-av_x)*(yValue[j]-av_y); //计算的参数
       }
       *m_pSlope=sxy/sxx;                        //计算拟合曲线的斜率
       *m_pLsy0=av_y;                            //y均值
       *m_pXAve=av_x;                             //x均值 
                                                        //*m_pSlope,*m_pLsy0,*m_pXAve是我希望返回的值。
       //return m_slope;                          //返回曲线的斜率
       return;
    }