整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

数学奇特之美”,走进布尔代数

数学奇特之美”,走进布尔代数

的思维过程能用数学表示吗?19世纪早期,英国数学家乔治·布尔(George Boole,1815-1864)突发奇想这个问题?此前,数学只用于计算,没有人意识到,数学还能表达人的逻辑思维。

布尔首先对这个问题作了大胆的尝试。他应用代数方法研究了逻辑,把一些简单的逻辑思维数学化,建立了逻辑代数。他当然料想不到,在一个多世纪以后,这种十分简单的代数,竞对计算机技术有着巨大的实用价值。人们怀念他,就把逻辑代数叫做布尔代数。

两千年来,哲学书都是用文字写的。比如,最著名的三段论:

所有人都是要死的, 苏格拉底是人, 所以,苏格拉底是要死的。

乔治·布尔认为,这种推理可以用数学表达,也就是说,哲学书完全可以用数学写。这就是数理逻辑的起源。

在布尔代数里只有两个数: 1和0;只有三种运算方法:逻辑加、逻辑乘和逻辑非。两个数表示两种状态。世界上有很多事物,是只具备两种状态的。比如一根电线,它或者带电,或者不带电。所以,我们不妨把带电时叫做1,不带电时叫做0.

注意。这组的1和0,表示有矛盾关系的双方,和我们熟悉的数量概念中的1和0,含义是不同的。比如一把锁,它或者开着,或者锁着,这两种状 不能同时存在,可是一种状态可以转变成另一种状态。所以,我们可以把打开时叫做1,锁着时叫做0。一扇门,只有开着和关着两种状态,地可以用1和莱示。

一句话,对了或者错;也可以用1或0来装示。哥哥和弟弟住在一间房里,各人有一把锁和一把钥匙。为了方便和安全;祂们出门时就把两把锁互相钩住,串联在门扣上。这样一来,无论是哥哥单独打开锁,或者弟弟单独打开锁,或者两个同时打开,都能达到开门的目的。不这样,门一定不开。这种关系叫做逻辑加的关系,又叫做"或"的关系,用符号+"或者"V"表示。于是,我们可以用下面四个等式来表示四种情况:

哥哥锁开(1)

→门开(1),1+0=1;

弟弟锁不开(0)哥哥锁不开(0),

→门开(1),0+1=1;

弟弟锁开(1)哥哥锁开(1);

→门开(1),1+1=1;

弟弟锁开(1)哥哥锁不开(0):

.→门不开(0),0+0=0。

弟弟锁不开(0).

这四种情况,可以用代数式表示。令哥哥的锁的状态为A,弟弟的锁的状态为B,门的状态为Y。A、B、Y都可以分别取1或者0两种状态。这里,A、B是自变量,Y是A、B的函数,函数关系是:

A+B=Y.

再看一个例子。哥哥和弟弟共同用一个柜子,他们商量决定,无论哪一个,都不得单独开柜子。:为了保证做到这点,他们两个,把各自的锁并挂套进门扣后锁上,开柜时,必须两把锁都打开后才能开门。这种门与锁的关系,叫做逻辑乘的关系,又叫做"与"的关系,用

符号"×"或者"·"、"八"表示。这里的四种情况,也可以用四个等式表示:

哥哥锁开→门不开,1×0=0;

弟弟锁不开,哥哥锁不开→门不开,0×1=0;

弟弟锁开,哥哥锁开—→门开,1×1=1;:

弟弟锁开,哥哥锁不开→门不开,0×0=0。

弟弟锁不开,写成代数式是:A×B=Y,或者AB=Y。

还有一个运算符号,叫做逻辑非,简称"非"。逻辑非就是否定的意思,逻辑非运算也叫做反向运算,表达式是:

布尔代数一共只有以上三种运算,没有减法和除法运算,也没有乘方、开方等运算。

布尔代数的运算规则多数与传统代数相同。不同的有以下几条:

1,表示全部集合;

0,表示空集;

1 – A, 表示排除了A以后的集合,即非A集合;

1 + A=1, 全部集合与A集合的并集还是全部集合;

A x (1 – A)=0,这是矛盾律,即A集合与非A集合的交集是空集,它表明一个事物不能同时是它自己和它自己的反面;

