资源简介
求公式的主合取范式和主析取范式
c++写的类
代码片段和文件信息
#include “formula_header.h“//→?↑↓⊕⊙????█Θ⊕??????…▼△???♀
formulabase::formulabase()
{
for(int i=0;i<100;i++)variables[i]=false;
numVar=0;
}
formulabase::formulabase(const formulabase& rhs)
{
sourceFormula=rhs.sourceFormula;
for(int i=0;i<100;i++)variables[i]=false;
numVar=0;
}
formulabase::~formulabase()
{
while(!stk.empty())stk.pop();
vctofVar.clear();
vctofPoland.clear();
}
int formulabase::countTerms(int n)
{
if(n==0)
{
cout<<“invalid input!“< exit(0);
}
switch(n)
{
case 1:return 2;
case 2:return 4;
default:
{
int tempA=2tempB=2;
for(int i=2;i<=n;i*=2)tempA*=tempA;
i/=2;
if(i==n)return tempA;
i=n-i;
for(int j=2;j<=i;j*=2)tempB*=tempB;
for(j/=2;j tempB*=tempA;
return tempB;
}
}
}
bool formulabase::isVar(char ch)const
{
if (ch>=‘A‘&&ch<=‘Z‘)
return true;
return false;
}
void formulabase::getSource()
{
cout<<“Input the source formula:“< cin>>sourceFormula;
/*if(!isValid(sourceFormula))
cout<<“Invalid input !“
“Operate again:“< cin>>sourceFormula;*/
}
void formulabase::getInversePoland()
{
char temptemp1;
for(int i=0;sourceFormula[i]!=‘\0‘;i++)
{
temp=sourceFormula[i];
if(isVar(temp))
{
if(!variables[temp])
{
numVar++;
vctofVar.push_back(temp);
variables[temp]=true;
}
vctofPoland.push_back(temp);
}
else
switch(temp)
{
case‘→‘:case‘↑‘:
case‘↓‘:case‘⊕‘:
case‘⊙‘:
while(!stk.empty())
{
if(stk.top()==temp)
{
vctofPoland.push_back(temp);
stk.pop();
}
else break;
}
stk.push(temp);
break;
case ‘(‘:case ‘!‘:
stk.push(temp);
break;
case ‘+‘:
while (!stk.empty())
{
if(stk.top()!=‘(‘)
{
temp1=stk.top();
vctofPoland.push_back(temp1);
stk.pop();
}
else break;
}
stk.push(temp);
break;
case ‘*‘:
while (!stk.empty())
{
temp1=stk.top();
if(stk.top()==‘*‘||stk.top()==‘!‘)
{
vctofPoland.push_back(temp1);
stk.pop();
}
else
break;
}
stk.push(temp);
break;
case ‘)‘:
while (!stk.empty())
{
if(stk.top()!=‘(‘)
{
temp1=stk.top();
vctofPoland.push_back(temp1);
stk.pop();
}
else break;
}
if(stk.empty())exit(0);
stk.pop();//pop the operator ‘(‘
break;
}
}
while(!stk.empty())
{
temp1=stk.top();
vctofPoland.push_back(temp1);
stk.pop();
}
}
void formulabase::assign(int minterm)
{
int temp=minterm;
vector::const_iterator itr=vctofVar.begin();
for(;itr!=vctofVar.end();itr++)
{
variables[*itr]=bool(temp&1);
temp=temp>>1;
}
}
bool formulabase::compute(int minterm)
{
assign(minterm);
char temp;
bool valueAvalueB;
vector::const_iterator i
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 7874 2009-11-23 16:02 c++主范式\formula.cpp
文件 1097 2009-11-22 12:09 c++主范式\formula_header.h
文件 312 2009-11-22 09:54 c++主范式\main.cpp
目录 0 2009-12-13 08:44 c++主范式
----------- --------- ---------- ----- ----
9283 4
- 上一篇:C语言设计一元稀疏多项式课程设计+代码
- 下一篇:吃豆人 c++ 源程序
相关资源
- 吃豆人 c++ 源程序
- C++实现MATLAB的filter函数
- 实验室设备管理系统C++
- C++课程设计之简易英汉字典
- 传热学非稳态热传导问题网格划分数
- 学分管理系统c++课程设计
- 阿伦方差的C++ 版本
- 如何在VC++ 6.0创建RTX项目
- utf8编码解码的纯C++代码
- visualc++下位机温度测量串口通信与实
- c++写的OpenGL程序透明金字塔有加上光
- C++二叉树基于Mfc的程序开发
- C++ blackjack经典21点小游戏 课程设计
- 多用户多级目录文件系统c++源码(含
- libstdc++.so.6.0.22 or GLIBCXX_3.4.22 in tenso
- visual c++ 6.0 完整扫雷源代码
- 数据结构算法与应用 c++语言描述(第
- c++之sha1类
- 信息学奥赛NOIP系列课程之C++部分课程
- VC++ 实现将本地文件通过HTTP上传到网
- PCA融合算法C++代码
- c++版遗传算法基本算法
- VC++采用内存映射方式高效率读写大数
- 页面置换算法OPT、FIFO、LRU实现--C++版
- 分支限界法求圆排列问题
- http 协议解析类 c++
- 用C++语言写的完整的人脸识别程序源
-
mfc通过xm
l文件生成word文档 - 哈夫曼最小生成树及最短路径代码
- C++写的多级反馈队列代码
评论
共有 条评论