第一篇:杨辉三角说课稿
一、教材分析
杨辉三角是人教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)
名师课堂(山东人民出版社)
第二篇:实验三 队列实现杨辉三角
实验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.下一步的改进
第三篇:微机原理课程设计——输出杨辉三角
目录
第一章 绪论...................................................................................................................................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
第四篇:杨辉三角--中国的帕斯卡三角形
杨辉三角--中国的帕斯卡三角形
中国的数学发展到宋元时期,终于走到了它的高峰。在这个数学创新的黄金时期中,各种数学成果层出不穷,令人目不暇接。其中特别引人注目的,当首推北宋数学家贾宪创制的“贾宪三角”了。
由于史书没有贾宪的传记,所以我们今天对这位数学家的生平事迹已经无法搞清楚了。只知道他曾经当过宋代”左班殿直”的小官,是当时天文数学家楚衍的学生,还写过两部数学著作,可惜这两部著作现在都失传了。幸亏南宋数学家杨辉在他的书中引述了贾宪的许多数学思想资料,才使我们今天得以了解贾宪在数学上的重大贡献。
贾宪最著名的数学成就,是他创制了一幅数字图式,即“开方作法本源图”(见下图)。这幅图现见于杨辉的书中,但杨辉在引用了这幅图后特意说明:“贾宪用此术”。所以过去我国数学界把这幅图称为“杨辉三角”,实际上是不妥当的,应该称为“贾宪三 角”才最为恰当。
图 1-6-1开方作法本源图
用现代的数学术语来说,这幅“开方作法本源图”实际上是一个指数为正整数的二项式定理系数表。稍懂代数的读者都知道:
如果把以上式子中等号右边的各个系数排列起来,则可得:
这正好与“开方作法本源图”上的数字完全相符。
这样一种二项式系数的展开规律,在西方数学史上被称为“帕斯卡三角形”。帕斯卡是法国数学家,他是在1654年所著的书中给出类似于贾宪“开方作法本源图”的数字三角形表的(见图1-6-1)。其实在欧洲,类似的数字三角形也并非帕斯卡最先发明,只是开始没有广泛流传罢了。西方最古的此类数字三角形,可以上溯到1527年;但与贾宪的这个图相比,已经晚了四百多年。因此我们完全有理由把这项中国人最先发明的数学成果称为“贾宪三角”而载人史册。
不仅如此,贾宪的这个图还蕴含了图中数字的产生规律。细心的读者也许已经发现,这个三角形的两条斜边都是由数字1所组成的,而其他的数都等于它肩上的两个数相加。按此规律,这个数字三角形可以写到任意多层;也就是说,二项式任意正整次幂的
系数展开都可以按照这个图很容易地得到。
图1-6-2 帕斯卡三角形
根据杨辉的记载,贾宪求“开方作法本源图”中各项系数的方法,就是他在开平方、开立方中所用的新法——“增乘开方法”。应用这种“增乘开方法”,既可求得任意高次展开式系数,又可进行任意高次幂的开方。在贾宪之前,从汉代一直到唐代的一千多年时 间里,中国古代数学家只能进行正数的开平方和开立方运算,对于四次方以上的高次幂开方没有什么好的方法。直到贾宪的“增乘开方法”问世,才真正找到了开高次方的最佳方法,并能用它开任意有理数的高次方。这在中国数学史乃至世界数学史上,都是具有极其重要的价值的。以后的数学家在这个基础上继续前进,又把它推广为任意高次方程的数值解法。南宋时期的数学家秦九韶在系统总结前人成果的基础上,终于把以增乘开方法为主体的高次方程数值解法发展到了十分完备的程度。在秦九韶的著作中,方程的系数既有正的,也有负的;既有整数,也有小数;方程的次数最高达10次方。如:
x1015x872x6-864x411664x234992=0
其解法与现代通常使用的“霍纳法”(由英国数学家霍纳于1819年给出)基本一致,但比霍纳法要早了五百多年。从贾宪到秦九韶逐步发展完备起来的高次方程数值解法,是中国数学在宋元时期的一项杰出的创造。
第五篇:杨辉与杨辉三角
数学家杨辉
杨辉,中国南宋末年杰出的数学家和数学教育家。在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)。