命题公式与真值表的应用
程序员文章站
2022-05-27 15:18:12
...
第1关:熟悉命题联接词真值定义
#include<stdio.h>
#include<iostream>
using namespace std;
int main() {
int p, q, a[5];
while(cin>>p>>q)
{
a[0] = !p;
a[1] = p & q;
a[2] = p | q;
p == 1 && q == 0 ? a[3] = 0 : a[3] = 1;
p == q ? a[4] = 1 : a[4] = 0;
for (int i = 0; i < 5; i++) {
if (i != 0) printf(" ");
printf("%d", a[i]);
}
cout<<endl;
}
return 0;
}
第2关:生成单个命题公式的命题变元字典
#include<stdio.h>
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
using namespace std;
int main()
{
char ch;
int i;
set<char>s;
set<char>::iterator it;
while (cin >> ch)
{
if (ch >= 'a' && ch <= 'z')
{
s.insert(ch);
}
}
for(it=s.begin();it!=s.end();it++)
cout << *it;
return 0;
}
第4关:生产命题变元的真值指派
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
const int Maxsixe = 100;
int main() {
char Mond[Maxsixe] = "";//命题变元字典
char value[Maxsixe];//命题变元的一个真值指派
int lenM = 0;//命题变元个数
while(cin >> Mond){
lenM=strlen(Mond);
cout << Mond << endl;
for (int i=0;i<lenM;i++)//初始化
value[i]='0';
value[lenM]='\0';//字符串结束符
cout << value << endl;//00
for (int i=0;i<pow(2,lenM)-1/*3*/;i++)
{
value[lenM-1]++;//末位加1 // 01
for(int j=lenM-1;j>=0;j--)
{
if(value[j]=='2')//判断是否为2
{
value[j]-=2;//大于二进一
value[j-1]++;//前一位数加一
}
}
cout << value << endl;
}
}
return 0;
}
上一篇: 如何预防老年痴呆 专家建议和咖啡