A x A=A, A集合与A集合的交集仍然是A集合;

A + A=A, A集合与A集合的并集仍然是A集合;

布尔代数只有两个数,分别是:true(真)和false(假)。

乔治·布尔发明的工具,叫做"集合论"(Set theory)。他认为,逻辑思维的基础是一个个集合(Set),每一个命题表达的都是集合之间的关系。比如,所有人类组成一个集合R,所有会死的东西组成一个集合D。所有人都是要死的

集合论的写法就是:R X D=R。

集合之间最基本的关系是并集和交集。乘号(X)表示交集,加号(+)表示并集。上面这个式子的意思是,R与D的交集就是R。

同样的,苏格拉底也是一个集合S,这个集合里面只有苏格拉底一个成员。

苏格拉底是人 // 等同于 S X R=S。

上面式子的意思是,苏格拉底与人类的交集,就是苏格拉底。

将第一个式子代入第二个式子,就得到了结论。

S X (R X D)=(S X R) X D=S X D=S

这个式子的意思是,苏格拉底与会死的东西的交集,就是苏格拉底,即苏格拉底也属于会死的东西。

逻辑代数在逻辑电路的设计和简化中,有着广泛的应用。执行"与"、"或"、"非"功能的电子元件,叫做"与门"、"或门"、"非门",是构成逻辑线路的基本元件。

布尔代数是计算机的基础。没有它,就不会有计算机。布尔代数发展到今天,已经非常抽象,但是它的核心思想很简单,它促成了计算机的诞生。

虽然布尔代数可以判断命题真伪,但是无法取代人类的理性思维。原因是它有一个局限。它必须依据一个或几个已经明确知道真伪的命题,才能做出判断。比如,只有知道"所有人都会死"这个命题是真的,才能得出结论"苏格拉底会死"。

布尔代数只能保证推理过程正确,无法保证推理所依据的前提是否正确。如果前提是错的,正确的推理也会得到错误的结果。而前提的真伪要由科学实验和观察来决定,布尔代数无能为力。

布尔代数发明后很久都不受重视,数学家们曾轻蔑地说它:没有数学意义,在哲学上也属于稀奇古怪的东西。直到20世纪初,罗素在《数学原理》中提到:"纯数学是布尔在一部他称之为《思想规律》的著作中发现的",人们这才关注到布尔代数。但还是认为它是毫无实际用途的"纯数学"。

直到1938年,一位年仅22岁的美国年轻人在《继电器与开关电路的符号分析》中,将布尔代数与开关电路联系起来了。这篇文章是他在麻省理工学院(MIT)获得电气工程硕士学位的毕业论文。上世纪八十年代,被誉为"多元智能理论"之父的哈佛大学教授霍华德.加德纳(Howard Gardner)曾经评论这篇文章:"它可能是本世纪最重要、最著名的一篇硕士论文"。这位年轻人就是克劳德.艾尔伍德.香农。

离散数学是计算机科学的重要分支之一。其中格论又是重要的组成部分。德国数学家戴德金在1900年研究对偶集时发现了格。后来经过皮尔士以及施罗德等人的工作,格的研究向前推进一大步。美国数学家伯克霍夫于1940年出版的《格论》一书,是个划时代的工作。在格论的研究中,数学家们发现,布尔代数经过特殊化处理后也是一种格,叫做布尔格,或有补分配格。

喽,大家好,我是秒可职场的小可~


今天我们来学习下PPT中一个神奇的功能,它就是布尔运算。


布尔运算跟数学运算有点像~指的就是PPT中的合并形状工具:结合,组合,拆分,相交,剪除。


这五种功能统称在一起就是布尔运算。



(PS:在office2010版本及以上,才支持布尔运算功能。还在使用07版office的小伙伴们,是时候下载更高版本的软件了。)


下面我们就来详细讲讲这5种功能的用法。


1、联合运算(结合)


联合就是把两个独立的元素及以多个元素,合并成一个形状。


如下GIF,我们把圆形和云形结合:



2、组合运算


组合运算,也是将两个以上的元素,合并成一个形状,它和联合运算的区别在于,元素之间重合的部分给除掉了。


如下GIF,我们同样把圆形和云形组合,中间重合的部分,就被裁掉了:



3、拆分运算


