📄 fuzzy2004view.cpp
字号:
rarry[4][0]=m_rain.m_rainpos2min;
rarry[4][1]=m_rain.m_rainpos2mid;
rarry[4][2]=m_rain.m_rainpos2max;
m_rain.Close();
//////////////////////////////////////////
////////////////////////////////////////
m_despoit.Open();
m_despoit.MoveFirst();
darry[0][0]=m_despoit.m_provideneg2min2;
darry[0][1]=m_despoit.m_provideneg2min1;
darry[0][2]=m_despoit.m_provideneg2mid;
darry[0][3]=m_despoit.m_provideneg2max1;
darry[0][4]=m_despoit.m_provideneg2max2;
darry[1][0]=m_despoit.m_provideneg1min2;
darry[1][1]=m_despoit.m_provideneg1min1;
darry[1][2]=m_despoit.m_provideneg1mid;
darry[1][3]=m_despoit.m_provideneg1max1 ;
darry[1][4]=m_despoit.m_provideneg1max2;
darry[2][0]=m_despoit.m_providezeromin2;
darry[2][1]=m_despoit.m_providezeromin1;
darry[2][2]=m_despoit.m_providezeromid;
darry[2][3]=m_despoit.m_providezeromax1;
darry[2][4]=m_despoit.m_providezeromax2;
darry[3][0]=m_despoit.m_providepos1min2;
darry[3][1]=m_despoit.m_providepos1min1;
darry[3][2]=m_despoit.m_providepos1mid;
darry[3][3]=m_despoit.m_providepos1max1;
darry[3][4]=m_despoit.m_providepos1max2;
darry[4][0]=m_despoit.m_providepos2min2;
darry[4][1]=m_despoit.m_providepos2min1;
darry[4][2]=m_despoit.m_providepos2mid;
darry[4][3]=m_despoit.m_providepos2max1;
darry[4][4]=m_despoit.m_providepos2max2;
m_despoit.Close();
/////////////////////////////////////////////
////////////////////////////////////////////
CProvide m_provide;
m_provide.Open();
m_provide.MoveFirst();
parry[0][0]=m_provide.m_deposetneg2min;
parry[0][1]=m_provide.m_neg2mid;
parry[0][2]=m_provide.m_neg2max;
parry[1][0]=m_provide.m_depositneg1min;
parry[1][1]=m_provide.m_depositneg1mid;
parry[1][2]=m_provide.m_depositneg1max;
parry[2][0]=m_provide.m_depositzeromin;
parry[2][1]=m_provide.m_depositzeromid;
parry[2][2]=m_provide.m_depositzeromax;
parry[3][0]=m_provide.m_depositpos1min;
parry[3][1]=m_provide.m_depositpos1mid;
parry[3][2]=m_provide.m_depositpos1max;
parry[4][0]=m_provide.m_depositpos2min;
parry[4][1]=m_provide.m_depositpos2mid;
parry[4][2]=m_provide.m_depositpos2max;
m_provide.Close();
//////////////////////////////////////////////
///////////////////////////////////////////////
/* CString str;
str.Format("%1.2f",parry[4][2]);
MessageBox(str);
*/
/////////////////////////////////////////////
/// 功能:计算第一个模糊矩阵
//输出到三维数组中
/////////////////////////////////////////////
p=0;
/// q=0;
for(k=0;k<3;k++)
for(m=0;m<5;m++)///fortwo
{//fortwo
///计算每一个5行5列的矩阵
for(j=0;j<5;j++)
{
for(i=0;i<5;i++)
{
if((rarry[j][k]>=darry[i][m]))
res1[j][i][p]=darry[i][m];
else
res1[j][i][p]=rarry[j][k];
//p=p+1;
// if(p==5)
// p=0;
/*
CString str;
str.Format("(%d,%d,%d)%1.2f",j,i,p,res1[j][i][p]);
MessageBox(str);
*/
}
// q=q+1;
// if(q==5)
// q=0;
}
p=p+1;
}///fortwo
///////////计算第二个模糊矩阵
//使用数据:规则库和供水量
///只能分布进行计算,共7次;
//结果存放到
// q=0;
///////////////////////////////
////
////
////
///
/////////////////////////////////
///
///
///
///
///
///第一个
for(k=0;k<3;k++)
for(j=0;j<5;j++)
for(i=0;i<5;i++)
{//每一列进行分别比较
//供水量第一列
if(parry[i][2]>=res1[i][j][k])
result[i][j][k]=res1[i][j][k];
else
result[i][j][k]=parry[i][2];
/* CString str;
str.Format("(%d,%d,%d)%1.2f",i,j,k,result[i][j][k]);
MessageBox(str);
*/
}
///第一个结束
/////第二个
for(k=3;k<5;k++)
for(j=0;j<5;j++)
for(i=0;i<5;i++)
{//每一列进行分别比较
//供水量的第二列
if(parry[i][1]>=res1[i][j][k])
result[i][j][k]=res1[i][j][k];
else
result[i][j][k]=parry[i][1];
/* CString str;
str.Format("(%d,%d,%d)%1.2f",i,j,k,result[i][j][k]);
MessageBox(str);
*/
}
////第二个结束
//第三个
for(k=5;k<7;k++)
for(j=0;j<5;j++)
for(i=0;i<5;i++)
{//每一列进行分别比较
if(parry[i][2]>=res1[i][j][k])
result[i][j][k]=res1[i][j][k];
else
result[i][j][k]=parry[i][2];
/*
CString str;
str.Format("(%d,%d,%d)%1.2f",i,j,k,result[i][j][k]);
MessageBox(str);
*/
}
//第三个结束
///第四个
for(k=7;k<9;k++)
for(j=0;j<5;j++)
for(i=0;i<5;i++)
{//每一列进行分别比较
if(parry[i][1]>=res1[i][j][k])
result[i][j][k]=res1[i][j][k];
else
result[i][j][k]=parry[i][1];
/* CString str;
str.Format("(%d,%d,%d)%1.2f",i,j,k,result[i][j][k]);
MessageBox(str);
*/
}
//第四个结束
//第五个
for(k=9;k<10;k++)
for(j=0;j<5;j++)
for(i=0;i<5;i++)
{//每一列进行分别比较
if(parry[i][0]>=res1[i][j][k])
result[i][j][k]=res1[i][j][k];
else
result[i][j][k]=parry[i][0];
/* CString str;
str.Format("(%d,%d,%d)%1.2f",i,j,k,result[i][j][k]);
MessageBox(str);
*/
}
//第五个结束
//第六个
for(k=10;k<12;k++)
for(j=0;j<5;j++)
for(i=0;i<5;i++)
{//每一列进行分别比较
if(parry[i][1]>=res1[i][j][k])
result[i][j][k]=res1[i][j][k];
else
result[i][j][k]=parry[i][1];
/* CString str;
str.Format("(%d,%d,%d)%1.2f",i,j,k,result[i][j][k]);
MessageBox(str);
*/
}
//第六个结束
//第七个
for(k=12;k<15;k++)
for(j=0;j<5;j++)
for(i=0;i<5;i++)
{//每一列进行分别比较
if(parry[i][0]>=res1[i][j][k])
result[i][j][k]=res1[i][j][k];
else
result[i][j][k]=parry[i][0];
/* CString str;
str.Format("(%d,%d,%d)%1.2f",i,j,k,result[i][j][k]);
MessageBox(str);
*/
}
//第七个结束
//////////////////////////////////////////
//////////////////////////////////////////
///将求得的模糊矩阵进行取大运算,得到最后的一个5行5列的矩阵
//方法:进行排序
//结果:结果存放到数组result[i][j][14]
/////////////////////////////////////////
for(k=0;k<14;k++)
{
for(j=0;j<5;j++)
for(i=0;i<5;i++)
{
if((result[i][j][k]>=result[i][j][k+1]))
{
///进行交换,将较大的往后移动
temp=result[i][j][k+1];
result[i][j][k+1]=result[i][j][k];
result[i][j][k]=temp;
}
}
}
/* //输出测试
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{CString str;
str.Format("(%d,%d)%1.2f",i,j,result[i][j][14]);
MessageBox(str);
}
*/
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
////根据获取的外部水位来取相应的田间水位列,
///与求得的模糊矩阵进行先取小再取大运算。
////////////////////////////////////////
////////////////////////////////////////
//从读取水位中得到田间水位信息
// if(m_shuiwei==0.22)
// //取田间水位的第一列,即数组darry[i][0]
// p=1;
//
//将结果存放到数组reslast[5][5]
for(j=0;j<5;j++)
for(i=0;i<5;i++)
{///进行取小运算
if((darry[i][id]>=result[i][j][14]))
reslast[i][j]=result[i][j][14];
else
reslast[i][j]=darry[i][id];
}
/*/////////////*
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
CString str00;
str00.Format("(%d,%d)%1.2f",i,j,reslast[i][j]);
MessageBox(str00);
}
*/
///////////////////////////////////////
//////////////////////////////////////
//将reslast[i][j]中每一列进行取大运算
//最大值存放到reslast[i][0]中
for(i=0;i<4;i++)///j=4
for(j=0;j<5;j++)
{
if((reslast[i][j]>=reslast[i+1][j]))
{
temp=reslast[i][j];
reslast[i][j]=reslast[i+1][j];
reslast[i+1][j]=temp;
}
}
//
/*
for(i=0;i<5;i++)
{CString str00;
str00.Format("%1.2f",reslast[i][4]);
MessageBox(str00);
}
*/
//////////////////////////////////////////////
//////////////////////////////////////////////
//按照计算出来的值转换为实际需要的供水量
//共分为5个等级:-2,-1,0,1,2
//采用加权平均法计算
////////////////////////////////////////
putout=(-2*reslast[0][4]-1*reslast[1][4]+reslast[3][4]+2*reslast[4][4]);
sum=reslast[0][4]+reslast[1][4]+reslast[2][4]+reslast[3][4]+reslast[4][4];
putout=putout/sum;
/////////////////////
/////是否需要排水和注水
/////////////////
//将计算的结果显示出来
if((sum!=0))
{
strout.Format("%1.2f",putout);
str1.Format("%1.2fmm(毫米)",putout);
CEdit* last1=(CEdit*)GetDlgItem(IDC_EDIT5);
last1->SetWindowText(str1);
///同时显示警告信息框
///////////////////////
MessageBox("该时期应该灌水量为"+str1);
}
else
{MessageBox("此时不需要供水");
CEdit* last1=(CEdit*)GetDlgItem(IDC_EDIT5);
last1->SetWindowText("此时不需要供水");
}
///////////////////////
///////加一些修正模糊控制计算的结果
///与以前灌水和田间耗水进行比较得到一个值
//
char* pFileName=".\\test.txt";
CStdioFile file;
file.Open(pFileName,CFile::modeCreate|CFile::modeReadWrite);
file.WriteString(strout);
//file.WriteString("Hello\n");
MessageBox("存储成功!");
file.Close();
}
void CFuzzy2004View::OnButtonExit()
{
// TODO: Add your control notification handler code here
//退出程序
// CFuzzy2004View::DestroyWindow//();
// CFuzzy2004App::CloseAllDocuments(TRUE);
//this->;
MessageBox("请点击“文件”===》“退出”关闭!");
}
void CFuzzy2004View::OnButton1()
{
// TODO: Add your control notification handler code here
//将计算出来的值存放到文本文件中
}
void CFuzzy2004View::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
// OnOK();
KillTimer(1);
CRecordView::OnTimer(nIDEvent);
}
void CFuzzy2004View::OnCancelMode()
{
CRecordView::OnCancelMode();
// TODO: Add your message handler code here
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -