class Data
{
public:
double SL1;
double ZL1;
double NJ1;
double SL2;
double ZL2;
Data() {SL1=0;ZL1=0;NJ1=0;SL2=0;ZL2=0;}
};
{
public:
double SL1;
double ZL1;
double NJ1;
double SL2;
double ZL2;
Data() {SL1=0;ZL1=0;NJ1=0;SL2=0;ZL2=0;}
};
#include "afxtempl.h"
#include "afx.h"
#include "string.h"
class Data
{
public:
double SL1;//升力
double ZL1;//阻力
double NJ1;//扭矩
double SL2;//升力
double ZL2;//阻力
Data() {SL1=0;ZL1=0;NJ1=0;SL2=0;ZL2=0;}
};class Result
{
public:
double ZL;
double SL;
double NJ;
Result() {}
Result(const Result &Other)
{
ZL = Other.ZL;
SL = Other.SL;
NJ = Other.NJ;
}
void Interate( int InterateNum,int CaseNum,int AmplificateNum,int gravity,CString FileName_0,
CString FileName_1,CArray<Result,Result&> *m_ResultArray);
};
-----------------.cpp-----------------------------
void Result::Interate( int InterateNum,int CaseNum,int AmplificateNum,int gravity,CString FileName_0,CString FileName_1,
CArray<Result,Result&> *m_ResultArray)
{ typedef CArray<Data,Data&>m_TransitionArray_1;
CArray<m_TransitionArray_1,m_TransitionArray_1&>m_array_1;//第一个二维数组用来接收初始读数
typedef CArray<Data,Data&>m_TransitionArray_2;
CArray<m_TransitionArray_2,m_TransitionArray_2&>m_array_2;//第二个二维数组用来接收加风状态的读数
// CArray <Result ,Result&>m_array;//此数组用来存放最后的数据
int i;
int j;//i统计迭代次数,j表示工况数目
/*-----------------------------------------------------
设置数组大小
-------------------------------------------------------*/
m_array_1.SetSize(InterateNum+1);//一维数组设置大小,+1是为了存放最后一次数据
for (i=0;i<InterateNum;i++)
{m_array_1[i].SetSize(CaseNum);}//二维数组设置大小
m_array_2.SetSize(InterateNum+1);//一维数组设置大小
for (i=0;i<InterateNum;i++)
{m_array_2[i].SetSize(CaseNum);}//二维数组设置大小
(*m_ResultArray).SetSize(CaseNum);
/*-----------------------------------------------------
清空数组
-------------------------------------------------------*/
for (i=0;i<InterateNum;i++)
for (j=0;j<CaseNum;j++)
{ m_array_1[i][j].NJ1=0;
m_array_1[i][j].SL1=0;
m_array_1[i][j].SL2=0;
m_array_1[i][j].ZL1=0;
m_array_1[i][j].ZL2=0;
}//所有数组将数值设置为0;
for (i=0;i<InterateNum;i++)
for (j=0;j<CaseNum;j++)
{ m_array_2[i][j].NJ1=0;
m_array_2[i][j].SL1=0;
m_array_2[i][j].SL2=0;
m_array_2[i][j].ZL1=0;
m_array_2[i][j].ZL2=0;
}//所有数组将数值设置为0;
for (j=0;j<CaseNum;j++)
{ (*m_ResultArray)[j].ZL=0;
(*m_ResultArray)[j].SL=0;
(*m_ResultArray)[j].NJ=0;
}//所有数组将数值设置为0;
/*-----------------------------------------------------
读取初始读数文件并赋值
-------------------------------------------------------*/
CStdioFile file_0(FileName_0,CFile::modeRead);//打开初读数文件
CString FileData;//存放临时数据
CString Temp[7];
for (j=0;j<CaseNum;i++)
{
file_0.ReadString(FileData);
sscanf(FileData,"%s","%s","%s","%s","%s","%s","%s",Temp[0],Temp[1],
Temp[2],Temp[3],Temp[4],Temp[5],Temp[6]);
m_array_1[0][j].SL1=strtod(Temp[2],NULL)/AmplificateNum;
m_array_1[0][j].ZL1=strtod(Temp[3],NULL)/AmplificateNum;
m_array_1[0][j].NJ1=strtod(Temp[4],NULL)/AmplificateNum;
m_array_1[0][j].SL2=strtod(Temp[5],NULL)/AmplificateNum;
m_array_1[0][j].ZL2=strtod(Temp[6],NULL)/AmplificateNum;
}//存放数据
/*-----------------------------------------------------
读取在加风状态下的数据文件并赋值
-------------------------------------------------------*/
CStdioFile file_1(FileName_1,CFile::modeRead);//打开加风状态下的数据文件
for (j=0;j<CaseNum;i++)
{
file_0.ReadString(FileData);
sscanf(FileData,"%s","%s","%s","%s","%s","%s","%s",Temp[0],Temp[1],
Temp[2],Temp[3],Temp[4],Temp[5],Temp[6]);
m_array_2[0][j].SL1=strtod(Temp[2],NULL)/AmplificateNum;
m_array_2[0][j].ZL1=strtod(Temp[3],NULL)/AmplificateNum;
m_array_2[0][j].NJ1=strtod(Temp[4],NULL)/AmplificateNum;
m_array_2[0][j].SL2=strtod(Temp[5],NULL)/AmplificateNum;
m_array_2[0][j].ZL2=strtod(Temp[6],NULL)/AmplificateNum;
}//存放数据
/*-----------------------------------------------------
减去初读数,并放在m_array_1中
-------------------------------------------------------*/ for (j=0;j<CaseNum;i++)
{
m_array_1[0][j].SL1=(m_array_2[0][j].SL1-m_array_1[0][j].SL1)*100;
m_array_1[0][j].ZL1=(m_array_2[0][j].ZL1-m_array_1[0][j].ZL1)*100;
m_array_1[0][j].NJ1=(m_array_2[0][j].NJ1-m_array_1[0][j].NJ1)*100;
m_array_1[0][j].SL2=(m_array_2[0][j].SL2-m_array_1[0][j].SL2)*100;
m_array_1[0][j].ZL2=(m_array_2[0][j].ZL2-m_array_1[0][j].ZL2)*100;
}
/*-----------------------------------------------------
进行数据迭代,并放在m_array_1中
-------------------------------------------------------*/
for (i=0;i<InterateNum;i++)//循环表示所有工况迭代同步,先后达到InterateNum
for (j=0;j<CaseNum;j++)
{
m_array_1[i+1][j].SL1=gravity*(0.094693*m_array_1[0][j].SL1+0.0135*m_array_1[i+1][j].ZL1+0.0690*m_array_1[0][j].NJ1);
m_array_1[i+1][j].ZL1=gravity*(0.039808*m_array_1[0][j].ZL1-0.0117*m_array_1[i+1][j].SL1+0.0514*m_array_1[0][j].NJ1);
m_array_1[i+1][j].NJ1=gravity*(0.019901*m_array_1[0][j].NJ1-0.00403*m_array_1[i+1][j].SL1+0.0113*m_array_1[i+1][j].ZL1);
m_array_1[i+1][j].SL2=gravity*(0.087618*m_array_1[0][j].SL2-0.0174*m_array_1[0][j].ZL2);
m_array_1[i+1][j].ZL2=gravity*(0.038867*m_array_1[0][j].ZL2-0.00102*m_array_1[0][j].SL2); }//循环完成后,m_array_1[InterateNum][j]是需要的数据
/*-----------------------------------------------------
将得到的数据处理,加到m_array中
-------------------------------------------------------*/
for (j=0;j<CaseNum;j++)
{Result result;
result.SL= m_array_1[InterateNum][j].SL1+m_array_1[InterateNum][j].SL2;
result.ZL=m_array_1[InterateNum][j].ZL1+m_array_1[InterateNum][j].ZL2;
result.NJ=m_array_1[InterateNum][j].NJ1;
(*m_ResultArray).Add(result);
}
/*------------------------------------------------------------------
数据处理完成,数据转移到m_ResultArray中,以便后续处理
---------------------------------------------------------------*/
/* (*m_ResultArray).SetSize(CaseNum);//设置大小
for (j=0;j<CaseNum;j++)
{ (*m_ResultArray)[j].ZL=0;
(*m_ResultArray) [j].SL=0;
(*m_ResultArray) [j].NJ=0;
}//清零
for (j=0;j<CaseNum;j++)
{ (*m_ResultArray)[j].ZL=m_array[j].ZL;
(*m_ResultArray)[j].SL=m_array[j].SL;
(*m_ResultArray)[j].NJ=m_array[j].NJ;
}//存放完毕*/
/*------------------------------------------------------------------
后续处理,关闭文件,清空没用数组
---------------------------------------------------------------*/
m_array_1.RemoveAll();
m_array_2.RemoveAll();
file_0.Close();
file_1.Close();}
.cpp还有主函数部分:
#include "iostream.h"
#include "function.h"
void main()
{ CArray<Result,Result&>m_array;
int CaseNum=25;
m_array.SetSize(CaseNum);//设置大小
int j;
for (j=0;j<CaseNum;j++)
{ m_array[j].ZL=0;
m_array[j].SL=0;
m_array [j].NJ=0;
}//清零
Result result;
CString str0="Sddq01.txt";
CString str1="Sddq02.txt";
result.Interate(50,25,200,9.8,str0,str1, &m_array);
//cout <<m_array [2].NJ;
m_array.RemoveAll();
}主要是测试这个能否正常使用,后面还需要在放到MFC中