利用真值表法求主析取范式及主合取范式的实现.docx

上传人:b****2 文档编号:2311829 上传时间:2022-10-28 格式:DOCX 页数:17 大小:146.97KB
下载 相关 举报
利用真值表法求主析取范式及主合取范式的实现.docx_第1页
第1页 / 共17页
利用真值表法求主析取范式及主合取范式的实现.docx_第2页
第2页 / 共17页
利用真值表法求主析取范式及主合取范式的实现.docx_第3页
第3页 / 共17页
利用真值表法求主析取范式及主合取范式的实现.docx_第4页
第4页 / 共17页
利用真值表法求主析取范式及主合取范式的实现.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

利用真值表法求主析取范式及主合取范式的实现.docx

《利用真值表法求主析取范式及主合取范式的实现.docx》由会员分享,可在线阅读,更多相关《利用真值表法求主析取范式及主合取范式的实现.docx(17页珍藏版)》请在冰豆网上搜索。

利用真值表法求主析取范式及主合取范式的实现.docx

利用真值表法求主析取范式及主合取范式的实现

 

实验报告

(/学年第一学期)

 

课程名称

离散数学

实验名称

利用真值表法求主析取范式及主合取范式的实现

实验时间

指导单位

指导教师

学生姓名

班级学号

学院(系)

专业

实验报告

实验名称

利用真值表法求主析取范式及主合取范式的实现

指导教师

实验类型

上机

实验学时

4

实验时间

一、实验目的和要求

能够列出合式公式的真值表并给出相应主析取范式和主合取范式。

二、实验环境(实验设备)

硬件:

PC机。

软件:

Code:

:

Blocks(C++)

三、实验原理及内容

内容:

编程实现用真值表法求任意含三个以内变量的合式公式的主析取范式和主合取范式。

原理:

首先读入变元个数,然后读入合式公式,用堆栈的知识将中缀表达式转化为后缀表达式,调用否定、析取、合取、条件、双条件的函数计算P、Q、R取不同真值时合式公式的真值,然后输出真值表,调用计算主析取范式和主合取范式的函数并输出。

程序:

#include

#include

#include

#include

usingnamespacestd;

stringOriginalForm;//原式

stringHequ;//主合取范式

stringXiqu;//主析取范式

classSeqStack//建立一个堆栈,利用将中缀表达式转为后缀表达式

{

public:

SeqStack(intmSize);

~SeqStack();

charTop();

boolPush(charx);

boolPop();

private:

char*st;

inttop;

intmaxtop;

};

SeqStack:

:

SeqStack(intmSize)

{

maxtop=mSize-1;

top=-1;

st=newchar[mSize];

}

SeqStack:

:

~SeqStack()

{

delete[]st;

}

charSeqStack:

:

Top()

{

returnst[top];

}

boolSeqStack:

:

Push(charx)

{

if(top==maxtop)

returnfalse;

st[++top]=x;

returntrue;

}

boolSeqStack:

:

Pop()

{

if(top==-1)

returnfalse;

top--;

returntrue;

}

intp,q,r,s,t,u;

inta,b,result;

intv=0;

intnumber;//用number表示变元的个数

SeqStackstack(200);

voidNot()//否定

{

a=stack.Top();

stack.Pop();

result=a==1?

0:

1;

stack.Push(result);

}

voidOr()//析取

{

result=a+b;

result=result>1?

1:

result;

stack.Push(result);

}

voidAnd()//合取

{

result=a*b;

stack.Push(result);

}

voidIf()//条件,b->a

{

result=(b==1&&a==0)?

0:

1;

stack.Push(result);

}

voidDoubleif()//双条件

{

result=(b==a)?

1:

0;

stack.Push(result);

}

boolCanIn(charout)//优先级的判断

