构造任意合式公式的真值表可编辑修改word版.docx

上传人:b****8 文档编号:10330241 上传时间:2023-02-10 格式:DOCX 页数:8 大小:15.43KB
下载 相关 举报
构造任意合式公式的真值表可编辑修改word版.docx_第1页
第1页 / 共8页
构造任意合式公式的真值表可编辑修改word版.docx_第2页
第2页 / 共8页
构造任意合式公式的真值表可编辑修改word版.docx_第3页
第3页 / 共8页
构造任意合式公式的真值表可编辑修改word版.docx_第4页
第4页 / 共8页
构造任意合式公式的真值表可编辑修改word版.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

构造任意合式公式的真值表可编辑修改word版.docx

《构造任意合式公式的真值表可编辑修改word版.docx》由会员分享,可在线阅读,更多相关《构造任意合式公式的真值表可编辑修改word版.docx(8页珍藏版)》请在冰豆网上搜索。

构造任意合式公式的真值表可编辑修改word版.docx

构造任意合式公式的真值表可编辑修改word版

构造任意合式公式的真值表

#include"stdio.h"#include"thesis.h"intmain()

{

Thesisa[30];charx='1';inti=0,N;

cout<<"请输入命题变元(不超过30个)(输入'0'结束

输入):

"<

=48)

{

cin>>x;if(i>19)

{cout<<"Error:

变元个数太多!

"<

if(x!

='0')

{

a[i].inname(x);i++;

}

}

N=i;

intM;

M=N;

stringA;

cout<<"请输入命题公式(否定:

,合取:

&,析取:

|)"<>A;

cout<

"<

for(intj=0;j

system("pause");return0;

}

 

#include"thesis.h"

#ifndefTHESIS_H#defineTHESIS_H#include

#include#includeusingnamespacestd;

classThesis//命题类

{

intvalue;charname;//value:

命题的真值(0/1)name:

命题名

public:

Thesis(){value=2;name='A';};friendThesisoperator!

(Thesis&q)

{q.invalue(1-q.getvalue());returnq;}//重

载逻辑运算符

friendThesisoperator&(Thesis&p,Thesis&q)

{p.invalue((p.getvalue()+q.getvalue())/2);returnp;}friendThesisoperator|(Thesis&p,Thesis&q)

{if(p.getvalue()+q.getvalue()>0)p.invalue

(1);elsep.invalue(0);

returnp;}

friendThesisoperator>(Thesis&p,Thesis&q)

{if(p.getvalue()==1&&q.getvalue()==0)p.invalue(0);

elsep.invalue

(1);

returnp;}

friendThesisoperator<(Thesis&p,Thesis&q)

{if(p.getvalue()==q.getvalue())p.invalue

(1);elsep.invalue(0);

returnp;}

voidinvalue(intx){value=x;}//输入valuevoidinname(charx){name=x;}//输入nameintgetvalue(){returnvalue;}//获取真值intgetname(){returnname;}//获取命题名

};

voidassignment(stringA,intN,intM,Thesisa[]);//声明函数

intbds(stringA,intN,Thesisa[]);

intrun(stringA,int&i,intL,intN,Thesisa[]);

voidassignment(stringA,intN,intM,Thesisa[])//命题赋值并计算真值

{

for(intj=0;j<2;j++)

{

a[N-1].invalue(j);if(N>1)

{

assignment(A,N-1,M,&a[0]);

}

else

{

for(inti=0;i

{

cout<

}

cout<

}

}

}

intbds(stringA,intN,Thesisa[])//识别输入的表达式并计算真值

{

Thesisanswer,Temp;

chard[5]={'!

','|','&','>','<'};//定义运算符号集合intL;

inti=0;

L=strlen(&A[0]);//表达式长度while(i

{

if(A[i]=='(')

{

intk=1;

for(intj=i+2;j

{

if(k!

=0)

{

if(A[j]=='(')k++;if(A[j]==')')

k--;

}

if(k==0)

{

intl=j-i-1;

char*p=newchar[l+1];stringB;

for(intm=0;m

p[l]='\0';

B=p;

 

}

}

else

{

deletep;Temp.invalue(bds(B,N,&a[0]));if(i==0)

answer.invalue(Temp.getvalue());i=j+1;

break;

}

if(A[i]=='!

')//否定的计算

{

Temp.invalue(run(A,i,L,N,&a[0]));answer=!

Temp;

i++;

continue;

}

elseif(A[i]=='|')

{

Temp.invalue(run(A,i,L,N,&a[0]));answer=answer|Temp;

i++;

continue;

}

elseif(A[i]=='&')

{

Temp.invalue(run(A,i,L,N,&a[0]));answer=answer&Temp;

i++;

continue;

}

elseif(A[i]=='<')

{

Temp.invalue(run(A,i,L,N,&a[0]));answer=answer

i++;

continue;

}

elseif(A[i]=='>')

{

Temp.invalue(run(A,i,L,N,&a[0]));answer=answer>Temp;

i++;

continue;

}

else

{

for(intj=0;j

{if(A[i]==char(a[j].getname()))

{

Temp.invalue(a[j].getvalue());if(i==0)

answer.invalue(Temp.getvalue());i++;

break;

}

}

}

}

}

returnanswer.getvalue();

}

intrun(stringA,int&i,intL,intN,Thesisa[])

{

ThesisTemp;

if(A[i+1]=='(')

{

intk=1;

for(intj=i+2;j

{

if(k!

=0)

{

if(A[j]=='(')k++;if(A[j]==')')

k--;

}

if(k==0)

{

intl=j-i-1;

char*p=newchar[l+1];stringB;

for(intm=0;m

p[l-1]='\0';

B=p;

deletep;

Temp.invalue(bds(B,N,&a[0]));i=i+j;

break;

}

}

}

else

{

intj=0;while(j

{

if(A[i+1]==char(a[j].getname()))

{

i++;

Temp=a[j];break;

}

j++;

}

}

returnTemp.getvalue();

}

#endif

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 建筑土木

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1