拆分运算,是把两个独立的元素的各个区域拆散,变成单独的元素。


如下GIF,同样把圆形与云形进行拆分,就会形成 三种形状:



4、相交运算


相交运算,类似于数学中的交集,两个元素进行相交,只保留重合的区域。

如下GIF,继续拿圆形与云形进行相交,可得到一个新的形状:



5、剪除运算


剪除运算,类似于数学中的减法,我们先选中一个形状A,再选中另外一个形状B,通过剪除运算得到的新图像就是A-B。


你可以简单地理解为是 A形状减去B形状。


如下GIF,我们用云形剪除圆形,那么:



好了,了解了它们是什么之后,那么在PPT设计中,它都能干什么用呢?


如下GIF,可以制作图片型文字,利用相交的功能,将文字与图片相交,可以使文字填充上图片的内容。


选中图片与文字(先选中图片,再选文字),再进行相交操作。



也可以利用组合功能制作镂空字:


#Excel培训,#PPT培训,#秒可职场,#职业培训,#在线教育平台

这样的做法,在PPT设计中,可以让文字更具可视化效果。


还能制作个性化形状样式


PPT软件中,仅提供了一些比较基础的形状,像三角形,矩形等,那如果想要个性化图形,就需要亲自动手来做。


比如剪除得到这样的封面图形:



把圆形和圆角组合,可以得到这样的图形:



当我们在制作PPT中,使用了某些特殊字体,但又不能嵌入,为了防止字体丢失,我们可以将文字矢量化。


比如像下面这个页面,使用了书法字体:



这都是布尔运算能够够完成的一些不为人知的效果,怎么样?是不是非常简单?


好啦,以上就是今天的干货!理解并不难,重在操作!如果对大家有帮助的,建议支持三连~

手初学javascript怎么学?最近开始学习JavaScript,西安鸥鹏教育整理了一些相关的基础知识,希望对大家有所帮助。

JS注释方式:

// 单行注释(Ctrl+/ )

/*

段落注释(Ctrl+shift+/ )

*/



【JavaScript基础】

JavaScript:

基于浏览器 、基于(面向)对象、事件驱动、脚本语言

JavaScript的作用:

表单验证,减轻服务的压力,添加页面动画效果,动态更改页面内容,Ajax网络请求(Ajax:可以实现页面局部刷新)

JavaScript组成部分;ECMAScript(5.1/6)、DOM、BOM

ECMAScript脚本程序语言:

语法标准:语法;变量和数据类型;运算符;逻辑控制语句;关键字、保留字;对象

DOM文档对象模型

BOM浏览器对象模型

JavaScript的基本结构:

<script type="text/javascript">

JS语句;

</script>

变量的声明和变量:

先声明变量再赋值:

var width; width=5;

var——用于声明变量的关键字;width——变量名

...

同时声明变量和赋值

不声明直接赋值

【使用JS的三种方式】

1、HTML标签中内嵌JS;

<button onclick="alert('小样你真点啊!')">有本事点我呀!!!</button>

2、HTML页面中直接使用JS:

<script type="text/javascript">

JS语句;

</script>

3、引用外部JS文件:

<script language="JScript" src="JS文件路径"></script>

【注意事项】

1)页面中JS代码与引用JS代码,可以嵌入到HTML页面的任意位置。但是,位置不同会影响到JS代码的执行顺序;

例如:<script>在body前面,会在页面加载之前执行JS代码;

2)页面中JS代码,使用type="text/javascript"

引用外部的JS文件,使用language="JScript"

3)引用外部JS文件的<script></script>标签,必须成对出现,且标签内部不能有任何代码!

【JS中的变量】

1、JS中变量声明的写法:

var width=10;//使用var声明的变量,只在当前函数作用域有效

width1=11;//不适用var,直接赋值生成的变量,默认为全局变量,整个JS文件有效

var a,b,c=1;//同一声明语句同时声明多个变量,变量之间用英文逗号分隔,但是,赋值需要单独赋值,例如上式中,只有c赋值为1,a b为undefined(未定义)。

【声明变量注意事项】

1)JS中所有变量类型声明,均使用var关键字。变量的具体数据类型,取决于给变量赋值的执行。2)同一变量可在多次不同赋值时,修改变量的数据类型

var width=10;//width 为整型变量

