⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fuzzy2004view.cpp

📁 自动化节水灌溉模糊控制系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	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 + -