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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

#include

#include

#include

using namespace std;

char str[100]; //输入的命题公式

int tv[20] = {0}; //真值指派的数组

int length; //命题公式长度

char expression[100]; //将命题公式中的命题变元变为真值后的数组

int icp(const char c) //联结词的栈外优先级

{

int result = -1;

switch(c)

{

case '#': result = 0; break;

case '(': result = 10; break;

case '!': result = 9; break;

case '&': result = 6; break;

case '|': result = 4; break;

case '>': result = 2; break;

case ')': result = 1;

}

return result;

}

int isp(const char c) //联结词的栈内优先级

{

int result = -1;

switch(c)

{

case '#': result = 0; break;

case '(': result = 1; break;

case '!': result = 8; break;

case '&': result = 7; break;

case '|': result = 5; break;

case '>': result = 3; break;

case ')': result = 10;

}

return result;

}

void Plus(int a[],int q) //二进制加法指派真值

{

a[q]=a[q]+1;

for (int i = q; a[i] == 2; i--)

{

a[i]=0;

a[i-1]=a[i-1]+1;

}

}

template

class Stack

{

public:

virtual bool IsEmpty() const = 0;

virtual bool IsFull() const = 0;

virtual bool Top(T& x) const = 0;

virtual bool Push(T x) = 0;

virtual bool Pop() = 0;

virtual void Clear() = 0;

};

template

class SeqStack: public Stack //顺序栈类

{

public:

SeqStack(int mSize = 30);

~SeqStack() { delete []s; }

bool IsEmpty() const { return top == -1; }

bool IsFull() const { return top == maxTop; } bool Top(T& x) const;

bool Push(T x);

bool Pop();

void Clear() { top = -1; }

private:

int top;

int maxTop;

T* s;

};

template

SeqStack::SeqStack(int mSize)

{

maxTop = mSize - 1;

s = new T[mSize];

top = -1;

}

template

bool SeqStack::Top(T& x) const

{

if (IsEmpty())

{

cout << "Empty" << endl;

return false;

}

x = s[top];

return true;

}

template

bool SeqStack::Push(T x)

{

if (IsFull())

{

cout << "Overflow" << endl;

return false;

}

s[++top]=x;

return true;

}

template

bool SeqStack::Pop()

{

if(IsEmpty())

{

cout << "Underflow" << endl;

}

top--;

return true;

}

class Calculator

{

public:

Calculator(int maxSize):s(maxSize){}

void Change();

相关文档
最新文档