精华内容
下载资源
问答
  • 真值表逻辑表达式的方法

    万次阅读 多人点赞 2020-02-12 08:59:59
    第一步:从真值表内找输出端为“1”的各行,把每行的输入变量成乘积形式;遇到“0”的输入变量上加非号。 第二步:把各乘积项相加,即得逻辑函数的表达式。 第二种方法:以真值表内输出端“0”为准 第一步:从真值...
    • 第一种方法:以真值表内输出端“1”为准

    第一步:从真值表内找输出端为“1”的各行,把每行的输入变量写成乘积形式;遇到“0”的输入变量上加非号。

    第二步:把各乘积项相加,即得逻辑函数的表达式。

    • 第二种方法:以真值表内输出端“0”为准

    第一步:从真值表内找输出端为“0”的各行,把每行的输入变量写成求和的形式,遇到“1”的输入变量上加非号。

    第二步:把各求和项相乘,即得逻辑函数表达式。

    • 总结,哪种方法得到的表达式简洁就用哪种。
    展开全文
  • 真值表生成逻辑表达式程序

    千次阅读 2013-04-15 12:07:00
    boomhttp://ddd.fit.cvut.cz/prj/BOOM/index... BOOM –QG –Ov in.txt out.txt 逻辑表达式生成真值表http://turner.faculty.swau.edu/mathematics/materialslibrary/truth/ 转载于:https://www.cnblogs.com/mipscp...

    boom http://ddd.fit.cvut.cz/prj/BOOM/index.php?page=main

    BOOM –QG  –Ov in.txt out.txt

    逻辑表达式生成真值表 http://turner.faculty.swau.edu/mathematics/materialslibrary/truth/

    转载于:https://www.cnblogs.com/mipscpu/archive/2013/04/15/3021806.html

    展开全文
  • 逻辑表达式化为真值表

    千次阅读 2014-12-24 10:53:01
    试着了一下,发现自己对栈的应用能力还是不够,不过很感谢 supermary863的博客http://blog.csdn.net/supermary863/article/details/6363570。 然后模仿着把这个离散实验作业完成了。可能存在一些小问题,但是...
    这个处理方法和多项式的处理方法一样。试着写了一下,发现自己对栈的应用能力还是不够,不过很感谢 
    

    supermary863的博客http://blog.csdn.net/supermary863/article/details/6363570。

    然后模仿着把这个离散实验作业完成了。可能存在一些小问题,但是总体思路就是那样吧。

    /*程序设计类似与多项式的计算,用双栈来实现,完成<任意个>变量的表达式的运算*/
    /*变量请统一用小写字母*/
    /*目前支持的逻辑运算符有~(非),V(析取,用大写字母V),^(合取,用shitf + 6), 以及->(蕴含)。
    没有添加<->(只是多添加一个操作符,优先级同->,同理,有兴趣的读者可以自己实现)*/
    /*程序运行方式见main函数入口。*/
    
    
    #include <iostream>
    #include <string>
    #include <cstring>
    #include <cstdio>
    #include <stack>
    using namespace std;
    
    class TrueFalseTable
    {
    protected:
        string read;    //限定表达式变量为小写字母。
        char x[10];     //存储变量。
        int x_num;      //变量数。
        int value[10]; //下标对应变量的值0或1。
        int Ans;    //每行真值表计算一个值。
        /*打印开头部分*/
        void printTitle()
        {
            for(int i = 0; i < x_num; i ++)
            {
                printf("%c\t", x[i]);
            }
            cout << read << endl;
            printf("-------------------------------------------------\n");
        }
        /*检测是否穷举了所有的真值表*/
        bool check_end()
        {
            for(int i = 0; i < x_num; i ++)
            {
                if(value[i] == 0)
                    return false;
            }
            return true;
        }
        /*获得字符对应的当前真值*/
        int getValue(char c)
        {
            for(int i = 0; i < x_num; i ++)
            {
                if(x[i] == c)
                {
                    return value[i];
                }
            }
            return -1;
        }
    public:
        TrueFalseTable() {Ans = 0;}
    
        /*允许用字符串直接初始化表达式*/
        TrueFalseTable(string read)
        {
    		Ans = 0;
            this->read = read;
        }
    
        /*初始化,主要是输入表达式,统计变量个数*/
        void Init()
        {
            if(read == "")
                cin >> read;
            int tmp[27] = {0}, k = 0;
            for (int i = 0; i < read.size(); i ++)
            {
                if(read[i] >= 'a' && read[i] <= 'z')
                {
                    tmp[read[i]-'a'] ++;   //统计出现的字母,即变量个数。
                }
            }
            for(int i = 0; i < 27; i ++)
            {
                if(tmp[i] != 0)
                {
                    x[k++] = i + 'a'; //所有出现字母均保存了。
                }
            }
            x_num = k;
            memset(value, 0, sizeof(value));
            printTitle();
        }
        /*产生下一组变量的真值*/
        bool next_value()
        {
            if(check_end())
                return 0;
            value[x_num - 1] ++;
            for(int i = x_num-1; i >= 0; i --)
            {
                if(value[i] > 1)
                {
                    value[i] = 0;
                    value[i-1] ++;
                }
            }
            return 1;
        }
        /*输出每一行真值表*/
        void printValue()
        {
            for (int i = 0; i < x_num; i ++)
            {
                printf("%d\t", value[i]);
            }
            printf("%d\n", Ans);
        }
    };
    
    
    
    /*因为再写到上面的类就太臃肿了,写一个<子类>
      用于计算表达式的值(双栈)*/
    class Calculate : public TrueFalseTable
    {
    private:
        stack<int> data;    //数据栈
        stack<int> oper;    //符号栈
    public:
        Calculate() {}
        Calculate(string read)
        {
            this->read = read;
        }
        /*计算表达式的值*/
        void calculate()
        {
    		char op[7] = {'~', '>', '^', 'V', '(',')','#'}; //运算符,其中->用>表示。#为栈底。
    		int  in[7] = {5, 3, 3, 3, 1, 6, 0};            //栈内优先级;
    		int  out[7] = {4, 2, 2, 2, 6, 1, 0};           //栈外优先级 < 栈内优先级;
            int a, b, thera;
            oper.push(getIndex('#'));
    		int i = 0;
            int index = oper.top();
            while( i < read.size() || op[index] != '#')
            {
                //遇到表达式中的->, -不读取。
                if(i < read.size() && read[i] == '-')
    			{
    				i++;
                    continue;
    			}
    
                if(i < read.size() && read[i] >= 'a' && read[i] <= 'z')
                {
                    data.push(getValue(read[i]));
    				i ++;
                }
    
                else
                {
                    //遇到~,单独处理。
    				if(oper.top() == 0)
    				{
    					oper.pop();
    					a = data.top();
    					data.pop();
    					a = !a;
    					data.push(a);
    					index = oper.top();
    					continue;
    				}
    				//末尾没有符号来比较,那么直接计算。
                    int readIdx;
    				if(i >= read.size())
    				{
    					readIdx = 5;
    				}
    				else
    				{
    					readIdx = getIndex(read[i]);
    				}
    
                    switch(precede(oper.top(), readIdx))
                    {
                    case '>':
                        a = data.top();
                        data.pop();
    					b = data.top();
    					data.pop();
                        thera = oper.top();
    					oper.pop();
                        data.push(fiture(b, thera, a));
                        break;
                    case '<':
                        oper.push(getIndex(read[i]));
                        if(i < read.size() - 1)
                        {
                            i ++;
                        }
                        break;
                    case '=':
                        oper.pop();
                        if(i < read.size() - 1)
                        {
                            i ++;
                        }
                        break;
                    }
                }
    			//字符串最后为一个右括号,就结束。
    			if(i == read.size() - 1 && oper.top() == 5)
    			{
    				oper.pop();
    				i ++;
    			}
                index = oper.top();
            }
    		Ans = data.top();
    		data.pop();
    		oper.pop();
        }
    private:
        /*获得运算符在数组中的下标*/
        int getIndex(char c)
        {
            switch(c)
            {
            case '~':
                return 0;
            case '>':
                return 1;
            case '^':
                return 2;
            case 'V':
                return 3;
            case '(':
                return 4;
            case ')':
                return 5;
            case '#':
                return 6;
            default:
                return -1;
            }
        }
        /*比较栈内运算符和栈外运算符的优先级*/
        char precede(int i1, int i2)
        {
    //		char op[7] = {'~', '>', '^', 'V', '(',')','#'}; //运算符,其中->用>表示。#为栈底。
    		int  in[7] = {5, 3, 3, 3, 1, 6, 0};            //栈内优先级;
    		int  out[7] = {4, 2, 2, 2, 6, 1, 0};           //栈外优先级 < 栈内优先级;
            if(in[i1] > out[i2])
            {
                return '>';
            }
            else if(in[i1] < out[i2])
            {
                return '<';
            }
            else
            {
                return '=';
            }
        }
    
        int fiture(int a, int ope, int b)
        {
            switch(ope)
            {
            case 0:
                return !a;
            case 1:
                return !a || b;
            case 2:
                return a && b;
            case 3:
                return a || b;
            }
        }
    };
    
    int main()
    {
        Calculate t("(p^~q)V(~p^q)");	//   1、直接在定义类的时候就给表达式。
    //    Calculate t;                      //   2、通过控制台输入表达式。
        t.Init();
        do
        {
            t.calculate();
            t.printValue();
        }
        while(t.next_value());
        return 0;
    }
    



    展开全文
  • 一个电路有三个输入端A,B,C,当其中两个输入端为高电平时,输出X为高电平,试列出真值表,并写出X的逻辑表达式。 A B C X 1 1 1 1 1 1 0 1 1 0 1 1 1 0 0 0 0 1 1 1 0 1 0 0 0 0 1 0 0 0 0 ...

    一个电路有三个输入端A,B,C,当其中两个输入端为高电平时,输出X为高电平,试列出真值表,并写出X的逻辑表达式。

    ABCX
    1111
    1101
    1011
    1000
    0111
    0100
    0010
    0000

    (其中1表示高电平)
    X = AB + AC + BC
    (其中+表示或运算,又称为逻辑加)

    展开全文
  • 最近帮老师改作业,发现同学们交上来的作业里,同一个表达式有好几种写法,被搞得...逻辑表达式中有4中运算符,+,*,#和[] 分别表示或,与,异或,非运算。其中,异或运算不推荐与其他运算混合。如果一定要混合的话,
  • 真值表推出表达式

    2019-06-02 16:33:00
    真值表表达式的化简,想起来似乎不好弄,其实很简单,三步就好: 1:找所有真值为1的情况。 2:用“与”组织输出为1的组合 3:将所有组合用“或”结合 举例: 表达式为: 转载于:...
  • python - 根据表达式打印真值表

    千次阅读 2018-11-03 20:31:34
    输入逻辑表达式,输出真值表,支持六个基本逻辑运算 最终效果:  输入合适公式(没有考虑优先级,只根据括号优先),输出时会提取其中的元素(比如这里有A B C),并打印真值表。  算法思路:  求值的一般...
  • 【2018.6.2】今天在看书的时候无意中需要使用... 据说有两种方法,这里都列举一下吧: 方法一: step 1 首先,根据真值表当中结果是true的项,找它的两个输入项,然后进行与运算;如果遇到输入项的取值是fals...
  • 采用逻辑门和MSI模块来进行组合逻辑电路的设计,需要我们根据实验的需求和电路的功能要求,明确输出量与输入量之间的关系,即得到一张真值表(或者是功能表)。根据这张真值表,我们还需要将其转化成逻辑函数,即用...
  • 如果不易最简为目的画如下图所示的卡诺圈,经过推到,可以得到含异或的表达式.
  • C++ 逻辑运算符和逻辑表达式

    千次阅读 2017-08-06 23:32:23
    C++中路基表达式是短路计算的,即对逻辑表达式的计算,在整个表达式的已经能够判定的时候就会停止。
  • 文章目录前言一、根据简化真值表绘制电路二、做法1.相关概念2.步骤总结 前言 ...2.根据简化真值表写出逻辑函数的与或表达式; 3.普通代数变量与逻辑变量的差异; 4.关系表达式与逻辑表达式的区别.
  • Python:条件判断和逻辑表达式

    千次阅读 2019-04-21 14:38:13
    条件判断和逻辑表达式 (1)逻辑类型bool (2)比较运算符 (3)逻辑运算符 (4)优先级和结合性 逻辑类型bool 运算符求一个关系表达式,应该得到一个运算结果。python中用两个特殊的逻辑对象表示比较的结果...
  • C++逻辑常量和变量 C++的逻辑常量只有两个:false和true,逻辑型变量的定义是用bool,bool...在C++的逻辑表达式中,如果这个逻辑表达式有多个逻辑运算符,则优先级会按照逻辑非->逻辑与->逻辑或,其中逻辑非优先
  • 一、算述表达式 优先级高 左结合 赋值表达式 优先级低 右结合 二、关系表达式(比较) 1、关系表达式(左结合): ...成立:命题为(true)为1 不成立:命题为假(false)为0 三、条件表达式(...
  • 例1: 1!=3>4 运算结果为多少? 结果为: 1 例2: int x; x=100; printf("%d",x>10);...2、关系、逻辑表达式的运算结果是一个逻辑,1(),0(假),不存在其他,它们的可作为算术处理; 3、3>
  • 74ls138译码器真值表

    2020-07-15 06:09:30
    本文主要为74ls138译码器真值表,下面一起来学习一下
  • 图2-3展示了用于实现逻辑电路的符号和逻辑门的真值表。与(AND)门、或(OR)门、与非(NAND)门、或非(NOR)门、非(NOT)门在第1章中有过讨论。异或(XOR)门、同或(XNOR)门是有两个输入的逻辑门。当两个输入...
  • 真值表 是命题逻辑理论 中的一个重要 概念 , 利用它可 以求命 题公式 的主 范式 、 定命 题公式 的类型以及 进行 判命题 逻辑的推理等 。本文给 了 意命题 公式真值 表的生成 算法 , 用计算机 解决命题 逻辑 中的...
  • 1) if(表达式)语句 如if(x>y)printf(“%d”,x); 2) if(表达式)语句1else语句2 如if(x>y) printf(“%d”,x); else printf(“%d”,y); 3)if(表达式1)语句1 else if(表达式2)语句2 else if(表达式3)语句3 . ....
  • 如何根据真值表反推逻辑表达式? 第一种方法:以真值表内输出端“1”为准  第一步:从真值表内找输出端为“1”的各行,把每行的输入变量成乘积形式;遇到“0”的输入变量上加非号。  第二步:把各乘积...
  • 根据简化真值表绘制电路

    千次阅读 2020-12-07 23:54:08
    本关任务:根据如下简化真值表写出Gt的表达式并绘制电路。 X1 X0 Y1 Y0 Gt 1 d 0 d 1 1 1 1 0 1 0 1 0 0 1
  • 实验一 命题逻辑:求给定命题公式的真值表 实验原理:[可忽略] 将命题公式A在所有赋值下取值情况列成表,称作A的真值表。 构造真值表的具体步骤如下: (1) 找公式中所含的全体命题变项p1,p2,…,pn (若无下角标就...
  • 刚刚接触电路的逻辑,老是把各种逻辑运算搞混淆,我以己之需个总结,希望也能帮助到你。 1.与:只要AB里其中一个为0,则F为0 2.或:只要AB里其中一个为1,则F为1 3.非:输入1则输出0,输入...
  • C语言 命题公式真值表

    千次阅读 2020-11-21 00:49:36
    掌握命题公式真值表的求解,并实现自动求解程序。 2.实验内容 输入:任意命题公式 输出:该命题公式的真值表 要求: 输入任意命题公式,要求用数据存储命题公式的所有赋值及对应真值,并输出该公式真值表 此题...
  • 根据真值表绘制电路

    千次阅读 2020-12-07 23:53:18
    本关任务:根据如下给定的真值表绘制逻辑电路,其中A、B、C是输入变量,F是输出变量。 A B C F 0 0 0 1 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1
  • 真值表写出 S=A‾ B‾ C+A‾ B C‾+AB‾ C‾+ABC S =\overline A\ \overline B \ C+\overline A \ B \ \overline C + A \overline B \ \overline C +ABC S=A B&nb...
  • C语言 实现离散数学合式公式真值表

    万次阅读 多人点赞 2017-02-16 14:52:52
    现在我们来谈谈怎样用C语言去实现合式公式的真值表。 该程序功能就是任意给定一个合式公式我们都能把它的真值表输出出来。 步骤1: 引用上一篇的程序,你给我一个公式首先我得知道它是不是合式公式,这就用到了...
  • 74LS138真值表相关

    千次阅读 2014-09-16 21:08:06
    TI官方SN74LS138芯片手册部分截图:
  • 关于离散数学的真值表的求解

    千次阅读 2010-03-31 21:46:00
    //寒假,离散老师说,把几个...(可以参考:http://www.cnblogs.com/U2USoft/archive/2009/03/26/1422545.html) 2、个人觉得麻烦的地方是,模拟离散数学中的真值表计算的过程。它并不是从左到右直接计算的。而是按

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 74,780
精华内容 29,912
关键字:

真值表写出逻辑表达式