的思維過程能用數學表示嗎?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++之后,否則會造成死循環。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。