精华内容
下载资源
问答
  • 布尔表达式

    千次阅读 2020-03-11 16:21:50
    布尔表达式(Boolean expression)是一段代码声明,它最终只有true(真)和false(假)两个取值。从最基本的层次来说,所有的布尔表达式,不论它的长短如何,其值只能是true或false。 最简单的布尔表达式是等式(equality)...

    介绍

    布尔表达式(Boolean expression)是一段代码声明,它最终只有true(真)和false(假)两个取值。从最基本的层次来说,所有的布尔表达式,不论它的长短如何,其值只能是true或false。

    最简单的布尔表达式是等式(equality)。这种布尔表达式用来测试一个值是否与另一个值相同。它可以是一个简单的等式,例如:

    2 == 4

    上面这个布尔表达式的值是false,因为2和4不相等。它也可以是复杂的等式,如:

    MyObject.MyProperty == YourObject.YourProperty

    这个等式的值是不确定的,可能取真值也可能取假值,只有在程序运行时才能确定。如果你对C、C++甚至C#比较熟悉的话,就会知道上式中的= = (双等号) 是一个逻辑布尔操作符,而= (单等号)是用来对变量赋值的赋值操作符。程序员有时会将这两个操作符放错位置,这是一个导致程序在编译时或运行时出错的常见原因。

    概述 作用

    布尔表达式的语义在于指明计算一个逻辑值的规则。

    布尔表达式在程序设计语言中有两个基本的作用:

    一是在某些控制语句中作为实现控制转移的条件;

    另一个则是用于计算逻辑值本身。

    约定:各类运算符的优先顺序(由高至低)如下:

    ⒈括号

    ⒉算术运算符 *(乘法) / (除法) +(加法) -(减法) %(模)(返回一个除法的整数余数,例如:12%5=2,这里是因为12除以5的余数是2)

    ⒊关系运算符 <(小于)、<=(小于等于)、=(等于)、>(大于)、>=(大于等于)、<>(不等于)

    ⒋逻辑运算符 ┒ ∧ ∨

    1. 布尔表达式的等价解释-求值角度

    为了方便起见,下面我们仅讨论由文法

    E→ E∧E | E∨E | ┑E | (E) | I | i Rop i (5.1)

    可采用类似算术表达式的方式来进行。例如,对于布尔表达式A∨B∧C,可翻译为:

    (∧, B, C, T1 )

    (∨, A, T1, T2 )

    出口

    对于布尔表达式A∨(B∧(┑C∨D)),其等价的表述是

    A ?1 :(B ?((C ?0 :1)? 1 :D ):0 )

    显然,采用此种结构可产生更为有效的中间代码。这里需假定原布尔表达式的计算过程中不含有任何的副作用。

    在上式的计算中,根据A、B、C、D的取值不同,计算的结果以及运算的终止点亦不同。例如,当A=1(真)时,结果为1且终止于左边第一个’1’处。

    这样终止的点我们称为该布尔表达式的出口,同时,把使布尔表达式取值为真的出口称为真出口,反之称为假出口。

    对一个布尔表达式而言,它至少有一个真出口和一个假出口(当然可以有多个)。在用于控制流程的布尔表达式E的计算中,这些出口分别指出当E值为真和假时,控制所应转向的目标(即某一四元式的序号)。

    展开全文
  • 翻译布尔表达式

    2019-11-28 09:46:45
    翻译布尔表达式 SDUT OJ 翻译布尔表达式 翻译布尔表达式 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 大家都学过了布尔表达式的翻译,其中有一个拉链-回填技术,这次我们就练习这个技术。 ...

    翻译布尔表达式

    SDUT OJ 翻译布尔表达式
    翻译布尔表达式
    Time Limit: 1000 ms Memory Limit: 65536 KiB

    Problem Description
    大家都学过了布尔表达式的翻译,其中有一个拉链-回填技术,这次我们就练习这个技术。

    Input
    输入为一行字符串,例如: a < b or c < d and e < f

    每个符号都用空格间隔。

    其中逻辑运算符包含 and 和 or , 关系运算符包含 < 、> 、<= 、 >= 、== 、 != 。

    Output
    假链跳到0,真链跳到1,表达式序号从100开始排。

    Sample Input
    a < b or c < d and e < f
    Sample Output
    100(j<,a,b,1)
    101(j,,,102)
    102(j<,c,d,104)
    103(j,,,0)
    104(j<,e,f,100)
    105(j,,,103)

    问题思路:
    划分and和or运算,只在一种情况下输出。
    分析and和or的特点:
    and运算:有假则假,若假则直接跳转到假出口,若真则继续探索。
    or运算:有真则真,若真则直接跳转到真出口,若假则继续探索。
    本题的解题思路就是利用假出口回填,一直探索假出口的位置
    
    #include <bits/stdc++.h>
    using namespace std;
    vector <string> ans;
    int main()
    {
        string s,x;
        getline(cin, s);
        //控制最后的输出,若最后ans里只有and也可以输出
        s += " end";
        stringstream ss(s);
        int F = 100, id = 100, T = 1;
        while(ss >> x)
        {
            if(x == "or" || x == "end")
            {
                if(x == "or")
                    F += 2;
                else
                    F = 0;
                int n = ans.size();
                //输出and运算的内容
                for(int i = 0; i < n-3; i += 3)
                {
                    cout <<id<< "(j" << ans[i+1].c_str()<<','<<ans[i].c_str()<<','<<ans[i+2].c_str()<<','<<id+2<<')'<<endl;
                    id++;
                    //and运算有假则假,直接跳转到假出口,同时需要记录假出口,方便回填
                    cout <<id<< "(j" << ",_,_," << F << ')' << endl;
                    F = id++;
                }
                //对于or运算,有真则真,直接跳转到真出口,同时需要记录真出口的位置,方便回填
                cout <<id<< "(j" << ans[n-2].c_str()<<','<<ans[n-3].c_str()<<','<<ans[n-1].c_str()<<','<<T<<')'<<endl;
                T = id++;
                cout <<id<< "(j" << ",_,_," << F << ')' << endl;
                id++;
                //清空
                ans.clear();
            }
            else if(x == "and")
                F += 2;
            else
                ans.push_back(x);
        }
        return 0;
    
    }
    
    
    
    展开全文
  • 布尔代数B上的布尔表达式定义为B的每个元素都是一个布尔表达式。每个变量名称都是一个布尔表达式。如果a1和a2是布尔表达式, 则a1, ‘∨a2和a1∧a2是布尔表达式。示例:考虑一个布尔代数({0, 1, 2, 3}, ∨, ∧, ‘, 0...

    本文概述

    考虑布尔代数(B, ∨, ∧, ‘, 0, 1)。布尔代数B上的布尔表达式定义为

    B的每个元素都是一个布尔表达式。

    每个变量名称都是一个布尔表达式。

    如果a1和a2是布尔表达式, 则a1, ‘∨a2和a1∧a2是布尔表达式。

    示例:考虑一个布尔代数({0, 1, 2, 3}, ∨, ∧, ‘, 0, 1)。

    0∨x

    (2∧3)

    (x1∨x2)∧(x1∧x3)

    是布尔代数上的布尔表达式。

    包含n个不同变量的布尔表达式通常称为n个变量的布尔表达式。

    布尔表达式的求值

    令E(x1, x2, …. xn)为布尔代数B上n个变量的布尔表达式。通过将值赋值给变量x1, x2, …. xn表示元素的赋值A为变量的值。

    我们可以通过用值替换表达式中的变量来评估表达式E(x1, x2, …. xn)。

    示例:考虑布尔表达式

    E(x1, x2, x3)=(x1∨x2)∧(x1∨x2)∧(x2∨x3)

    在布尔代数({0, 1}, ∨, ∧, ‘)上

    通过分配值x1 = 0, x2 = 1, x3 = 0产生

    E(0, 1, 0)=(0∨1)∧(0∨1)∧(1∨0)=1∧1∧0= 0。

    等效布尔表达式

    如果对n个变量的每次赋值都假定相同的值, 则n个变量的两个布尔表达式被认为是相等的。

    示例:以下两个布尔代数(x1∧x2)∨(x1∧x3)和x1∧(x2∨x3)是等效的。

    我们可以写E1(x1, x2, …. xn)= E2(x1, x2, …. xn)表示两个表达式E1(x1, x2, …. xn)和E2(x1, x2, …. xn)是等效的。

    示例:布尔代数({0, 1}, ∨, ∧, ‘)上的布尔表达式(x1∧x2∧x3)∨(x1∧x2)∨(x1∧x3)定义了图中的函数f。

    最小项:如果n变量x1, x2, ….. xn的布尔表达式形式为x1∧x2∧x3∧….∧xn, 则称其为最小项。

    其中xi用于表示xi或xi’。

    展开全文
  • 布尔表达式问题

    千次阅读 2015-09-19 13:26:45
    老师在openjudge上布置了这个问题,这是我第二次做,还是调了很久。布尔表达式 总时间限制: 1000ms 内存限制: 65536kB 描述 输入一个布尔表达式,请你输出它的真假... 输入输入包含多行,每行一个布尔表达式,表达式中

    老师在openjudge上布置了这个问题,这是我第二次做,还是调了很久。
    #

    布尔表达式

    题目描述:

    总时间限制: 1000ms 内存限制: 65536kB 描述 输入一个布尔表达式,请你输出它的真假值。 比如:( V | V ) &
    F & ( F |V表示true,F表示false,&表示与,|表示或,!表示非。

    上式的结果是F

    输入输入包含多行,每行一个布尔表达式,表达式中可以有空格,总长度不超过1000输出对每行输入,如果表达式为真,输出”V”,否则出来”F”

    样例输入 ( V | V ) & F & ( F| V) !V | V & V & !F & (F | V ) & (!F | F | !V
    & V) (F&F|V|!V&!F&!(F|F&V)) 样例输出 F V V

    ##我的思路!

    1. 在读取数据时将所有空格去掉,方便后续操作
    2. 建立两个stack。一个命名为num用于存储bool值。另一个命名为mark用于存储符号。
    3. 首先要定义两种操作:且操作,或操作。分别是从num顶上弹出两个值,从mark上弹出一个符号(&/|),计算出的值重新压入num。
    4. 历遍字符串。在读到bool值时存入num;因为存在优先级! > & > |, 和括号, 读到符号时需要分情况讨论:

      • ’(‘,‘!’直接存入mark
      • 读入其他任何符号,包括右括号,(由于优先级低于!) 弹出’!’, 并对num顶上的bool值取相反值,然后
        -如果是’&’, 压入mark
        -如果是’|’, (由于优先级高于’&’), 如果mark顶上有’&’,循环进行{且操作},把’&‘消耗完。
        -如果是’)‘,那么根据mark顶的符号循环进行且操作/或操作,然后弹出’(‘,接着看mark顶部是不是’!‘,如果是要取相反值。
    5. 最后,如果mark内有符号,循环进行且操作/或操作(也有可能有’!‘操作),把符号消耗完,最后num中会剩下一个值。
      其输出。

    我中的招…

    1. 在读入‘|’时,需要循环把‘&’消耗完,而不是只操作了一次。
    2. 最后一步中,如果只输入了‘!V’或‘!F’,mark中只有一个‘!’。因为其他任何输入都不会导致这个中间结果, 所以容易忽略这种情况。
    3. 在计算完一个括号内的值时, 需要判断一次是否需要‘!’,应付!()的情况。

    我的代码(AC)-_-写得很丑…

    #include <iostream>
    #include <stack>
    #include <string>
    using namespace std;
    int clean(string& s);
    int deal(string s);
    void neg();
    char calcu();
    stack <char> mark;
    stack <char> num;
    int main()
    {
        string line;
        while (getline(cin, line))
        {
            clean(line);//去除空格
    
            deal(line);//进行处理
    
            while (!mark.empty())
            {
                num.push(calcu());
            }
    
            cout << num.top() << endl;
        }
    }
    
    int clean(string& s)
    {
        for (int i = 0; i < s.length(); i++)
        {
            if (s[i] == ' ')
            {
                s.erase(i, 1);
            }
        }
        return 0;
    }
    
    int deal(string s)//进行处理
    {
        for (int i = 0; i < s.length(); i++)
        {
            char c = s[i];
            if (c == 'F' || c == 'V')
            {
                num.push(c);
            }
            else if (c == '&' || c == '|')
            {
                while (!mark.empty() && mark.top() == '!')
                {
                    neg();
                }
                while (c == '|' && !mark.empty() && mark.top() == '&')
                {
                    num.push(calcu());
                }
                mark.push(c);
            }
            else if (c == '!')
            {
                mark.push(c);
            }
            else if (c == '(')
            {
                mark.push(c);
            }
            else if (c == ')')
            {
                while (!mark.empty() && mark.top() == '!')
                {
                    neg();
                }
                while (mark.top() != '(')
                {
                    num.push(calcu());
                }
                mark.pop();
    
            }
        }
        return 0;
    }
    char calcu()//单次操作-且操作/或操作
    {
        char x;
        x = mark.top();
        mark.pop();
        if (x == '!')
        {
            char tmp = num.top();
            num.pop();
            if (tmp == 'F')
            {
                return 'V';
            }
            else
            {
                return 'F';
            }
        }
    
        else
        {
            char value1, value2;
    
            value1 = num.top();
            num.pop();
            value2 = num.top();
            num.pop();
    
            if (value1 == 'V' && value2 == 'V')
            {
                return 'V';
            }
            else if (value1 == 'F' && value2 == 'F')
            {
                return 'F';
            }
            else if ((value1 == 'V' || value2 == 'V') && x == '|')
            {
                return 'V';
            }
            else if ((value1 == 'F' || value2 == 'F') && x == '&')
            {
                return 'F';
            }
        }
    }
    void neg() //!操作
    {
        char tmp = num.top();
        num.pop();
        if (tmp == 'F')
        {
            num.push('V');
        }
        else
        {
            num.push('F');
        }
        mark.pop();
    }

    2015年9月19日,大二上学期。才疏学浅,希望给有疑问的同学带来帮助。

    展开全文
  • 17.12.10 布尔表达式

    2019-09-27 19:38:28
    布尔表达式 描述 输入一个布尔表达式,请你输出它的真假值。比如:( V | V ) &...输入包含多行,每行一个布尔表达式,表达式中可以有空格,总长度不超过1000 关于输出 ...
  • 布尔表达式
  • M - 翻译布尔表达式

    2020-11-12 20:05:36
    M - 翻译布尔表达式 Description 大家都学过了布尔表达式的翻译,其中有一个拉链-回填技术,这次我们就练习这个技术。 Input 输入为一行字符串,例如: a < b or c < d and e < f 每个符号都用空格...
  • ica——布尔表达式

    千次阅读 2016-04-14 14:14:28
    描述 输入一个布尔表达式,请你输出它的真假值。...输入包含多行,每行一个布尔表达式,表达式中可以有空格,总长度不超过1000 输出 对每行输入,如果表达式为真,输出"V",否则出来"F" 样例输入 ( V | V )
  • 汇编语言的布尔表达式 ##布尔代数 布尔代数(boolean algebra)定义了一组操作,其值为真(true)或假(false)。它的发明者是十九世纪中叶的数学家乔治・...一个布尔表达式(boolean expression)包括一个布尔运算...
  • groovy-bool-rule是一款开源的用于计算复杂布尔表达式的规则引擎,使用groovy动态脚本引擎设计与实现。 github: https://github.com/JavaPentesters/groovy-bool-rule 1、基于groovy实现的复杂布尔表达式规则引擎 在...
  • 布尔表达式解题报告

    千次阅读 2015-04-14 20:15:32
    Description 输入一个布尔表达式,请你输出它的真假值。...Input输入包含多行,每行一个布尔表达式,表达式中可以有空格,总长度不超过1000 Output对每行输入,如果表达式为真,输出"V",否则出来"F" Samp
  • 题目来源:http://noi.openjudge.cn/ch0303/6263/6263:布尔表达式总时间限制: 1000ms 内存限制: 65536kB描述输入一个布尔表达式,请你输出它的真假值。 比如:( V | V ) &amp; F &amp; ( F | V) V表示...
  • 03.MVEL基本语法-布尔表达式

    千次阅读 2015-06-15 21:14:30
    MVEL的布尔表达式和JAVA一样有优先级,包括通过括号来控制执行顺序。 MVEL布尔表达式的操作符如下: 操作符 说明 示例 == 比较两个值是否相等 与java的字符串内存地址比较不一样 ‘foo’=='...
  • M - 翻译布尔表达式 Description 大家都学过了布尔表达式的翻译,其中有一个拉链-回填技术,这次我们就练习这个技术。 Input 输入为一行字符串,例如: a < b or c < d and e < f 每个符号都用空格间隔。 ...
  • 布尔表达式----栈

    2019-05-13 22:17:12
    题目: 描述 输入一个布尔表达式,请你输出它的真假值。...输入包含多行,每行一个布尔表达式,表达式中可以有空格,总长度不超过1000 输出 对每行输入,如果表达式为真,输出"V",否则出来"F" // ConsoleApplicat...
  •   通过使用AND、OR、NOT、NEAR、REGEX及LIKE 操作符,FileLocator Pro的布尔表达式引擎支持网页式的搜索表达式。在 选项页签 中可以将FileLocator Pro设置为对整个文件匹配(默认)或者对逐行匹配。 逐行 示例  ...
  • 布尔表达式、条件判断

    千次阅读 2018-12-13 09:58:23
    布尔表达式:  特性:只有两种情况 -- 真 / 假  True False   type(True)----- &lt;class 'bool'&gt;  2.布尔结果:  它的结果是bool类型  关系运算 3&gt;1 关系的等价 == 一个...
  • 布尔表达式的翻译

    千次阅读 2008-01-18 18:45:35
    程序设计语言中的布尔表达式有两个作用。一是计算逻辑值,更多的情况是二,用做改变控制流语句中的条件表达式,如在if-then,if-then-else,或是while-do语句中那样。  布尔表达式是由布尔算符and,or和not施于...
  • NOI:6263 布尔表达式

    千次阅读 2018-05-17 23:32:00
    转载:...amp;fps=1题目链接:http://noi.openjudge.cn/ch0303/6263/描述输入一个布尔表达式,请你输出它的真假值。 比如:( V | V ) &amp; F &amp; ( F | V ) V表示true,F表示fals...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 128,932
精华内容 51,572
关键字:

布尔表达式包含