利用真值表法求取主析取范式以及主合取范式的实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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
{
maxTop = mSize - 1;
s = new T[mSize];
top = -1;
}
template
bool SeqStack
{
if (IsEmpty())
{
cout << "Empty" << endl;
return false;
}
x = s[top];
return true;
}
template
bool SeqStack
{
if (IsFull())
{
cout << "Overflow" << endl;
return false;
}
s[++top]=x;
return true;
}
template
bool SeqStack
{
if(IsEmpty())
{
cout << "Underflow" << endl;
}
top--;
return true;
}
class Calculator
{
public:
Calculator(int maxSize):s(maxSize){}
void Change();