width="hahaha";//width 被改为字符串类型

3)变量可以使用var声明,也可以省略var,[区别]不使用var,默认为全局变量

4)同一变量名,可以多次用var声明,但是并没有任何含义,也不会报错,第二次之后的声明,只会被理解为赋值。

2、变量的命名规范

1)变量名,只能有字母,数字,下划线,$组成

2)开头不能是数字

3)变量区分大小写,大写字母与小写字母为不同变量

3、变量命名名要符合驼峰法则:

变量开头为小写,之后每个单词首字母大写;

XiaoXiZhenMeng √

xiao_xi_zhen_meng √

xiaoxizhenmeng ×

4、JS中的变量的数据类型

Undefined:未定义,用var声明的变量,没有进行初始化赋值。var a;

Null:表示为空的引用。var a=null;(其中一种情况)eg:空对象,空数组。。。

boolean:真假,可选值true/false

Number:数值类型。可以是小数,也可以是正数。

String:字符串类型。用""和''包裹的内容,称为字符串。

Object(复杂数据类型):后续讲解,函数、数组等。。。

5、常用的数值函数:

1)isNaN:用于判断一个变量或常量是否为NaN(非数值)

使用isNaN判断时,会尝试使用Number()函数进行转换,如果能转换为数字,则不是非数值,结果为false

"111" 纯数字字符串,false "" 空字符串,false "la" 包含其他字符,true

true/false 布尔类型,false

2)Number():将其他类型转换为数值类型

[字符串类型转数值]

>>字符串为纯数值字符串,会转为对应的数字"111"->111

>>字符串为空字符串时,会转换为0 ""->0

>>字符串包含其他非数字字符时,不能转换 "111a"->NaN

[布尔Boolean类型转数值]

true->1 false->0

[null/Undefined转数值]

null->0 Undefined->NaN

[Object类型转数值]

(以后再了解哦~)先调用ValueOf方法,确定函数是否有返回值,再根据上述各种情况判断。

3)parseInt:将字符串转成数值

>>>空字符串,不能转。结果为NaN

>>>纯数值字符串,能转。"123"->"123" "123.5"->123(小数转化时,会直接抹去小数点,不进行四舍五入)

>>>包含其他字符的字符串,会截取第一个非数值字符串前的数值部分。"123a456"->123 "a123b345"->NaN

>>>parseInt只能转String类型,Boolean/null/Undefined 均为NaN

4)parseFloat:将字符串转为数值

>>>使用方式同parseInt,但是,当转化小数字符串时,保留小数点;转化整数字符串时,保留整数;

"123.5"->123.5 "123.0"->123

5)typeOf:用来检测变量类型

未定义—>Undefined 字符串->string true/false->boolean 数值->Number

对象/null->Object 函数->function

【JS中的输出语句】

document.write();

输出语句,将write的()中的内容打印在浏览器屏幕上

使用时注意:除变量/常量以外的任何内容,打印时必须放在""中,变量/常量必须放到""外

打印的内容同时有多部分组成,之间用“+”链接

例如:document.write("输出互换前手中的纸牌:"+left+"<br />");

alert();弹窗警告

1、【算术运算】

+ 加、- 减、* 乘、 / 除、 % 取余、++ 自增、-- 自减

+:有两种作用,链接字符串/加法运算;当+两边均为数字时,进行加法运算;

当加号两边有任意一边为字符串时,进行字符串链接,链接之后的结果认为字符串

++:自增运算符,将变量在原来基础上+1;

--:自减运算符,将变量在原来基础上-1;

【n++ 与 ++n 的异同】

n++:先使用n的值进行计算,然后再把n+1;

++n: 先使用n的值+1,然后再用n+1以后的值,去运算;

相同点:不论是n++还是++n,在执行完代码以后,均会把n+1;

eg: var a=3;

var b,c;

b=a++ +2; //a=3 b=5 c=4

c=++a +2; //a=4 b=5 c=7

document.write("a:"+a);

document.write("b:"+b);

document.write("c:"+c);

2、赋值运算

=赋值、 +=-=*=/=%=

+=:a +=5;相当于a=a + 5;但是,前者的执行效率要比后者快,

3、关系运算

==等于、===严格等于、 !=不等于 、>、<、>=、<=

