又一次意识到 离散数学 在程序逻辑中的应用

来源:互联网 发布:node.js 后端还是前端 编辑:程序博客网 时间:2024/04/28 21:22

1、有俩变量需要考虑,一个是srv一个是local。

有三种情况:A、srv为空/local为空  B、srv非空/local空  C、srv空/local非空  。

srv为空的返回值a为1/2 ,非空的返回值a为0 。local为空的返回值b为1/2,非空的返回值b为0。


2、用  离散数学  的角度思考,可以把a当做srv为空,!a当做srv非空。

A情况可改写成a&b ,B情况可改写成!a&b,C情况可改写成a&!b  

if ( a & b ){

……

} else if ( !a & b ) {

……

} else if ( a & !b ) {

……

}

3、例如以下代码:

//a & b 空   !a & b srv非空local空  a & !b srv空local非空   !a & !b srv非空local非空 if ( a & b ) {WriteLog("The ServerIp and Local Ip is NULL");nSetIpProcess = 1;} else if ( !a & b ) {WriteLog("The ServerIp  isn't NULL,theLocal Ip is NULL");SetHostsServerIp();nSetIpProcess = 0;} else if ( !b ) {//Ip正确(第一位位不为空),得判断serverip是否为空,子网掩码是否正确,网关是否为空if( a ){//若serverip为空localip非空,就不设置serverip,设置localipWriteLog("The ServerIp  is NULL,theLocal Ip isn't NULL");} else if ( !a ) {WriteLog("The ServerIp  isn't NULL,theLocal Ip isn't NULL");SetHostsServerIp();}if(c == 1 || c == 2 || c == 3)//子网掩码不正确,二进制的1必须是连续的{WriteLog("设置失败,请输入正确的子网掩码!");sprintf(szPath,"%sresult\\error_InvalidNetmask.png",exepath);Form2->Image1->Picture->LoadFromFile(szPath);Form2->Left = Form1->Left+ FORM2LEFT;Form2->Top = Form1->Top+ FORM2TOP;Form2->suiButton1->Left = FORM2BUTTONLEFT;Form2->suiButton1->Top = FORM2BUTTONTOP;Form2->ShowModal();//"设置失败,请输入正确的子网掩码!"return ;}else if(c == 0)//子网掩码正确{if(d == 1 || d == 2)//网关为空{if(a == 0)//如果服务器Ip正确,将服务器Ip赋给网关{strcpy(szGateway,szServerIp);}else//如果服务器Ip不正确,将Ip赋给网关{strcpy(szGateway,szIp);}}}unsigned long ulThreadResult = (unsigned long)_beginthreadex(NULL,0,(unsigned (__stdcall*)(void*))SetIp,NULL,0,NULL);} 

0 0