-
#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 <<
return false;
}
x = s[top];
return true;
}
template
bool
SeqStack
{
if (IsFull())
{
cout <<
return false;
}
s[++top]=x;
return true;
}
template
bool
SeqStack
{
if(IsEmpty())
{
cout <<
}
top--;
return
true;
}
class Calculator
{
public:
Calculator(int maxSize):s(maxSize){}
void Change();
int Run();
void
Solve();
void Clear()
{
(); }
private:
SeqStack
//
运算栈
void PushOperand(bool);
bool GetOperands(bool &, bool &);
void DoOperator(char);
};
void
Calculator::PushOperand(bool op)
{
(op);
}
bool
Calculator::GetOperands(bool & op1, bool & op2)
//
获取栈顶两个元素
{
if (!(op1))
{
cerr <<
return false;
}
();
if (!(op2))
{
cerr <<
return false;
}
();
return true;
}
void
Calculator::DoOperator(char oper)
/
/
联结词运算
{
bool left, right;
bool result =
GetOperands(left, right);
if (result)
switch(oper)
{
case '!': (!left && right); break;
//not
运算
case '&': (left
&& right); break;
//and
运算
case '|': (left
|| right); break;
//or
运算
case '>':
(!right || left); break;
//
条件运算
}
-
-
-
-
-
-
-
-
-
上一篇:《菜根谭》全文及译文
下一篇:肺心病相关病理生理