学期)课程名称 离散数学 实验名称 利用真值表法求主析取范式及主合取范式的 实现 实验时间 指导单位指导教师 学生姓名 班级学号 学院(系) 实验名称利用真值表法求主析取范式及 主合取范式的实现 指导教师 实验类型 上机 实验学时 实验目的和要求能够列出合式公式的真值表并给出相应主析取范式和主合取范 二、实验环境(实验设备)硬件:PC 三、实验原理及内容内容:编程实现用真值表法求任意含三个以内变量的合式公式的主析取 范式和主合取范式。 原理:首先读入变元个数,然后读入合式公式,用堆栈的知识将中缀表 达式转化为后缀表达式,调用否定、析取、合取、条件、双条件的函数计算 取不同真值时合式公式的真值,然后输出真值表,调用计算主析取范式和主合取范式的函数并输出。 程序:#include#include#include#includeusing namespace std; string OriginalForm; //原式 string Hequ; //主合取范式 string Xiqu; //主析取范式 class SeqStack//建立一个堆栈,利用将中缀表达式转为后缀表达式 public:SeqStack(int mSize); ~SeqStack(); char Top(); bool Push(char boolPop(); private: char *st; int top; int maxtop; SeqStack::SeqStack(intmSize) -1;st newchar[mSize]; charSeqStack::Top() returnst[top]; boolSeqStack::Push(char maxtop)return false; st[++top] returntrue; boolSeqStack::Pop() -1)return false; top--; return true; result;int intnumber;//用number 表示变元的个数 SeqStack stack(200); void stack.Top();stack.Pop(); result result;stack.Push(result); voidDoubleif() //双条件 boolCanIn(char out)//优先级的判断 stack.Top();int break;case break;case break;case break;case break;case break;case 11;break; case 12;break; break;case 12;break; case break;case break;case break;case break;case 10;break; case returntrue; else return false; voidInfixToPostfix()//中缀表达式转后缀表达式 stringtmp stack.Push(´#´);for(int (unsigned)i