c++ 复合命题打真值表

第一次写博客,新鲜又紧张,写的不好,大犇轻喷。

实现功能 从文本中读取复合命题,并在文本文件中打印真值表

[如果不清楚文本读取,可以先浏览这个博客](https://www.cnblogs.com/uniqueliu/archive/2011/08/03/2126545.html)
 简单来说就是用ifstream和ofstream实例化一个对象,并将其与你要操作的文本文件绑定;
 ifstream用于从文本里读取数据,它重载了>>;
 ofstream用于创建一个文本文件,并将数据输入到改文本里,它重载了<<。
 
  [这里还用到了栈和后缀表达式,不太清楚的可以参考这个博客](https://blog.csdn.net/PaRzVaL/article/details/105360855?tdsourcetag=s_pctim_aiomsg)

#整体思路

在这里插入图片描述
由于这里需要对数据进行频繁的随机访问,而且只需要在容器的尾端进行删除和添加的操作,所以这里可以直接使用vector或者指针,
下面的代码是以vector为例实现的

这里支持的逻辑连接词包括析取,合取,否定,蕴含和等价连接词
|表示析取,&表示合取,!表示取反,>表示蕴含,=表示等价

#代码

#include<bits/stdc++.h> 
using namespace std;
class Pro
{
   
   
    private: 
      vector<char> book_1;            //储存子命题 
	  vector<bool> ans;              //储存后缀表达式 
	  vector<char> pro_2,pro;       //堆栈储存复合命题 
	  bool  book_2[20];            //储存子命题对应的布尔变量 
	  string pro_1;
	  
  	  bool  contain(bool a,bool b);  	//自定义蕴含运算 
	  bool  equ(bool a,bool b);        //自定义等价运算 
      void  star();                   //文本处理工作 
	  void  add();                   //统计子命题及其个数 
	  void  put_out();              //对后缀表达式进行运算
	  void  mind();                //对用户指令进行判断 
	public:
      void slove()
      {
   
   
      	star(); 
        add();
        put_out();
	  }
};
void Pro::mind()
{
   
   
	   char op;
	   cin>>op;
	   if(op=='Y')
	   {
   
   
	   	cin>>pro_1;
	   }
	   else if(op=='N')
	   {
   
   
	   	ifstream infile("复合命题.txt");
        getline(infile,pro_1);
	   }
	   else
	   {
   
   
	   	cout<<"指令错误,请重新输入指令"<<endl; 
	   	mind();
	   }
}
void Pro::star()
{
   
   
	   //此处规定 子命题为小写字母  !为非  &为合取 |为析取  >为蕴含 =为等价 
	   ofstream outfile("复合命题.txt");
	   outfile<<"!(q|p)>!r&m" ;
	   outfile.close();
	   cout<<"!注意 !  此处规定 自命题为小写字母  !为非  &为合取 |为析取  >为蕴含 =为等价  " <<endl<<endl; 
	   cout<<"目前计算的是: p|!q>r|((!p&!r>q)>r&(q|p&!r)>p|!q>r|)(!p&!r>q)>r&(q|p&!r) 的真值表"<<endl;
	   cout<<"如果你要自己输入一个复合命题打表 请输入Y 否则输入N"<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值