===:严格等于;类型不同,返回false;类型相同,再进行下一步判断

==:等于;类型相同,同===;类型不同,尝试将等式两边转为数字,再判断;

特例:null==Undefined √ ; null===Undefined ×

4、条件运算符(多目运算)

a>b?true:false

有两个关键符号:?和:

当?前面的部分运算结果为true时,执行:前面的代码;

当?前面的部分运算结果为false时,执行:后面的代码;

>>>多目运算符可以多层嵌套:

例如:var jieguo=

5、逻辑运算符

&& 与、|| 或、! 非

6、运算符的优先级

()

! ++ --

% / *

+ -

> < >=<=

==!=

&&

||

各种赋值==+ *=/=%=

【if-else结构】

1、结构写法:

if(判断条件){

//条件为ture时执行

}else{

//条件为false时执行

}

2、if()中的表达式,运算之后的结果应该为:

1)Boolean:true 真 ; false 假

2)string:非空字符串为真 ;空字符串为假

3)Number:0为假 ;一切非0均为真

4)Null/NaN/Undefined:全为假

5)Object:全为真

3、else{}结构,可以根据具体情况省略;

【多重if、阶梯if】

1、结构写法:

if(条件一){

//条件一成立

}else if(条件二){

//条件一不成立&&条件二成立

//else if 部分,可以有多个

}else{

//条件一不成立&&条件二不成立

}

2、多重if结构中,各个判断条件是互斥的,只能选择其中一个

3.if/else的大括号可以省略,但不提倡,如果省略,

则if/else包含的代码只包括其后最近的一行(分号结束);

else结构永远属于其前方最近的一个if结构。

【嵌套if结构】

1、结构写法:

if(条件一){

//条件一成立

if(条件二){

//条件二成立

}else{

//条件为false时执行

}

}else{

//条件为false时执行

}

2、if结构可以多重嵌套,但是原则上不超过三层

【Switch-Case结构】

1、结构写法:

switch(表达式){

case 常量表达式1:

语句一;

break;

case 敞亮表达式2:

语句二;

break;

。。。

default:

语句N

}

2、注意事项:

1)switch()中的表达式,以及每个case后面的表达式,可以为任何JS支持的 数据类型;(对象和数组不同);

2)case后面的所有常量表达式,必须各不相同,否则只会执行第一个;

3)case后的常量可以是任何数据类型;同一个switch结构的不同case,可以是多种不同的数据类型;

4)switch在进行判断时,采用的是全等判断===

5)break的作用:执行完case代码后,跳出当前switch结构;

缺少break的后果:从正确的case项开始,依次执行所有的case和defalse

6)switch结构在判断时,只会判断一次正确答案,当遇到正确的case项后,将会不再判断后续项目,依次往下执行;

7)switch结构的执行速率要快于多重if结构。在多路分支时,优先考虑switch结构。

【循环结构的步骤】

1)声明循环变量

2)判断循环条件

3)执行循环体(while的{}中所有代码)操作

4)更新循环变量

然后,循环执行2)3)4)

【JS中循环条件支持的数据类型】

1)Boolean:true 真 ; false 假

2)string:非空字符串为真 ;空字符串为假

3)Number:0为假 ;一切非0均为真

4)Null/NaN/Undefined:全为假

5)Object:全为真

while循环特点:先判断,在执行

do-while循环特点:先执行,在判断;即使初始条件不成立,do-while循环也至少执行一次

【For循环】

1、for循环有三个表达式,分别为:①定义循环变量 ② 判断循环条件 ③更新循环变量(三个表达式之间,用;分隔。)

for循环三个表达式可以省略,两个;缺一不可

2、for循环特点:先判断,再执行;

3、for循环三个表达式,均可以有多部分组成,之间用逗号分隔,但是第二部分判断条件

需要用&&链接,最终结果需要为真/假

【循环控制语句】

1、break:终止本层循环,继续执行循环后面的语句;

当循环有多层时,break只会跳过一层循环;

2、continue:跳过本次循环,继续执行下一次循环;

对于for,continue执行后,继续执行循环变量更新语句n++

对于while,do-while,continue执行后,继续执行循环条件,

判断;所以使用这两个循环时必须注意continue一定要在n++之后,否则会造成死循环。