{

charin=stack.Top();

inti,o;

switch(in)

{

case'#':

i=0;break;

case'(':

i=1;break;

case'-':

i=3;break;

case'>':

i=5;break;

case'|':

i=7;break;

case'&':

i=9;break;

case'!

':

i=11;break;

case')':

i=12;break;

}

switch(out)

{

case'#':

o=0;break;

case'(':

o=12;break;

case'-':

o=2;break;

case'>':

o=4;break;

case'|':

o=6;break;

case'&':

o=8;break;

case'!

':

o=10;break;

case')':

o=1;break;

}

if(i

returntrue;

else

returnfalse;

}

voidInfixToPostfix()//中缀表达式转后缀表达式

{

stringtmp="";

stack.Push('#');

for(inti=0;(unsigned)i

{

if(OriginalForm[i]=='P'||OriginalForm[i]=='Q'||OriginalForm[i]=='R'||OriginalForm[i]=='S'||OriginalForm[i]=='T'||OriginalForm[i]=='U')

{

tmp=tmp+OriginalForm[i];

continue;

}

if(CanIn(OriginalForm[i]))

stack.Push(OriginalForm[i]);

elseif(OriginalForm[i]==')')

{

while(stack.Top()!

='(')

{

tmp=tmp+stack.Top();

stack.Pop();

}

stack.Pop();

}

else

{

do

{

tmp=tmp+stack.Top();

stack.Pop();

}while(!

CanIn(OriginalForm[i]));

stack.Push(OriginalForm[i]);

}

}

while(stack.Top()!

='#')

{

tmp=tmp+stack.Top();

stack.Pop();

}

stack.Pop();

OriginalForm=tmp;

}

voidCalculate()//计算主析取范式和主合取范式的函数

{

if(number==3)

{

for(inti=0;(unsigned)i

{

if(OriginalForm[i]=='P'||OriginalForm[i]=='Q'||OriginalForm[i]=='R')

{

v=OriginalForm[i]=='P'?

p:

OriginalForm[i]=='Q'?

q:

r;

stack.Push(v);

continue;

}

if(OriginalForm[i]!

='!

')

{

a=stack.Top();

stack.Pop();

b=stack.Top();

stack.Pop();

}

switch(OriginalForm[i])

{

case'-':

Doubleif();break;

case'>':

If();break;

case'|':

Or();break;

case'&':

And();break;

case'!

':

Not();break;

}

}

}

if(number==2)

{

for(inti=0;(unsigned)i

{

if(OriginalForm[i]=='P'||OriginalForm[i]=='Q')

{

v=OriginalForm[i]=='P'?

p:

q;

stack.Push(v);

continue;

}

if(OriginalForm[i]!

='!

')

{

a=stack.Top();

stack.Pop();

b=stack.Top();

stack.Pop();

}

switch(OriginalForm[i])

{

case'-':

Doubleif();break;

case'>':

If();break;

case'|':

Or();break;

case'&':

And();break;

case'!

':

Not();break;

}

}

}

}

voidPrint()

{

if(number==3)

{

cout<<"P\t"<<"Q\t"<<"R\t"<<"Z"<

for(p=1;p>=0;p--)

{

for(q=1;q>=0;q--)

{

for(r=1;r>=0;r--)

{

Calculate();

if(result==1)

Xiqu=Xiqu+"("+(p==1?

"P":

"!

P")+"&"+(q==1?

"Q":

"!

Q")+"&"

+(r==1?

"R":

"!

R")+")"+"|";

else

Hequ=Hequ+"("+(p==0?

"P":

"!

P")+"|"+(q==0?

"Q":

"!

Q")+"|"

+(r==0?

"R":

"!

R")+")"+"&";

cout<

}

}

}

}

if(number==2)

{

cout<<"P\t"<<"Q\t"<<"Z"<

for(p=1;p>=0;p--)

{

for(q=1;q>=0;q--)

{

Calculate();

if(result==1)

Xiqu=Xiqu+"("+(p==1?

"P":

"!

P")+"&"+(q==1?

"Q":

"!

Q")+")"

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

当前位置:首页 > 医药卫生 > 基础医学

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

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