问题 F: 真值表(Ⅰ)
题目描述
同学们都学习过《离散数学》这门课程,知道真值表是用于逻辑中的一类数学用表,用来计算逻辑表示式在每一个逻辑变量取值组合下的值。在这里我们给定一个逻辑表达式,要求生成对应的真值表。提示一下,数据结构教材中介绍了数学表达式的处理算法,可以将其改造以适用于我们的项目。
项目分为三个子项目,第一部分为词法分析,即将逻辑表达式分隔为多个词(token)。下面给出两个例子。
例一:
逻辑表达式p^q中有p、^和q共三个词;
例二:
逻辑表达式p^(q^r)中有p、^、(、q、^、r和)共七个词。
逻辑联结词有五个,见下表,这些符号和教材上的有所不同,主要是为了方便。
否定 | 合取 | 析取 | 蕴涵 | 等值 |
! | ^ | || | -> | <-> |
引入括号,规定基本逻辑联接词优先顺序从高到低依次是:( )、!、∧、||、->、<->。 同一优先级,从左到右顺序进行。
输入
输入由多行组成,每行都是一个正确的逻辑表达式。
逻辑表达式小于100个字符。
一个正确的逻辑表达式可以包含小写字母,空格和逻辑联结词(含括号)。单个小写字母表示一个逻辑变量,一个表达式中逻辑变量的个数不超过10。空格作为分隔符, 不是词,同一个词的字符之间不能有空格。
输出
每一个逻辑表达式产生如下的输出:
第一行按顺序输出表达式中的所有词。每个词之间用空格分开。
第二行按字母序输出表达式中的所有逻辑变量,用空格分开。
第三行开始输出逻辑变量值的所有组合情况。
具体见样例。
样例输入 Copy
p p->q p||q
样例输出 Copy
p p 1 0 p -> q p q 1 1 1 0 0 1 0 0 p || q p q 1 1 1 0 0 1 0 0
代码
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<math.h>
int main(){char s[103];while(gets(s)){int sum=strlen(s);int flag=0;for(int i=0;i<sum;i++){if(s[i]!=' ')printf("%c",s[i]);if(s[i]<='z'&&s[i]>='a'){flag++;printf(" ");}if(s[i]!=' '&&!(s[i]<='z'&&s[i]>='a')&&!(s[i]=='-'&&s[i+1]=='>')&&!(s[i]=='|'&&s[i+1]=='|')&&!(s[i]=='<'&&s[i+1]=='-'&&s[i+2]=='>')&&!(s[i-1]=='<'&&s[i]=='-'&&s[i+1]=='>')&&!(s[i-2]=='<'&&s[i]=='-'&&s[i+1]=='>'))printf(" ");} printf("\n");for(int i=0;i<sum;i++)for(int j=0;j<sum;j++)if(s[i]==s[j]&&i!=j&&s[i]<='z'&&s[i]>='a'){s[i]='1';flag--;}for(int i=0;i<sum;i++)for(int j=0;j<sum;j++){if(i<j&&s[i]>s[j]&&s[i]<='z'&&s[i]>='a'&&s[j]<='z'&&s[j]>='a'){char l=s[i];s[i]=s[j];s[j]=l;}}for(int i=0;i<sum;i++)if(s[i]<='z'&&s[i]>='a')printf("%c ",s[i]);printf("\n");for(int j=1;j<=pow(2,flag);j++){int f= pow(2,flag);int d=flag-1;int k=(j-1)%f;if(j==pow(2,flag)+1)k=pow(2,flag); for(int i=0;i<sum;i++){if(s[i]<='z'&&s[i]>='a'){int b=pow(2,d);if(b==1){int c=j/b; if((c%2==0))printf("0 ");else printf("1 ");}else {int c=k/b; if((c%2==0))printf("1 ");else printf("0 ");}d--;}} printf("\n");}}return 0;
}
问题 F: 真值表(Ⅰ)相关推荐
- 问题 F: 真值表(Ⅰ) 2022
问题 F: 真值表(Ⅰ) 时间限制: 1 Sec 内存限制: 128 MB 提交: 4527 解决: 469 [状态] [提交] [命题人:cyh] 题目描述 同学们都学习过<离散数学>这 ...
- 汇编语言布尔表达式(NOT、AND、OR)
布尔代数(boolean algebra)定义了一组操作,其值为真(true)或假(false).它的发明者是十九世纪中叶的数学家乔治・布尔(George Boole). 在数字计算机发明的早期,人们 ...
- 离散数学 - 第一章 命题和命题公式
第一章 命题和命题公式 学习目标 1.理解命题的概念,能够正确的判别什么是命题,并能够给出命题的真值 ①具有唯一真值的陈述句称作命题.真值为真的命题称为真命题,真值为假的称为假命题. ②由原子命题通过 ...
- 定时器驱动数码管c语言,第五章 定时器和数码管
1.1基本数字逻辑门电路 不管是数字电路,还是C语言,我们都会经常遇到逻辑运算和逻辑电路,在这里我介绍一下,大家先简单了解一下,知道有这么回事,回头遇到了,再详细研究. 首先,在"逻辑&qu ...
- Codeforces Round #585 (Div. 2) F. Radio Stations 2-sat + 神仙建模
传送门 文章目录 题意: 思路: 题意: 你现在有ppp种电台,有nnn对关系(x,y)(x,y)(x,y)代表xxx电台或yyy电台中至少有一个,mmm对关系(x,y)(x,y)(x,y)代表xxx ...
- 用java输出真值表离散数学_离散数学 第一章 命题逻辑 1-4真值表与等价公式
定义1-4.1在命题公式中,对于分量指派真值的各种可能组合,就确定了这个命题公式的各种真值情况,把它汇列成表,就是命题公式的真值表. 现举例说明如下: 例题1 构造┓p∨q的真值表. 解 表1-4.1 ...
- 论如何通过真值表来求逻辑函数
1.废话:就是在HDLbits刷题拿到真值表的时候忘记了如何去求出其逻辑函数,从而写下这篇博文,好吧,这等数字电路基础知识也能忘,你不咸鱼谁咸鱼. 2.正题: 如上,该题即用与或非等基础门描述上述真值 ...
- 改进的判定条件覆盖讲解和真值表书写
即Modified Condition/Decision Coverage,缩写为MC/DC. 其中判定是指决定if或者循环语句是否执行的那个逻辑表达式. 基本思路.逻辑与表达式测试所有条件为真的情况 ...
- 如何用MATLAB绘制真值表,编写真值表
- MATLAB Simulink
- MathWorks 中国
编写真值表 在创建新真值表后,您就可以对它进行编写以根据您的设定执行.要编写真值表,您需要添加条件.决策和动作.有关创建真值表的详细信息,请参阅使用真值表对组合逻辑建模. 真值表仅在 Simulink ...
最新文章
- 僵尸进程的产生与处理
- python参数估计_用python求参数估计的置信区间
- 【转】VS2013中如何解决error C4996: 'fopen'问题
- 25利他行为可以学习和模仿吗
- 成都大数据等新经济代表行业在全国城市位居前列
- 11. SpringMVC拦截器(资源和权限管理)
- html5 ogv格式转换,Free OGV Video Converter(OGV视频转换器)
- 致敬!百里煤海战斗在第二战线上的人们
- 解释颜色深度概念:8 bit、16 bit、32 bit的意思
- BIOS设置|win10最快启动的方式
- 一次解决找不到 android.support.v7.XXX 问题
- 7月算法训练------第十四天(栈)解题报告
- phonegap-百度社会化分享-andriod插件-v2.0
- Office 365入门教程(一):开始使用Office 365
- vivado生成mig_Vivado 2015.1 MIG生成DDR4控制器例化问题求助!(急)
- OP向左,SaaS向右,如何选择?
- 简单记录fortran入门过程
- 当生活真的过得很艰难的时候,你是怎么熬过来的?(内容来自知乎,用于自省)...
- POJ 2240 Arbitrage 解题报告
- 【Orangepi Zero2 全志H616】wiringPi外设SDK安装
热门文章
- java调用百度地图API根据地理位置获取经纬度
- 主流分布式文件系统对比:区块链分布式技术引发云存储革命?HDFS,GFS,GPFS,FusionStorage,IPFS
- C++编程(一) :C++基础入门
- 在MS SQL語句中注意全角空格符和半角空格符的坑
- Android 高仿猎豹cm桌面,所有应用,快捷字母栏
- co01设置错误消息_pco01.dll文件下载,金山毒霸dll修复工具帮您解决文件丢失导致“pco01.dll找不到”的系统问题...
- [hadoop3.x]HDFS存储类型和存储策略(五)概述
- niuke --abc
- Windows 10 Cortana搜索栏无效变白色解决方案
- ATmega128单片机与舵机控制板通信