第一篇:楊輝三角--中國的帕斯卡三角形
楊輝三角--中國的帕斯卡三角形
中國的數學發展到宋元時期,終于走到了它的高峰。在這個數學創新的黃金時期中,各種數學成果層出不窮,令人目不暇接。其中特別引人注目的,當首推北宋數學家賈憲創制的“賈憲三角”了。
由于史書沒有賈憲的傳記,所以我們今天對這位數學家的生平事跡已經無法搞清楚了。只知道他曾經當過宋代”左班殿直”的小官,是當時天文數學家楚衍的學生,還寫過兩部數學著作,可惜這兩部著作現在都失傳了。幸虧南宋數學家楊輝在他的書中引述了賈憲的許多數學思想資料,才使我們今天得以了解賈憲在數學上的重大貢獻。
賈憲最著名的數學成就,是他創制了一幅數字圖式,即“開方作法本源圖”(見下圖)。這幅圖現見于楊輝的書中,但楊輝在引用了這幅圖后特意說明:“賈憲用此術”。所以過去我國數學界把這幅圖稱為“楊輝三角”,實際上是不妥當的,應該稱為“賈憲三 角”才最為恰當。
圖 1-6-1開方作法本源圖
用現代的數學術語來說,這幅“開方作法本源圖”實際上是一個指數為正整數的二項式定理系數表。稍懂代數的讀者都知道:
如果把以上式子中等號右邊的各個系數排列起來,則可得:
這正好與“開方作法本源圖”上的數字完全相符。
這樣一種二項式系數的展開規律,在西方數學史上被稱為“帕斯卡三角形”。帕斯卡是法國數學家,他是在1654年所著的書中給出類似于賈憲“開方作法本源圖”的數字三角形表的(見圖1-6-1)。其實在歐洲,類似的數字三角形也并非帕斯卡最先發明,只是開始沒有廣泛流傳罷了。西方最古的此類數字三角形,可以上溯到1527年;但與賈憲的這個圖相比,已經晚了四百多年。因此我們完全有理由把這項中國人最先發明的數學成果稱為“賈憲三角”而載人史冊。
不僅如此,賈憲的這個圖還蘊含了圖中數字的產生規律。細心的讀者也許已經發現,這個三角形的兩條斜邊都是由數字1所組成的,而其他的數都等于它肩上的兩個數相加。按此規律,這個數字三角形可以寫到任意多層;也就是說,二項式任意正整次冪的
系數展開都可以按照這個圖很容易地得到。
圖1-6-2 帕斯卡三角形
根據楊輝的記載,賈憲求“開方作法本源圖”中各項系數的方法,就是他在開平方、開立方中所用的新法——“增乘開方法”。應用這種“增乘開方法”,既可求得任意高次展開式系數,又可進行任意高次冪的開方。在賈憲之前,從漢代一直到唐代的一千多年時 間里,中國古代數學家只能進行正數的開平方和開立方運算,對于四次方以上的高次冪開方沒有什么好的方法。直到賈憲的“增乘開方法”問世,才真正找到了開高次方的最佳方法,并能用它開任意有理數的高次方。這在中國數學史乃至世界數學史上,都是具有極其重要的價值的。以后的數學家在這個基礎上繼續前進,又把它推廣為任意高次方程的數值解法。南宋時期的數學家秦九韶在系統總結前人成果的基礎上,終于把以增乘開方法為主體的高次方程數值解法發展到了十分完備的程度。在秦九韶的著作中,方程的系數既有正的,也有負的;既有整數,也有小數;方程的次數最高達10次方。如:
x10?15x8?72x6-864x4?11664x2?34992=0
其解法與現代通常使用的“霍納法”(由英國數學家霍納于1819年給出)基本一致,但比霍納法要早了五百多年。從賈憲到秦九韶逐步發展完備起來的高次方程數值解法,是中國數學在宋元時期的一項杰出的創造。
第二篇:楊輝三角說課稿
一、教材分析
楊輝三角是人教B版選修2-3第一章的內容,是在學生學習過二項式定理后,進一步學習其性質的一個課例。楊輝三角所蘊含的豐富的數學規律、數學思想、方法給學生提供了一個很好的數學探究的課題。
根據楊輝三角在整個教材內容中的地位與作用,本節課教學應實現如下教學目標: 知識與技能:了解楊輝三角的簡單歷史,掌握楊輝三角的基本性質;過程與方法: 通過探究過程培養學生觀察問題、分析問題、概括與歸納問題、解決問題能力;情感態度與價值觀:通過了解有關楊輝三角的簡史,體會我國古代數學家的偉大成就,進行愛國主義教育,從而激發學生學習和探究楊輝三角的熱情;通過小組討論,培養學生發現問題、探究問題、建構知識的研究型學習習慣以及合作化學習的團隊精神。
二、重難點分析:
根據上述教學目標,確定本節課的教學重點是:楊輝三角中數字的規律的探究二項式系數的性質;本節課的學習難點是:楊輝三角中數字規律的發現和總結
三、學情分析:
本節課是在學生學習了組合的有關知識和研究數列的規律的方法上進行學習的,在知識上和研究的方法上都做好了準備。
四、教學學法
教法:為了實現本節課的教學目標,在教法上我采取了:“觀察、探究、發現、合作交流”的方法。采用問題導引的方式,讓學生通過對低階楊輝三角的觀察,再到n階楊輝三角的猜想。探究時采用先個人思考后小組合作交流,重點在于發現規律,不要求在課堂上證明。
學法:根據本節課的教學目標和教學方法,主張多給學生一點空間、時間,把角色還給學生,先由學生觀察、探索,再發現與交流.引導學生逐步提高,發展學生有條理的思考與表達的能力,提高歸納猜想能力,使學生獲得較全面的發展。
五、教學過程
為了實現本節課的教學目標,突出教學重點,突破教學難點,在教學設計上采用了以下六個教學環節,分三個探究層次來完成本節課的教學任務。
教學環節(一):創設情境,提出問題
(復習舊知)1:二項式定理及其特例:
(1)Cmn= C0nn-m,(2)n
C+C= Cn+1.2m
nm-1n
m2:二項展開式的通項公式:(a+b)n=Ca+Cnab+ Cnab+…+Cab+…+Cab.1rn
nn
nnn-11n-22 n-rr 0n提出問題)3:提出問題:(a+b)展開式的二項式系數有什么規律? 課件演示:當n依此取1,2,3,?,時,二項式系數的列表,該列表叫做二項式系數表,因為它形如三角形,并且我國南宋的數學家楊輝對其有過深入的研究,所以又稱它為楊輝三角。
簡單介紹楊輝三角的發展歷史(目的是對學生進行愛國主義教育)到了南宋,我國數學家楊輝在《詳解九章算數》(1261)中記載并保存了“賈憲三角”,故稱楊輝三角;再后來我國元朝數學家朱世杰在《四元玉鑒》(1303年)擴充了“賈憲三角”成為“古法七成方圖”;而在歐洲一般認為是該圖形是由法國數學家帕斯卡(Pascal)于1654年發現的,并稱這個圖形為“帕斯卡三角”,由此可見,對于楊輝三角的研究,我國比西方在了大約600年;到了近代又有許多數學家對“楊輝三角”有過深入研究,特別是華羅庚在他的科普著作《從楊輝三角談起》中,對楊輝三角的構成,提出了一些有趣的看法,并將研究成果應用于其他工作。
三、教學過程
為了實現本節課的教學目標,突出教學重點,突破教學難點,在教學設計上采用了以下六個教學環節,分三個探究層次來完成本節課的教學任務。今天,我們在前人研究的基礎上,來探究楊輝三角中蘊含的一些有趣的數量關系。
[設計意圖]通過了解有關楊輝三角的簡史,體會我國古代數學家的偉大成就,進行愛國主義教育,從而激發學生學習和探究楊輝三角的熱情。
教學環節(二):自主探究,揭示性質(源于教材,重在完成教材內要求的教學任務)讓學生觀察上面給出的楊輝三角圖示(或更多階的楊輝三角圖),并且探究以下問題: 探究1:觀察楊輝三角你能發現那些數量關系?由此得到二項式系數具有哪些性質?(提示學生:觀察方法:橫看各行數字間的大小關系,組合數間的關系,以及不同橫行間的數字間的關系)學生先自己觀察(主要工作在于課前),后小組交流觀察結果(主要工作在于課堂)。[ 設計意圖]通過對楊輝三角的觀察,引導學生發現其規律,培養學生的觀察能力,由特殊到一般的歸納、猜想能力。
學生分小組展示探究結果(幻燈片展示),歸納出二項式系數的幾條基本性質:
1、對稱性:每一行中,與首末兩端“等距離”的兩個數相等,即:
2、最值:在(a+b)n的展開式中,當n是偶數時,中間一項 的二項式系數最大,最大系數為:;當n奇數時,中間兩項 與的二項式系數最大,最大系數為:
3、遞推規律:每一行兩端的數字都是1,而其余數字都等于其肩上的兩個數字之和,即:
4、二項式系數的和:二項展開式各二項式系數的和為2n;即:。
[設計意圖]以上四條數量關系是二項式系數的基本性質,也是本節課教學的重點,是解決后面問題的基礎,學生展示自主探究的結論,讓學感受到自主探究的成就,同時激發繼續探究的熱情(特別說明,在這里學生可能提出一些與教材內容不相符的探究結果,可以留待下一環節進行解決)。
教學環節(三):拓展探究,開闊視野(高于教材,重在培養學生的求異思維和創新能力)引導學生繼續探究,看看還能發現那些有趣的數量關系? 拓展探究1:觀察第1,3,7行各個數的特點,你能發現什么規律?你能否總結一個一般性的結論? 結論:第2n-1行的所有數都是奇數,即: 為奇數(m=0,1,2,3,L,2k-1);拓展探究2:觀察第2,4,8行各個數的特點,你能發現什么規律?你能用一個
式子表示嗎? 結論:第2n的所有數(除兩端的1)都是偶數,即: 為偶數(m=1,2,3,? 2k-1),(用基本性質3和拓展探究1的結論可以解釋這個結論);拓展探究3:每一行的各數,從左到右按順序形成一個數,試歸納一下有何特點? 第0行:1=110;第1行:11=111 第2行:121=112;?, 猜想一般規律:第n行的各數,從左到右按順序形成一個數,其結果為:11n(進一步體現本節課的探究思路:由特殊問題,過渡到一般結論,這是我們研究數學問題的常用思路);拓展探究4:第m條斜線上的前n個數的和與第m+1條斜線上的第n個數有什么關系? 特例:1+1+1+1+1+1+1=? 提問:這是第一條斜線上的前幾個數?這是第二條斜線上第幾個數呢? 答案:第一條斜線上的前七個數的和=第二條斜線上的第七個數 同理可以解釋1+2+3+4+5+6=? 和1+3+6+10+15=???(讓學生回答)第2條斜線上的前6個數的和=第3條斜線上的第6個數;追問一下:能否用文字語言將這個規律推廣嗎? 結論:第m條斜線上前n個數字的和=第m+1條斜線上第n個數;[設計意圖]對于楊輝三角的進一步探究,既可以加深學生對楊輝三角基本性質的理解,又可激發學生更大的學習熱情,提高學生的思維水平,發展學生的創新能力。
教學環節(四):創新探究,橫向聯系(探究與其他知識的聯系,培養學生聯想創新能力)創新探究1: 萊布尼茲三角形: 萊布尼茨三角形有許多跟楊輝三角類似的性質,請根據前面推理方法,給出結論。
創新探究2:請寫出斜線上各個數字的和,再觀察這些和,你能發現什么規律? 1,1,2,3,5,8,13,21,34,? 此數列an滿足:a1=1,a2=1, 且an=an-1+an-2(n≥3)。這就是著名的斐波那契數列。這是中世紀意大利數學家斐波那契的傳世之作。教學環節(五):歸納小結,體驗方法
1、知識方面:自主探究的基本性質;創新探究的數字規律;
2、方法方面:認識事物的一般方法“觀察-分析-猜想-證明”;從特殊到一般的思想方法;
3、情感方面:愛國主義精神,合作學習,團隊精神;[設計意圖]讓學生自己歸納本節課的內容,從知識、方法及情感體驗等方面進行總結,使學生在掌握知識的同時,提高歸納總結的能力。進一步培養學生自主探究知識,建構知識的研究型學習習慣。教學環節(六):布置作業,學以致用 1.必做題:P30A組、B組;2.選做題:探索結論的證明方法。
六、教學評價
本節課例的教學過程設計力求體現探究性課題的主要特征:問題性、探究性、自主性、過程性、體驗性。
教學過程的設計,尊重教材,挖掘教材,但又高于了教材。情境的設計、探究內容的設計,多數是以教材內容為主,充分開發教材的功能。
在問題探究環節設計方面分了三個層次,第一個層次:是對二項式系數規律的探究,引導學生從楊輝三角橫行的數字規律橫行各數字之間的大小關系、組合關系以及不同橫行數字之間的關系,發現并總結二項式系數的基本規律,也是本節課的重點;第二個層次是拓展探究,高于課本內容,其主要目的是培養學生的求異思維,拓展學生的視野為今后的研究學習打下基礎;第三個層次是探究楊輝三角與其他知識的聯系,讓學生體會探究方法的應用。七 參考資料: 普通高中實驗教科書數學(人教B版選修2—3)
名師課堂(山東人民出版社)
第三篇:微機原理課程設計——輸出楊輝三角
目錄
第一章 緒論...................................................................................................................................1 第二章 分析與設計.......................................................................................................................2 2.1 題目.......................................................................................................................................................2 2.2 要求.......................................................................................................................................................2 2.3 方案設計與論證...................................................................................................................................3 2.3.1 整體設計思路...........................................................................................................................3 2.3.2 方案選擇...................................................................................................................................3 2.4 結構框圖...............................................................................................................................................4 3.1 宏定義換行...........................................................................................................................................5 3.2 階數輸入過程.......................................................................................................................................5 3.3 數據判斷功能.......................................................................................................................................6 3.4 詢問繼續模塊...................................................................7 3.5 數值計算模塊.......................................................................................................................................7 3.6 顯示模塊...............................................................................................................................................9 3.6.1 數據顯示.................................................................9 3.6.2 空格顯示................................................................10
第四章 實驗結果及問題處理.....................................................................................................12 4.1 實驗結果.............................................................................................................................................12 4.2出現的問題以及解決的方案..............................................................................................................13 4.2.1 數據輸入問題.........................................................................................................................13 4.2.2 除法溢出問題.........................................................................................................................13 4.2.3 數據計算問題.........................................................................................................................14 第五章 總結與體會.....................................................................................................................15 參考文獻.......................................................................................................................................17 附錄...............................................................................................................................................18
第一章 緒論
隨著電子計算機技術的不斷發展,微型計算機系統的功能越來越強,而關于計算機的程序設計語言也經歷了一個發展的過程。從最基本的機器語言到匯編語言,并發展到高級的智能化語言,如visual C++、Visual Basic等。
匯編語言(Assembly Language)是一種采用助記符表示的程序設計語言,即用助記符來表示指令的操作碼和操作數,用符號或標號代表地址、常量或變量。助記符一般都是英文單詞的縮寫,便于識別和記憶。使用匯編語言編寫的程序稱為匯編語言源程序。匯編語言源程序不能由機器直接執行,而必須翻譯成有機器代碼組成的目標程序,這個翻譯的過程稱為匯編。把匯編語言源程序翻譯成目標程序的軟件稱為匯編程序。
匯編語言與機器語言密切相關,它們之間有明顯的對應關系。一條匯編語言指令對應一條機器語言代碼,所以匯編語言和機器語言一樣都是面向機器的語言。使用匯編語言進行程序設計能充分利用機器的硬件功能和結構特點,從而有效地加快程序的執行速度,減少程序占用的存儲空間。所以匯編語言大量用于編寫計算機系統程序、實時通信程序和實時控制程序等。
匯編語言作為最基本的編程語言之一,匯編語言雖然應用的范圍不算很廣,但重要性卻勿庸置疑,因為它能夠完成許多其它語言所無法完成的功能。就拿Linux內核來講,雖然絕大部分代碼是用C語言編寫的,但仍然不可避免地在某些關鍵地方使用了匯編代碼,其中主要是在Linux的啟動部分。由于這部分代碼與硬件的關系非常密切,即使是C語言也會有些力不從心,而匯編語言則能夠很好揚長避短,最大限度地發揮硬件的性能。
第二章 分析與設計
2.1 題目
匯編顯示楊輝三角
2.2 要求
基本內容:在提示信息下,從計算機鍵盤輸入一個滿足要求的數據,在輸出提示信息后顯示相應的楊輝三角。
具體要求如下:
(1)要有提示信息的輸出顯示,例如程序執行時直接顯示輸出提示信息“Please input a number:”然后等待用戶從計算機鍵盤輸入具體數值,例如輸入“4”,然后換行顯示下一步提示信息,例如“The YangHui triangle:”最后顯示通過程序獲得的楊輝三角如下:
(2)分析楊輝三角具體算法,計算結果要求正確。輸出的楊輝三角要求上下左右對稱顯示,上下分別為兩個等腰三角形的形式,即要求分析總結每行行首空格數量,及三角中各個數之間空格的安排方法;(3)要求最少要能夠輸出10階的楊輝三角;
(4)提高要求:增大階數(最少到20階),可任意選擇正反三角顯示。
2.3 方案設計與論證
2.3.1 整體設計思路
本課題要求用匯編顯示楊輝三角形,首先得了解什么是楊輝三角形。楊輝三角形,又稱賈憲三角形,帕斯卡三角形,是二項式系數在三角形中的一種幾何排列。其每一行的數據都有其特定的規律,楊輝三角形又有其獨特的性質:
1、每行數字左右對稱,由1開始逐漸變大,然后變小,最后回到1。
2、第n行的數字個數為n個。
3、第n行數字和為2^(n-1)。
4、每個數字等于上一行的左右兩個數字之和,故可用此性質寫出整個帕斯卡三角形。
5、第n行的第1個數為1,第二個數為1×(n-1),第三個數為1×(n-1)×(n-2)/2,第四個數為1×(n-1)×(n-2)/2×(n-3)/3···依此類推。
在熟悉了楊輝三角形的產生原理,楊輝三角形內各數據的計算方法之后,再在掌握了相關匯編知識以及一定編程能力的基礎上,我們對課題進行了相關分析,總體來說,這個課題的關鍵點分為以下部分,厘清這些關鍵點也是作為明確整體設計思路的重要過程:
(1)、提示信息的顯示。題目明確要求顯示中要有提示信息,實際上,根據需要,在本課題中我們又加了一些功能,當然也必須要增加額外的提示信息。
(2)、階數的輸入功能。通過DOS系統功能調用,確定需要顯示楊輝三角形的行數與大小,能夠實現簡單的人機交互。
(3)、編程得到需要在楊輝三角中顯示的數。基于以下思想:第n行的第1個數為1,第二個數為1×(n-1),第三個數為1×(n-1)×(n-2)/2,第四個數為1×(n-1)×(n-2)/2×(n-3)/3···依此類推。
(4)、某數的顯示及換行。為了顯示的規范和美觀,必須考慮到數與數之間的空格數,當然,某數的顯示是能夠完整輸出楊輝三角形的基礎和前提。
(5)、新增功能,判斷輸入數據是否滿足條件,判斷是否繼續執行。考慮到本程序的使用范圍及使用者能連續使用顯示楊輝三角形的方便性,特增加了數據判斷和詢問繼續功能,使用者想要繼續執行即輸入“Y”,程序自動從頭開始執行,若輸入“N”,則退出。2.3.2 方案選擇
1.對于階數輸入功能,我們想到兩種方案。
方案(1):參考相關文獻上得知,可以通過DOS系統功能調用:鍵盤輸入單字符——
號系統功能調用,同時實現字符的輸入與顯示。
調用格式:MOV INT
AH,1 21H 說明:1號功能調用無入口參數,執行時系統首先等待鍵盤輸入,待程序員按下任何一鍵,系統先檢查是否是Ctrl-Break鍵。如果是則退出,否則將鍵入的字符的ASCII碼置入AL寄存器,并在屏幕上顯示該字符。
方案(2):同樣是DOS系統功能調用,鍵盤輸入字符串——0AH號系統功能調用。說明:其功能是將鍵盤輸入的字符串寫入到內存緩沖區,因此調用之前必須事先定義一個緩沖區。緩沖區的第一個字節給出用來存放鍵入的字符數,第二個留給系統填寫實際鍵入的字符個數,從第三字節開始用來存放鍵入的字符串,最后鍵入回車(↙)鍵表示字符結束。
對于方案(1),格式簡單,使用方便,易于理解,但是對于輸入多位數,相對有點復雜。對于方案(2),從實際編程水平出發,不太能夠嫻熟的使用該系統功能,調用格式復雜,而且鑒于該程序輸入的位數不超過兩位,所以我們最后選擇了方案(1)。
2.4 結構框圖
在編寫程序之前,明確其整個思路的流程圖是相當重要的,所以我們花了一些時間來畫出流程圖,根據流程圖來寫實際程序。如圖2.4.1為本程序的總體匯編思路圖。
圖2.4.1 程序總體流程圖
第三章 實驗程序及分析
3.1 宏定義換行
為了簡化匯編語言源程序,可以把一些頻繁出現的程序段定義為“宏指令”,當遇到這段程序時,只要按宏指令名調用即可,不必重復寫許多指令,匯編程序在遇到宏指令時將其期待成相應的代碼,這樣就有效地縮短匯編語言源程序的長度,使源程序易讀,也減少了由于重復書寫而引起的錯誤。在本課題中,為了顯示楊輝三角,必然需要多次使用換行代碼,故將換行代碼定義為“宏指令”,有以上所述的諸多好處。宏定義如下:
HUANH
MACRO
;宏名為HUANH
;使用2號功能,顯示器輸出字符;13即ASCII為0DH是回車符
;DOS系統功能調用
;10即ASCII為0AH是換行符;DOS系統功能調用;宏定義結束
MOV AH, 2
MOV DL, 13 INT 21H
MOV DL, 10 INT 21H ENDM
3.2 階數輸入過程
過程是程序的一部分,它可以被程序調用。每次可調用一個過程,當過程中的指令執行之后,控制返回調用它的地方。過程的定義是用過程定義偽指令完成的。過程的定義有三個注意點:①、過程名是自定義符,定義開始和結束時的過程名必須相同。②、過程名有三個屬性:段地址,偏移量和距離屬性(NEAR和FAR),匯編程序在匯編時根據過程類型生成段內或段間的調用或返回指令代碼。③、在一個過程中,可以有多個RET指令。一個過程總是通過RET指令返回,RET常作為過程的最后一條指令。在了解以上說明及注意點的基礎上,我們根據實際需要定義了一個實現階數輸入功能的過程。具體定義如下:
SHURU
PROC XOR
BP,BP MOV BX,10 MOV CX,3
;控制輸入位數,外加一位回車
;輸入過程定義,數字存在BP
input:
MOV AH,1 INT CMP JZ
SUB 21H
;DOS功能調用,鍵盤輸入和顯示數據
AL,0DH OK AL,30H
;判斷是否以回車結束輸入
;將ASCII碼轉為16進制數
;字節擴展為字,為了下一條交換指令 CBW
XCHG AX,BP MUL ADD BX
;擴大10倍;加一位 BP,AX
LOOP input RET
;返回調用過程的地方;過程定義結束 OK: SHURU
ENDP
3.3 數據判斷功能
在第一套程序編寫完畢,試運行時,我們發現,本程序能夠支持輸入的數據最大值為14,當數據大于等于15時,則程序出現除法溢出問題,并且自動關閉,所以為了能讓使用者不至于輸入不合法的數據,我們特增加了數據判斷功能,輸入數據滿足條件,允許執行。否則,提示輸入數據超過范圍,要求重新輸入。程序段如下:
MAIN: MOV
DX,OFFSET MSG
;輸出字符串,請輸入一個數;9號功能調用,輸出字符串 MOV AH,9 INT 21H CALL SHURU CMP JB BP,15 MZTJ
;調用輸入函數,顯示輸入的數;輸入的數存在BP,與15比較;滿足條件,允許執行;否則換行 HUANH MOV DX,OFFSET ERROR;準備顯示錯誤信息
MOV AH,9
INT 21H
HUANH
;繼續換行
JMP MAIN
;無條件跳轉到MAIN,重新開始 6
MZTJ: HUANH
··· ··· ···
3.4 詢問繼續模塊
在首套程序編寫完畢運行時,每次我們只能運行一次顯示楊輝三角的程序,以后還得重新鍵入相關命令,才能運行,如此調試程序,效率低下,且可能混亂我們對現象的記錄。所以考慮到我們調試程序的高效性及對于使用者的便利性,我們又增加了一個詢問繼續模塊,當第一次楊輝三角顯示完畢,提示是否繼續,如果鍵入“Y”,則程序自動重新開始執行;如果鍵入“N”,則程序運行結束,退出。程序段如下:
input1: HUANH MOV DX,OFFSET CON
;顯示提問字符串,繼續?
MOV AH,9
INT
21H
;判斷是否繼續;鍵盤輸入數據 MOV AH,1 INT CMP JNZ HUANH JMP 21H AL,59H exit1
;判斷輸入的是否是Y NEAR PTR MAIN
;段內直接近轉移,可以轉移到段內的任何一個位置;結束程序,返回DOS exit1:
MOV AH,4CH
INT 21H 3.5 數值計算模塊
本段數值計算,是正確顯示楊輝三角的關鍵,所以能否找到一種既簡便又能保證計算正確性的方法,是我們本階段工作的中心,我們參閱了很多資料,從幾種計算方法中,選取了最符合我們實際編程水平的,又在保證計算正確性的基礎上,寫出了如下的程序段,它的思想是基于:第n行的第1個數為1,第二個數為1×(n-1),第三個數為1×(n-1)×
(n-2)/2,第四個數為1×(n-1)×(n-2)/2×(n-3)/3···依此類推。
如圖3.5.1為本段程序的流程圖,文字描述即為上段。
Calculate:DEC
MUL
DIV
INC
CMP
JZ
PUSH
MOV
CALL
MOV
SUB
CALL
POP
CALL ok1:RET
圖3.6.1
數值計算流程圖
b;b每次減1相乘
b c;除以c,再加1 c b,0;b是否為0 ok1 AX;保存所得數據
d,0;此處d為位數,為了顯示后面的空格 ShowNum AX,6;預設,總共顯示的空格數為6個單位 AX,d;還需顯示多少空格
Showspace1 AX
Calculate;繼續執行 8
3.6 顯示模塊
3.6.1 數據顯示
得到楊輝三角中的某一個數后,接下來的任務就是如何將它顯示出來。不能完成這項工作,就不能完成整個課題。我們小組在參考平時微機實驗的基礎上,自己分析,找到了一種正確的顯示方法:可以將某數不斷除以10,取出余數顯示,直到商為0,停止除法。例如:要顯示的數是345,除以10后,商為34,余數為5,5壓入堆棧。然后將34除以10,商為3,余數為4,4壓入堆棧。最后將3除以10,商為0,余數為3,3壓入堆棧。彈出堆棧,依次顯示,在匯編中,使用無符號數除法指令DIV OP。指令DIV BL,被除數存在AX中,整數商存在AL,余數存在AH。所以在除以10后,只需將AH中的值取出,下一次除法,可以用邏輯指令AND將其高八位屏蔽,調用2號功能,依次顯示。
為了能充分體現我們編程的思想,如圖3.6.1是數據顯示部分的流程圖,以下編寫的程序也是基于這種思想。
圖3.6.1
數據顯示流程圖
具體程序段如下:
ShowNum: MOV BX, 10
;BX中存除數10
CMP AX, 0 JZ
INC d ok2
;除法運算是否完畢
;此處d為位數,以確定輸出的空格數;除以10,整數商存在AL,余數存在AH DIV BL PUSH AX
AND AX, 00FFH;屏蔽高八位,取商 CALL
SHOWNum POP DX
;取出高八位,即為要顯示的余數;轉為ASCII碼
MOV DL, DH OR DL, 30H
MOV AH, 2 INT RET 21H ok2: 3.6.2 空格顯示
空格的顯示,是為了調整整體楊輝三角的布局,使其輸出為美觀的等腰三角形。前期,我們采用在方格紙上試書寫的方式,確定需要顯示的空格數。實際編程中,使用到了3中空格形式,第一種是首數字1之前的空格,定義為AHEAD,第二種是首數字1后面的空格,定義為BETWEEN,第三種是和需顯示的數字位數相關的空格,定義為BACK,具體在程序中定義如下:AHEAD
DB
BETWEEN DB
BACK
DB
'
$' '
$' ' $' 定義了這三種空格后,需要將其顯示,這里我們使用DOS功能調用,9號系統功能調用——輸出字符串。功能是將指定的內存緩沖區中的字符串在屏幕上顯示出來,緩沖區的字符串以“$”為結束標志。
Showspace: MOV BX, AX
nexts: MOV AH, 9 MOV DX,OFFSET AHEAD CMP BX, 0
;BX減1,控制輸出的空格數
;首行顯示空格,空格數即為輸入的階數
JZ dones
dones: INT DEC JMP RET 21H BX nexts
;完成顯示,返回;AX為6-數據位數 Showspace1: MOV BX, AX
MOV AH, 9
MOV DX,OFFSET BACK next: CMP BX, 0
JZ done
INT 21H
DEC BX
JMP next done: RET
第四章 實驗結果及問題處理
4.1 實驗結果
通過對程序的多次完善,現在能夠達到的要求為:最小輸出1階,最大輸出14階的正反楊輝三角形,能夠判斷輸入數據是否合法,能夠詢問是否繼續輸出,當輸入階數較小時,也能夠很好的顯示輸出,輸出的正反楊輝三角形美觀、清晰,實現了題目所提出的基本要求,對于遇到的一些問題,將在下節討論,下面附上一些運行調試圖片。
如圖4.1.1和圖4.1.2為正反楊輝三角顯示圖,圖4.1.3為當輸入階數超出范圍時的提示錯誤信息,并要求重新輸入數據。
圖4.1.1
11階楊輝三角
圖4.1.2
繼續輸出的4階和6階楊輝三角
圖4.1.3
輸入階數不合法的提示界面
4.2出現的問題以及解決的方案
4.2.1 數據輸入問題
對于數據輸入,我們當初考慮到了兩種方法,在方案選擇中已論證了兩種方法各自的優缺點,本來想使用0AH號系統功能調用,因為它能直接得到輸入的字符串,而不像1號系統功能調用那樣,只能夠輸入單字符,但是使用0AH號系統功能調用實際編寫程序時,卻不清楚輸入的字符串存放在內存的哪個區域,雖然參考文獻上有相關說明,但是我們還是未能取出輸入的字符串,這對于我們是極大的打擊,因為階數輸入是完成整個課題的第一步,這一步基礎不做好,更不要提后面的計算、顯示了。
在要求首先能實現功能的情況下,我們還是選擇了1號系統功能調用,但是要加一個循環控制,控制輸入最大位數和ENTER的ASCII碼判斷輸入結束語句,因為是輸入的單字符,其ASCII碼存在AL寄存器中,所以對于2位數,必須要先將其ASCII碼轉為16進制數,將首先輸入的數乘以10,再加上第二次輸入的數,得到實際鍵入的數值。基于以上思想,我們寫出了上述3.2節的階數輸入功能程序。4.2.2 除法溢出問題
由查閱資料可知,對于高階的楊輝三角形,其內部的數據會變得相當大,當階數為15階時,其最大的數已經超過65536,在數學上65536并不是一個特殊的數,但是在計算機系統中,65536=2^16,在8086CPU內部,有8個16為的內部寄存器,當然累加器AX
也為16位,AX中能存放的最大的數為65536,分為高八位(AH)和低八位(AL),使用匯編的無符號數除法指令DIV OP,指令中給出的操作數是除數,它可以是8位/16位通用寄存器及存儲器;被除數隱含在AX(字節除)或DX、AX(字除法)中。
查閱資料得到,可以使用特定指令,實現整數商存至AX,余數存至DX中,這樣能夠提高數值的上限,但是隨之而來的問題是,對于編程的復雜度的提高,楊輝三角的顯示格式問題,數據除以10取余數的顯示問題,從而影響到整個課題。所以考慮到限定的時間,輸出的美觀等因素,取折中選擇,我們只做到了14階,對于大于等于15階的階數輸入,我們增加了判斷語句,避免除法溢出問題。4.2.3 數據計算問題
眾所周知,楊輝三角形中的數據是有規律排列的,在上文整體設計思路中已經闡述了一些規律。對于數據的計算,我們一開始考慮到的是某數等于其上一行左右兩數之和,依照此規律也可以寫出整個楊輝三角形,而且不需要進行乘除法運算,不會出現除法溢出問題。但是如何得到這個數的上一行的左右兩數,這兩個數該存在哪里,卻是一個不容忽視的問題,而且會占用很大的內存空間。
后來我們查閱資料,又得到一些規律,即第n行的第1個數為1,第二個數為1×(n-1),第三個數為1×(n-1)×(n-2)/2,第四個數為1×(n-1)×(n-2)/2×(n-3)/3···依此類推。這樣可以用DEC n和INC c,用乘除法指令就可運算出正確結果,但是前提是輸入的階數有限制,上一節已經論證。為了能知道這一行到底要運算多少次,我們又加了一個CX控制其運算次數,在計算前,對某一行的n,都要進行壓棧保護。綜上所述,我們寫出了上節結束輸入模塊的程序。事實表明,這樣的方法能夠計算出正確的數值。
第五章 總結與體會
微機原理與接口技術,是我們電子科學與技術專業學生的專業課,由此可知,這門課對于我們的意義是多么重大。所以,在做這次微機的課程設計時,更是不敢怠慢。唯恐不能正確得到設計效果。
這次我們的課程設計的題目是:匯編顯示楊輝三角。剛拿到這個題目的時候,確實不知道從何下手,但是有句話說得好:不逼自己一把,怎么知道自己不可以?我們首先從什么是楊輝三角下手,查閱了相關資料,總結體會了楊輝三角的一些規律,這些規律能夠在我們編程過程中得以體現,所以這個過程是必須的。
接下來,在熟悉了楊輝三角的基礎上,我們結合編程,總結了有幾個工作要做,一是:字符串的顯示;二是:楊輝三角值得計算;三是:這些數值的顯示;四是:輸出的排版問題,保證輸出美觀正確。把整個課題,分為以上四個部分后,各個擊破,從而高效的完成整個課題是一種很實用、有效的方法。雖然在這個過程中遇到了不少問題,但是我們小組成員都很積極的討論解決問題的方法。最后通過整合,得到了整個程序。總體來說,這個程序雖然還不完美,但是代表著我們這一段時間以來的成果,我們都很欣慰,能夠實現題目的要求。
這次微機原理課程設計歷時兩個星期,在整整兩星期的日子里,可以說苦多于甜,但是可以學到很多很多的的東西,同時不僅可以鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識。以前在上課的時候,老師經常強調在寫一個程序的時候,一定要事先把程序原理方框圖化出來,但是我開始總覺得這樣做沒必要,很浪費時間。但是,這次課程設計完全改變了我以前的那種錯誤的認識,以前我接觸的那些程序都是很短、很基礎的,但是在課程設計中碰到的那些需要很多代碼才能完成的任務,畫程序方框圖是很有必要的。因為通過程序方框圖,在做設計的過程中,我們每一步要做什么,每一步要完成什么任務都有一個很清楚的思路,而且在程序測試的過程中也有利于查錯。
其次,以前對于編程工具的使用還處于一知半解的狀態上,但是經過一段上機的實踐,對于怎么去排錯、查錯,怎么去看每一步的運行結果,怎么去了解每個寄存器的內容以確保程序的正確性上都有了很大程度的提高。
通過這次課程設計使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,才能真正為社會服
務,從而提高自己的實際動手能力和獨立思考的能力。在設計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設計的過程中發現了自己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固。
這次課程設計終于順利完成了,在設計中遇到了很多編程問題,最后在老師的辛勤指導下,終于游逆而解。同時學得到很多實用的知識,在此我表示感謝!同時,對給過我幫助的所有同學表示忠心的感謝!
參考文獻
[1] 朱金鈞,麻新旗,等.微型計算機原理及應用技術.機械工業出版社,第2版.附錄
匯編輸出楊輝三角程序代碼: HUANH MACRO
;宏定義5句代碼實現換行
MOV
AH, 2
DL, 13 21H DL, 10 21H
MOV
INT
MOV
INT ENDM
DATA SEGMENT
MSG
RESULT CON DB DB DB
'Please input a number: $' 'The YiangHui triangle:$'
'Do you want to continue?(Y/N): $' 'Data out of range!$' ERROR
DB
AHEAD
DB
'
$' BETWEEN DB BACK a
DB DW DW DW DW
'
$' ' $' ? ? ? ?
;記錄位數,控制空格數
;a為階數;b是行數 b c
d
DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA
;輸入子程序,數字存在BP SHURU PROC
XOR
MOV
MOV BP,BP BX,10 CX,3
;控制輸入位數,外加一位回車
input:
MOV
INT AH,1
21H
;鍵盤輸入數據
CMP
JZ AL,0DH
OK AL,30H
;以回車結束輸入
SUB
CBW
;化ASCII為HEX;字節擴展為字
OK:
SHURU START:
MAIN:
MZTJ:
XCHG MUL
ADD
LOOP
RET ENDP MOV
MOV
MOV
MOV
INT
CALL
CMP JB
HUANH MOV MOV
INT
HUANH JMP
HUANH MOV
MOV AX,BP BX
;擴大10倍 BP,AX
;加一位
input AX,DATA DS,AX
DX,OFFSET MSG;輸出字符串,請輸入一個數 AH,9 21H SHURU
;調用輸入函數,顯示輸入的數BP,15
;輸入的數在BP里 MZTJ
;滿足條件
DX,OFFSET ERROR
;準備顯示錯誤信息
AH,9
21H
MAIN DX,OFFSET RESULT;顯示提示字符串
AH,9
INT
HUANH
MOV
CALL
MOV
MOV
INT
CMP
JZ
MOV
MOV
MOV
DEC
CALL
exit: HUANH MOV
CALL
MOV
MOV
INT
JMP
yhsj: MOV
HUANH
DEC
MOV
CALL
MOV
MOV
INT
MOV 21H
AX,BP
;準備顯示楊輝三角,AX=BP=階數
Showspace DL,'1'
;第一行顯示空格完畢,輸出'1' AH,2 21H BP,1
;階數BP與1比較
exit b,2
;b=2 CX,BP;CX為階數 a,BP;a為階數 a
yhsj AX,BP
;準備顯示楊輝三角,AX=BP=階數
Showspace DL,'1'
;第一行顯示空格完畢,輸出'1' AH,2 21H NEAR PTR input1 c,1
;楊輝三角
BP AX,BP Showspace
;控制首數字前面的空格數 DL,'1'
;首數字必為1
AH,2 21H DX,OFFSET BETWEEN
MOV
INT
MOV
PUSH
CALL
POP
INC
DEC
CMP
JA
DEC
CMP
JZ
CALL
ok3:
HUANH
INC
MOV
CALL
MOV
MOV
INT
input1: HUANH MOV
MOV
INT
MOV
INT
CMP
JNZ
HUANH AH,9 21H AX,1 b Calculate b b
;b為行數
CX CX,1 yhsj b b,2 ok3 fyhsj a AX,a Showspace DL,'1' AH,2 21H
;判斷是否繼續
DX,OFFSET CON;顯示提問字符串,繼續? AH,9 21H AH,1
;鍵盤輸入數據
21H AL,59H
;以回車結束輸入 exit1
JMP exit1: MOV
INT
fyhsj: MOV
HUANH
INC
MOV
CALL
MOV
MOV
INT
MOV
MOV
INT
MOV
DEC
PUSH
CALL
POP
INC
CMP
JB
RET Showspace:
MOV
MOV
MOV
nexts:
CMP
JZ NEAR PTR MAIN AH,4CH 21H c,1
;反楊輝三角
BP AX,BP Showspace DL,'1' AH,2 21H
DX,OFFSET BETWEEN AH,9 21H AX,1 b b Calculate b CX CX,a fyhsj BX, AX;首行顯示空格,空格數即為輸入的階數AH, 9 DX,OFFSET AHEAD BX, 0;BX減1,控制輸出的空格數
dones
INT
DEC
JMP
dones:
RET Calculate: DEC
MUL
DIV
INC
CMP
JZ
PUSH
MOV
CALL
MOV
SUB
CALL
POP
CALL
ok1:
RET ShowNum: MOV
CMP
JZ
INC
DIV
PUSH
AND
CALL
POP 21H BX nexts b b c c b,0 ok1 AX;保存所得數據
d,0 ShowNum AX,6 AX,d Showspace1 AX Calculate BX, 10;顯示某數,并記錄位數AX, 0 ok2 d BL AX AX, 00FFH SHOWNum DX
ok2:
MOV
OR DL, DH DL, 30H AH, 2 21H MOV
INT
RET BX, AX AH, 9 DX,OFFSET BACK BX, 0 done 21H BX next Showspace1:MOV
next:
done:
RET
MOV
MOV
CMP
JZ INT
DEC
JMP
CODE ENDS
END START
第四篇:楊輝與楊輝三角
數學家楊輝
楊輝,中國南宋末年杰出的數學家和數學教育家。在13世紀中葉活動于蘇杭
一帶,其著作甚多。
他著名的數學書共五種二十一卷。著有《詳解九章算法》十二卷(1261年)、《日用算法》二卷(1262年)、《乘除通變本末》三卷(1274年)、《田畝比類乘除算法》二卷(1275年)、《續古摘奇算法》二卷(1275年)。
其中在《詳解九章算法》一書中載有二項(a+b)n展開系數的數字三角形,被稱為“楊輝三角”,它的發現比國外同類發現至少早3O0年。
楊輝的數學研究與教育工作的重點是在計算技術方面,他對籌算乘除捷算法進行總結和發展,有的還編成了歌決,如九歸口決。
他在《續古摘奇算法》中介紹了各種形式的“縱橫圖”及有關的構造方法,同時“垛積術”是楊輝繼沈括“隙積術”后,關于高階等差級數的研究。楊輝在“纂類”中,將《九章算術》246個題目按解題方法由淺入深的順序,重新分為乘除、分率、合率、互換、二衰分、疊積、盈不足、方程、勾股等九類。
他非常重視數學教育的普及和發展,在《算法通變本末》中,楊輝為初學者制訂的“習算綱目”是中國數學教育史上的重要文獻。
===================
楊輝介紹
楊輝,字謙光,中國南宋(1127~1279)末年錢塘(今杭州市)人。其生卒年月及生平事跡均無從詳考。據有關著述中的字句推測,楊輝大約于13世紀中葉至末葉生活在現今浙江杭州一帶,曾當過地方官,到過蘇州、臺州等地。是當時有名的數學家和數學教育家,他每到一處都會有人慕名前來請教數學問題。
楊輝一生編寫的數學書很多,但散佚也很嚴重。據史料記載,他至少有以下書,曾在國內或國外刊行:
《詳解九章算法》12卷(1261)《詳解算法》若干卷
《日用算法》(1262)
《乘除通變算寶》3卷(1274)
《續古摘奇算法如卷》(1275)
《田畝比類乘除捷法如卷》(1275)其中《詳解九章算法》殘缺不全,《詳解算法》、《日用算法》迄今未見傳本。而后3種共7卷合刊在一起,被稱為《楊輝算法》。
楊輝繼承中國古代數學傳統,他廣征博引數學典籍,引用了現已失傳的宋代的許多算書,使我們才得知其部分內容。其中,劉益的“正負開方術”,賈憲的“增乘開方法”與“開方作法本源”圖(即誤傳為“楊輝三角”),就是極其寶貴的數學史料。
楊輝繼沈括研究“隙積術”之后,研究了“垛積術”,即關于高階等差數列的研究。他首次將所謂“幻方”問題作為數學問題研究,并創“縱橫圖”之名。他給出了三階至十階幻方的實例,對某些構成原理也有所研究。楊輝之前在中國尚無這方面的研究成果,楊輝之后,明、清兩代中國數學家關于縱橫圖的研究相繼不絕,因此楊耀的著述也是研究關于幻方乃至組合數學歷史的珍貴資料。楊輝還非常關心日常計算技巧,改進算法程序。
楊輝不僅著述甚豐,而且是一位杰出的數學教育家。他特別注重數學的普及教育,其許多著作都是為此而編寫的教科書。楊輝主張在數學教育中貫徹理論聯系實際的原則,在《日用算法》中,他說:“以乘除加減為法,稱斗尺田為問;用法必載源流,命題須責實用。”他還主張貫徹循序漸進的原則,在《算法通變本末》(即《乘除通變算寶》上卷)中,專門為初學者制了一份“司算綱目”,要求學習者抓住要領,反復練習,這是我國歷史上第一部數學教學大綱。他又告誡初學者:“夫學算者,題從法取,法將題驗,凡欲明一法,必設一題。”又說:“題繁難見法理,定擺小題驗法理,義既通雖用繁題了然可見也。”可見,他十分強調習題應有典型性。楊輝一生治學嚴謹,教學一絲不茍,他的這此教育思考和方法,至今也有很重要的參考價值。
=================
古代數學家楊輝的故事
宋、元數學四大家之一的楊輝是世界上第一個排出豐富的縱橫圖和討論構成規律的數學家. 說起楊輝的這一成就,還得從一件偶然的小事說起.一天臺州府的地方官楊輝坐轎出外巡游,半路上被一個在路中間算題的孩童攔住道路不能通過.楊輝一看來了興趣,連忙下轎,抬步來到前面.
楊輝摸著孩童的頭說:“為何不讓本官從此經過?”
孩童答道:“不是不讓經過,我是怕你們把我的算式踩掉,我又想不起來了.”
“什么算式?”
“就是把1到9九個數字分三行排列,不論直著加、橫著加還是斜著加,結果都是等于15.我們先生說下午一定要把這道題做好.我正算到關鍵之處.”
楊輝連忙蹲下身,仔細地看孩童的算式,覺得這個算式在哪兒見過,仔細一想,原來是西漢學者戴德編纂的《大戴禮》中所寫的文章中提及的.
楊輝和孩童兩人連忙一起運算起來,直到天過午,兩人才舒了一口氣,結果出來了,他們又驗算了一下,結果全是15,這才站了起來.結果如圖1所示:
?/P> 楊輝回到家中反復琢磨,一有空閑就在桌上擺弄這些數字,終于發現了其中的規律,按照類似的規律,楊輝又得到了“花16圖”——把從1到16的數字排列在四行四列的方格中,使每一橫行、縱行、斜行四數之和均為34.
后來,楊輝又將散見于前人著作和流傳于民間的有關這類問題加以整理,得到了“五五圖”“六六圖”“衍數圖”“易數圖”“九九圖”“百子圖”等許多類似的圖.楊輝把這些圖總稱為縱橫圖,于1275年寫進自己的數學著作《續古摘奇算法》一書中,并流傳后世.
但長期以來,人們習慣于把它當做純粹的數學游戲,并沒有給予應有的重視.隨著近代組合數學的發展,縱橫圖顯示了越來越強大的生命力,在圖論、組合分析、對策論、計算機科學領域中都找到了用武之地.
----------------------------楊輝和孩童將算題解答出來后的故事外傳:
后來,楊輝隨孩童來到老先生家里,與老先生談論起數學問題來。老先生說:“北周的甄彎注《數術記遺》一書中寫過‘九宮者,二四為肩,六八為足,左三右七,戴九履一,五居中央。”’楊輝聽了,這與自己與孩童擺出來的完全一樣。便問老先生:“你可知這個九宮圖是如何造出來的?”老先生說不知道。
楊輝回到家中,反復琢磨。一天,他終于發現一條規律,并總結成四句話:“九子斜排,上下對易,左右相更,四維挺出”。就是說:先把l~9九個數依次斜排,再把上l下9兩數對調,左7右3兩數對調,最后把四面的2、4、6、8向外面挺出,這樣三階幻方就填好了。
楊輝研究出三階幻方(也叫絡書或九宮圖)的構造方法后,又系統的研究了四階幻方至十階幻方。在這幾種幻方中,楊輝只給出了三階、四階幻方構造方法的說明,四階以上幻方,楊輝只畫出圖形而未留下作法。但他所畫的五階、六階乃至十階幻方全都準確無誤,可見他已經掌握了高階幻方的構成規律。------------------------------幻方,在我國也稱縱橫圖,它的神奇特點吸引了無數人對它的癡迷。從我國古代的“河出圖,洛出書,圣人則之”的傳說起,系統研究幻方的第一人,當數我國古代數學家——楊輝。
其實,中國古代數學家在數學的許多重要領域中處于遙遙領先的地位。中國古代數學史曾經有自己光輝燦爛的篇章,而楊輝三角的發現就是十分精彩的一頁。
楊輝,字謙光,北宋時期杭州人。在他1261年所著的《詳解九章算法》一書中,輯錄了如上所示的三角形數表,稱之為“開方作法本源”圖。===============
楊輝三角
簡單的說一下就是兩個未知數和的冪次方運算后的系數問題,比如(X+Y)2等于X2 +2XY+Y2,這樣系數就是1 2 1這就是楊輝三角的其中一行,立方,四次方,運算的結果看看各項的系數,你就明白其中的道理了
這就是楊輝三角,也叫賈憲三角。他于我們現在的學習聯系最緊密的是2項式乘方展開式的系數規律。如圖,在賈憲三角中,第3行的第三個數恰好對應著兩數和的平方公式(在此就不做說明了)依次下去楊輝三角是一個由數字排列成的三角形數表,一般形式如下:
楊輝三角最本質的特征是,它的兩條斜邊都是由數字1組成的,而其余的數則是等于它肩上的兩個數之和。
同時這也是多項式(a+b)^n 打開括號后的各個項的二次項系數的規律,即為 0(a+b)^0(0 nCr 0)1(a+b)^1(1 nCr 0)(1 nCr 1)2(a+b)^2(2 nCr 0)(2 nCr 1)(2 nCr 2)3(a+b)^3(3 nCr 0)(3 nCr 1)(3 nCr 2)(3 nCr 3)................因此楊輝三角第x層第y項直接就是(y nCr x)
我們也不難得到 第x層的所有項的總和 為 2^x(即(a+b)^x中a,b都為1的時候)[ 上述y^x 指 y的 x次方;(a nCr b)指組合數] 這樣一個三角在我們的奧數競賽中也是經常用到,最簡單的就是叫你找規律。在國外,這也叫做“帕斯卡三角形”。
S1:這些數排列的形狀像等腰三角形,兩腰上的數都是1 S2:從右往左斜著看,第一列是1,1,1,1,1,1,1;第二列是,1,2,3,4,5,6;第三列是1,3,6,10,15;第四列是1,4,10,20;第五列是1,5,15;第六列是1,6??。
從左往右斜著看,第一列是1,1,1,1,1,1,1;第二列是1,2,3,4,5,6??和前面的看法一樣。我發現這個數列是左右對稱的。S3:上面兩個數之和就是下面的一行的數。S4:這行數是第幾行,就是第二個數加一。??
----------------------------楊輝三角的簡史:北宋人賈憲約1050年首先使用“賈憲三角”進行高次開方運算,南宋數學家楊輝在《詳解九章算法》(1261年)記載并保存了“賈憲三角”,故稱楊輝三角。元朝數學家朱世杰在《四元玉鑒》(1303年)擴充了“賈憲三角”成“古法七乘方圖”。
時間上:楊輝(1261)朱世杰(1303)也明顯就可以知道是楊輝發現的朱世杰只是擴充了其中的內容 附賈憲資料:
賈憲,北宋人,約公元1050年完成一部叫《黃帝九章算術細草》的著作,原書丟失,但其主要內容被南宋數學家楊輝著《詳解九章算法》(1261)摘錄,因能傳世。根據楊輝的摘錄,賈憲的高次開方法是以一張稱為“開方作法本源”的圖為基礎。開方作法本源圖現稱“賈憲三角”或“楊輝三角”,它實際上是一張二項系數表。賈憲增乘開方法,是一個非常有效的和高度機械化的算法,可適用于開任意高次方。這種隨乘隨加、能反復迭代計算減根變換方程各項系數的方法,與現代通用的“霍納算法”(1819)已基本一致。而與此方法相聯系的“賈憲三角”,在西方文獻中則稱“帕斯卡三角”(1654)。
第五篇:實驗三 隊列實現楊輝三角
實驗3隊列實現楊輝三角
一、實驗目的
1.熟悉隊列的邏輯結構。2.回顧常用的存儲結構。
3.掌握System.Collection.Queue類的使用方法。
4.熟悉隊列的幾種典型應用,用隊列來解決一些編程問題。5.用循環隊列實現楊輝三角并測試。
二、實驗內容
楊輝三角是除了每一行的第一個元素和最后一個元素是1,其他元素的值是上一行與之相鄰的兩個元素之和。
1.實現循環隊列類 a)兩個構造函數 b)入隊 c)出隊
2.用順序循環隊列實現楊輝三角(一)程序分析 2.1存儲結構
用一片連續的存儲空間來存儲循環隊列中的數據元素,即采用順序存儲的方式。2.2 關鍵算法分析 1.出隊
1)自然語言描述: a.判斷隊列是否空 b.如果隊列空,拋出異常 c.如果隊列不空,則
i.ii.iii.元素出隊 移動對頭指針 隊列長度減1 代碼描述:
publicvirtualobjectDequeue()//出隊 {
} if(this._size == 0){ //隊下溢
} object obj2 = this._array[this._head];//出隊 this._array[this._head] = null;//刪除出隊元素 //移動隊頭指針
this._head =(this._head + 1)% this._array.Length;this._size--;return obj2;thrownewInvalidOperationException(“隊列為空”);時間復雜度:O(1)2.入隊
自然語言描述:
d.判斷隊列是否滿 e.如果隊列滿,則擴容 f.如果隊列不滿,則
a)元素入隊 b)移動隊尾指針 c)隊列長度加1 代碼描述:
publicvirtualvoidEnqueue(objectobj)//入隊 {
} if(this._size == this._array.Length)//當數組滿員時 { //計算新容量
} this._array[this._tail] = obj;//入隊
this._tail =(this._tail + 1)% this._array.Length;//移動隊尾指針 this._size++;int capacity =(int)((this._array.Length * this._growFactor)/ 100L);if(capacity <(this._array.Length + _MinimumGrow)){ //最少要增長4個元素
} this.SetCapacity(capacity);//調整容量 capacity = this._array.Length + _MinimumGrow;時間復雜度:O(1)3.打印楊輝三角
自然語言描述: 要定義的變量:
1)行:n
2)列:
i.ii.空格 j 數值
k 3)左肩:left 4)右肩:right 代碼描述:
三、程序運行結果
四、實驗心得
1.調試時出現的問題及解決的方法
2.心得體會
3.下一步的改進