• 大小: 3KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-22
  • 语言: C/C++
  • 标签: c++  主范式  

资源简介

求公式的主合取范式和主析取范式 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


评论

共有 条评论