分支结构算法的实现教学设计(精选8篇)
教学目标:
1、知识与技能:理解程序设计分支结构基本思想;掌握分支结构语句特点
2、过程与方法:学会用算法分析问题;能够使用分支结构编写简单的程序解决具体问题
3、情感态度与价值观:体会用结构化方法解决数学问题的便捷性;明确结构化在程序设计中的重要作用;激励尝试使用多种方法解决问题;培养良好的编程习惯和态度。
教学重点:
1、理解程序设计的分支结构基本思想;
2、熟悉IF语句及掌握IF语句的运用; 教学难点:
1、分支结构实现语句的格式和功能;
2、编写简单的程序的过程;
3、变量的特点。教学方法:
任务驱动法、演示法、讲解法、师生互动法 课时安排:一课时 教学设计:
1、教学对象分析
本课适用于高中二年级学生。这一阶段的学生具备一定的数学基础和具有一定的比较、归纳能力,是一个正处在抽象逻辑思维已初步形成并继续发展的阶段。学习分支结构程序设计就是要在这些基础上,借助具体事务为载体,了解程序解决问题的条件与办法。在学习本课之前,学生已经掌握pascal程序的编写与运行方法,了解顺序程序结构的执行流程。
2、教学需要分析
本节课在有多媒体教学软件的机房上课。通过再度开发课程资源(《信息技术》第四册第四章第二节《分支结构算法的实现》)和充分利用学生发言的现场事件进行有效讲授,激发学生的探究热情,努力创设师生之间的互动场景,使学生在讨论中协作学习,在发言中共享学习成果。
本节课在教师设疑、讲解和学生分析、讨论、发言等基础上进行的,主要运用的教学方法是任务驱动法。教师讲解的过程就是不断地“否定”前面的结论,提出新问题(任务)、请同学们分析问题,提出解决方案,帮助学生解决问题的过程。
在授课过程中,要根据课堂现场发生的事件,随时调整教学内容,当学生的讨论发言偏离本节课的教学目标和内容时,要机智处理。
教学过程: 导入:
1、阅读句子,总结规律。
如果天气好,就去打球,否则留在家里。
如果答对了,就会得分,否则就会扣分。
如果„„就„„(否则„„)
2、在Pascal中,这种根据不同的情况转向不同的分支来处理的程序结构就是分支结构。
If„„then„„(else„„)
(学生讨论、发言,教师引导他们注意if、then、else三个词,并为这些按条件语句的一般形式划分部分)
【学生归纳】
条件语句的一般形式:
格式一:if 条件 then 语句组
格式二:if 条件 then 语句组1 else 语句组2 【教师说明】
格式一功能:当条件满足时执行then后语句组,否则跳过此行执行下一行。格式二功能:当条件满足时执行语句组1,否则执行语句组2。例题讲解
编写程序,实现人机对话,电脑显示“你快乐吗?(Y OR N)”,如果按“Y”,就回答“我很高兴”,否则就回答“太糟了”。
流程图(略)编写程序 PROGRAM ex1;VAR a:char;BEGIN Writeln(‘Are you happy?’);Write(‘a=’);Readln(a);IF a=‘y’
THEN writeln(‘I am happy’)ELSE writeln(‘too bad’)END.上机任务
输入三个正数,输出最大数
(1)分析题目,设问,引导学生思考:
在现实中,如果要求三个正数中的最大数,我们很容易做到;但是,如果有一千个数或更多的数,就需要较长的时间,而且容易出错。如果用Pascal按一定的算法编写程序,就可以准确地在短时间内求出一千个数或更多数中的最大数,那我们应该如何编写程序呢?
(2)分析算法:
归纳算法:两数分别做比较,用中间量保存当前最大数,最后求出最大数。
①max←0 ②输入a、b、c的值
③如果max
Writeln(‘The max is’ ,max)END.程序运行:
当程序运行后(Ctrl+F9),先在屏幕上出现一行提示语句:“Please input a b c”,光标在下一行行首闪烁,等待用户从键盘输入数据,输入任意三个数后按回车,最后显示结果。如果输入其他的任意三个数,也不需要修改程序了,直接在光标显示输入新的数就可以得出结果。
随机请部分同学到教师机上演示他们的程序,并请他们谈谈自已编(改)写程序的体会。小结:
1、IF 语句
If„„then„„(else„„)
2、编写程序的方法。
①分析题目,想出解题的思路和方法(算法); ②把分析的处理步骤用流程图表示出来; ③用Pascal的语言编写出程序。
知识拓展 突破难点(1)编写程序步骤:
①分析题目,想出解题的思路和方法(算法);
②把分析的处理步骤用流程图表示出来;
③用Pascal的语言编写出程序。(2)说明:
①Pascal语言对分行没有严格的要求,可以将多句语句写在一行中,也可以将一句语句分行书写。
该课题的内容选自于《算法与程序设计》教材,该教材是上海市高中信息科技课程选修模块。学习本模块的内容,目的是进一步激发学生对计算机探索学习的兴趣,培养运用计算机解决具体问题的基础能力,养成良好的思维与程序设计基本习惯。
《分支结构的程序实现》是本模块第四章第一节的内容。分支结构的授课分为两课时,第一课时:分支结构的流程图绘制;第二课时:分支结构的程序实现。本课为第二课时,主要内容是用IF语句解决日常生活中涉及分支结构的实际问题。
通过本课的学习,有助于学生体会和理解程序设计的思想,提升学生解决问题的能力,而且也为之后循环结构、枚举算法的学习打下基础。
学情分析:
学生在学习本课内容前,需有两方面的知识储备:
1.通过分支结构第一课时“分支结构的流程图绘制”知识的学习,理解并掌握分支结构的特点、执行流程及其作用。
2.通过“顺序结构及其程序实现”知识的学习,基本掌握VB控件的设置、动作的实现等内容,对于VB程序的建立、运行、调试过程也有一定的实践经验。
对上述内容的学习和掌握为本节课的学习奠定了一定的基础。另外,高一的学生分析解决问题的能力、自我探究的能力也有了一定的水平。
教学资源:
根据教学内容和学生实际,在教学资源方面做如下准备:
1.技术准备:计算机网络机房、多媒体广播软件、Microsoft Visual Basic 6.0中文版
2.资源。 (1) 教师机:1个PPT课件,2个程序(1个“猜价格”的演示程序,1个“ATM机录入密码”半成品程序) (2) 学生机:1个“半成品”程序(包含3个小任务)
教学目标分析:
1.知识与技能: (1) 掌握分支选择中IF语句(块语句)的格式和功能。 (2) 学会用IF语句解决日常生活中的实际问题。
2.过程与方法: (1) 通过依次学习单分支语句、双分支语句,再到分支嵌套语句,学生能循序渐进地掌握分支结构。 (2) 通过采用VB半成品加工策略来完善程序,学生能体验运用编写程序解决问题的基本过程。
3.情感态度与价值观: (1) 培养学生严密的逻辑思维能力、自主探究能力。 (2) 加强学生利用本学科解决日常学习生活中问题的意识。
教学重点难点:
教学重点:掌握分支结构IF语句的格式。
教学难点:能根据实际分析问题,写出程序并调试成功。
教法与学法:
1.教法:半成品加工方法。采用半成品加工方法,可以淡化与分支结构无关的内容,例如可视化VB界面的设计,从而有效提高课堂效率,这种方式在巩固练习中使用非常合适。
2.学法:自主学习、小组讨论、组间交流。学生作为学习的个人主体,必须通过自主学习掌握本节课的学习内容,从而培养学生独立解决问题的能力。采用小组讨论、组间交流的方法,培养学生互助、团结协作的良好品质;增强学生协作学习、与人合作交流的意识;形成积极主动的学习和使用信息技术、参与信息活动的态度。
教学过程设计:
(一)创设情境,激发兴趣
1.教师演示猜价格的小程序。
2.提出问题:该程序是一种什么结构?顺序结构?还是分支结构?
3.举例:生活中有很多分支结构的问题。
4.引出分支结构的程序实现。
(设计意图:从生活中提取问题, 让学生能有学习兴趣, 并能及时了解本节课的学习任务。)
(二)合作探究,获得新知
以“银行ATM机录入密码”程序为例:
1.教师展示“密码判断”的单分支结构流程图, 请同学用自然语言来描述。学生回答:如果 (用户输入的密码为999) 那么 (程序提示密码正确) 。
2.教师引出VB中单分支结构IF语句的基本用法。同时让同学们讨论IF…THEN…中省略号代表什么含义。学生回答:IF (条件) THEN (条件成立时执行的语句) 。
3.师生共同共同编写代码, 程序实现。
4.教师提出问题:如果密码是错误的, 那么将会出现什么情况?如果要让程序在密码输入错误时, 也要出现提示, 该如何做。
5.教师展示双分支结构流程图, 请同学用自然语言来描述算法。学生回答:如果 (用户输入的密码为999) 那么 (程序提示密码正确) 否则 (程序提示密码错误) 。
6.教师引出VB中双分支结构IF语句的基本用法, 同时让学生讨论IF…THEN…ELSE…中省略号代表什么含义。学生回答:IF (条件) THEN (条件成立时执行的语句) ELSE (条件不成立时执行的语句) 。
7.师生共同编写代码, 程序实现。
8.教师讲解IF语句的两种格式:行IF语句和块IF语句的用法。
(设计意图:通过自然语言与程序设计语言的比对, 加深学生对分支结构的认识。通过师生共同参与改写程序, 使学生了解IF语句的书写格式, 并感受程序语言的严谨性。)
(三)学生实践,解决问题
1.教师布置3个任务,学生选择其中一个进行操作,要求自主完成。 (1) 判断是否中奖,要求如下:程序设置初始中奖号码,若用户输入的号码为中奖号码,程序则显示“恭喜您,您中奖啦!” (2) 判断是否打折,超市进行苹果促销,如果买5斤以内就按价格4.5元/斤计算,如果大于等于5斤,总价可打九折。要求如下:输入你买的苹果重量(单位:斤),程序显示总金额。 (3) 判断一元二次方程是否有解。要求:输入一元二次方程的系数a, b, c,判断该方程是否有解,如果有解,则输出解,如果没有解,则输出“该方程无解”。
2.任务分析:判断是单分支还是双分支结构?鼓励学生可多选任务来完成。
3.展示成果,教师强调IF语句的格式规范。
(设计意图:通过三道难易不同的题目进行分层训练,让不同知识基础和思维能力的学生都能够体验到成功的喜悦,提高学生分析问题、解决问题的能力,突出本课的重点。)
(四)交流提升,应用拓展
1.教师提出在任务2中,若要求如下:输入斤数,如果小于5斤,就按价格4.5元/斤计算,如果大于等于5斤,就打九折,如果大于等于10斤就打八折,程序显示总金额,该如何设计算法?学生回答:利用分支嵌套结构可以实现该算法。
2.教师展示分支嵌套流程图。
3.学生小组讨论,组间交流。
4.学生组内共同撰写程序。
5.教师展示学生的代码,再次强调语句撰写的规范。
(设计意图:通过对新任务的探讨、分析,加深学生对分支结构嵌套语句的理解。同时进一步养成良好的编程习惯。)
(五)总结回顾,布置作业
1.教师再次强调IF语句的书写格式(单分支语句,双分支语句)。
关键词:简单网络管理协议(SNMP );网络拓扑自动发现算法
中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)15-30661-02
Study on Arithmetic on Finding Network's Topological Structure
YE Shun-fu
(Zhangzhou City Employment Center,Zhangzhou 363000,China)
Abstract:The original arithmetic is based on SNMP,which is fine in finding network's main topological structure, but not well in getting a full one of a subnet.So,a way based on ICMP is putted forward to solve this problem for achieving the full one.
Key words:SNMP(Simple Network Management System);Arithmetic on auto-finding network's topological structure
随着计算机网络的普及,人们对计算机网络的依赖性大大加强了。在现有的技术条件下,人们希望有一个更加稳定可靠的网络环境。计算机网络管理系统就是应这样的需求而产生的。它对网络上的各种设备进行管理,通过监视和控制这些设备,及时地向管理人员报告网络状态,并且简化网络故障的处理,减少故障造成的损失,提高网络的服务质量和效率。在我国,人们开始认识到网络管理的重要性。
国外在网络管理这一领域起步较早,取得了一些成果。在学术界,IEEE通信学会下属的网络营运与管理专业委员会(CNOM , Committee of Network Operation and Management),从1988年起每两年举办一次网络营运与管理专题讨论会。国际信息联合会(1FIP)也从1989年开始每两年举办一届综合网络管理专题讨论会。以及OSI网络管理论坛(OSI/NM FORUM ),专门讨论网络管理的有关问题[1]。近年来,也有一些厂商和组织开始推出自己的网络管理解决方案[2]。比较有影响的有:网络管理论坛的OMNIPoint和开放软件基金会(OSF)的DME(Distributed Management Environment)[3]。本文详细介绍系统网络拓扑自动发现算法的实现。
1 拓扑发现算法的相关理论
1.1路由选择算法
网络拓扑的发现,实际上就是根据网络上节点连接情况,构造出来一个反应这种连接关系的图。网络节点可以是网关,也可以是子网:网关节点是与子网和其它网关节点相邻的节点;子网节点可被认为只与网关节点相邻,至少与它的缺省网关相邻。
各子网通过各目的网关与其他子网通信,这些子网可以是一个局域网,也可以是某个局域网的一部分,它们都连接到网关的一个端口上,网关的端口可以连接子网,也可以同其他路由器相连。当子网的某一机器发送数据时,数据包首先到达子网的缺省网关,缺省网关检测数据包中的目的地址,根据其路由确定该日的地址是否在与自己相连的子网中,如果是,则把数据包直接发往目的地,否则转发给路由表中规定的下一个网关。这样,下一个网关再进行类似处理,依次类推,数据包将最终到达目的地。
1.2图论中的遍历算法
遍历的定义是:对于无向图,以图中某一点为出发点,沿着边依次访问图的其余节点,如果图是连通的,则从图的任一点出发按一定的顺序沿着某些边可以访问图中的所有节点,而且每个节点仅被访问一次,这一过程称为图的遍历。
在网络上,一个节点可以和很多的节点连接,所以当进行网络拓扑结构发现的时候,有可能会访问己经被发现过的节点。因此,在遍历的时候,必须对每一个节点设置一个标志。当节点未被访问过时,相应的标志为0,否则,就置为1。
2 拓扑发现算法的设计与实现
2.1主拓扑的发现
主拓扑指的是反映出关键设备包括路由器,它们的接口和子网的连接关系,即路由器-路由器、路由器-子网、接口的关系。这些信息需要对网络进行搜索而获得:一般只需要对连接设备进行遍历就可以得到主拓扑结构。当前的网管软件都是通过对网络设备的MIB库进行访问,所以这种方法又被称为基于SNMP的拓扑发现。
2.2子网发现
经过上述的遍历过程,可以得到网络拓拓扑图的整体构成,知道了网络主干通道情况。但是子网内部的具体设备以及连接状态尚不可知。这就需要依靠子网发现来做进一步的工作。子网发现完成的任务是确定子网内各网络设备的状态、类型以及网络接口。
3 改进的拓扑算法
前面基于SNMP的拓扑算法在一定程度上是非常有效的,拓扑的速度也非常快。但它存在一个缺陷。那就是,在一个特定的域中,所有的子网的信息都依赖于设备具有SNMP的特性,如果系统不支持SNMP,则这种方法就无能为力了。还有对网络管理的不重视,或者考虑到安全方面的原因,人们往往把网络设备的SNMP功能关闭,这样就难于取得设备的MIB值,就出现了拓扑的不完整性,严重影响了网络管理系统的功能。针对这一的问题,下面讨论本文对上述算法的改进-基于ICMP协议的拓扑发现。
3.1 ICMP报文的格式
ICMP被认为是IP层的一个组成部分。它传递差错报文以及其他需要注意的信息。网际协议CIP)没有出错报告或出错校正机制,它依靠网际控制报文协议〔ICMP)模块来报告数据处理过程,井提供管理和状态信息。ICMP报文在传送时被封装在IP数据报中,使用IP协议发送,但ICMP不看作是高层协议的内容。ICMP报文的格式如图1。
图1 ICMP报文的格式
类型区:定义报文类型;
代码区:描述错误类型或状态信息;
校验和区:计算ICMP报文16位校验和;
利用ICMP进行网络拓扑图的发现,需要利用其中的响应请求与应答报文。其报文格式如图2所示,回应请求/应答被用于测试信宿机的可到达性或连通性。请求者(某机器)向特定信宿机发送一个回应请求,其中包含一个任选的数据区;信宿机发回响应的回应应答,其中包含一个请求中的任选数据区的拷贝。图2所示的“标识符”和“序号”用于匹配请求与应答(同一机器可以同时向若干信宿机发出请求)。
图2 回应请求(类型8)/应答(类型0)报文格式
回应请求与应答均以IP数据报的形式在网间传输,假如成功地收到一个应答(应答中的数据拷贝与请求中的任选数据完全一致),不但说明信宿机可以到达,而且说明数据报传输系统的相应部分工作正常,至少信源机和信宿机的ICMP软件和IP软件工作正常,请求与应答经过中间网关也在正常工作。在许多TCP/IP实现中,用户命令Ping便是利用ICMP回应请求/应答报文测试信宿机的可到达性的。
3.2 PING的实现
PING的主要操作是发送报文,并简单地等待回答。PING之所以如此命名,是因为它是一个简单的回显协议,使用ICMP响应请求与响应应答报文。PING主要由系统程序员用于诊断和调试。一般的,PING的功能有:
LOOP BACK PING用于验证TCP/IP软件的操作。
PIN G地址确定能否寻址物理网络设备。
PING远程IP地址验证能否寻址网络。
PING远程主机名验证主机上某个服务器的操作。
实现PING的过程主要是:首先向目的机器发送一个响应请求的ICMP报文,然后等待目的机器的应答,直到超时。如收到应答报文,贝以报告目的机器运行正常,程序退出。
3.3 traceroute的实现
traceroute的实现与IP数据报文的报头有关。IP头的结构如下:
struct ip{
char ip_ verlen; //IP version&header length
char ip_ tos; //type of service
short ip_len; //total packet length(in octets)
short ip_ id;//datagram id
short ip_fragoff //fragment offset
char ip_t1;//time to live, in gateway hops
char ip_proto//IP protocol
short ip_chksum//header checksum
Ipaddr ip_src//IP address of source
Ipaddr ip_dst//IP address of destination
char ip_data//variable length data
}
在IP头的结构中,存在一个ip_ttl域,即生存时间(time to_ live,TTL ). TTL参数用于测量数据报在网际存在多长时间。网络中的每个路由器都检查该域,如果TTL值为0,路由器就抛弃该数据报。路由器还必须对它处理的每个数据报的该域进行减I操作。在实际执行中,TTL域是一个反映跳段的值。所以,当数据报穿过一个IP节点(网关)时,TTL域中的值就减1。
traceroute的功能就是利用IP头中的TTL域。开始时信源设置IP头的TTL值为0,发送报文给信宿,第一个网关收到此报文后,发现TTL值为0,它丢弃此报文,并发送一个类型为超时的ICMP报文给信源。信源接收到此报文后对它进行解析,这样就得到了路由中的第一个网关地址。然后信源发送TTL值为1的报文给信宿,第一个网关把它的TTL值减为0后转发给第二个网关,第二个网关发现报文TTL值为0,丢弃此报文并向信源发送超时ICMP报文。这样就得到了路由中和第二个网关地址。如此循环下去,直到报文正确到达信宿,这样就得到了通往信宿的路由。
3.4网络拓扑的发现算法
具体实现的步骤:
(1)于给定的IP区间,利用PING依次检测每个IP地址,将检测到的IP地址记录到IP地址表中。
(2)对第一步中查到的每个IP地址进行traceroute操作,记录到这些IP地址的路由。并把每条路由中的网关地址也加到IP表中。
(3)对IP地址表中的每个IP地址,通过发送掩码请求报文与接收掩码应答报文,找到这些IP地址的子网掩码。
(4)根据子网掩码,确定对应每个IP地址的子网地址,并确定各个子网的网络类型。把查到的各个子网加入地址表中。
(5)试图得到与IP地址表中每个IP地址对应的域名(Domain Name),如具有相同域名,则说明同一个网络设备具有多个IP地址,即具有多个网络接口。
(6)根据第二步中的路由与第四步中得到的子网,产生连接情况表。
4 结论
本文主要论述了网管系统中一个重要的功能网络拓扑的自动发现。阐述了相关的理论知识,并具体讨论了基于SNMP和基于ICMP的拓扑发现,最后对算法所适用范围加以说明。虽然这种方法能够较好的发现网络拓扑,但是它需要占用大量的带宽资源。
参考文献:
[1]Breibart Y,et al.Topology Discovery in Heterogeneous IP Networks[C].Tel Avivl Israel Proceeding of INFOCOM 2000.
[2]Clarke,Freenet A Distributed Anonymous Information Storage and Retrieval System [C].Workshop on Design Issues in Anonym ity and Unobservability, 2000 25-31.
[3]ICE Reference Manual[EB/OL].http //www.zeroc.com/download/Ice-21.2 pdf.2005.
一、教学目标
1、知识与技能
(1)了解分支程序的结构,流程以及作用。
(2)知道条件语句的作用,初步掌握分支语句的格式。(3)理解程序的分支结构。
2、过程与方法
(1)通过简单程序的运行和流程思考,培养学生的思考逻辑分析能力。
(2)通过运行程序、分析程序、体验程序提高学生自主学习的能力。
3、情感态度价值观
通过体验程序,分析程序和修改程序,培养学生的合作精神和探究创新精神。
二、教学重难点
重点:分支语句的流程图,分支语句的执行过程以及条件语句的格式。
难点:分支语句的应用以及分支语句的格式。
三、教学过程
(一)引入
现实生活中,很多事件并非都是按自上而下的顺序进行的,常常要根据一定的条件进行判断并做出决策,比如“成绩评价”是依据一 定的分数做出判断并评定为“合格”或“不合格”。(分支结构——if语句)
(二)If语句格式 If语句格式
格式 一:If <条件> Then <语句> 格式二:If <条件> Then <语句1> Else <语句2>
(三)显示例题分析逐行显示 例:成绩评价程序设计。算法:
1、输入成绩;
2、把成绩转化为数值赋给a;
3、如果a>=60成立则结果显示“合格”,否则显示“不合格”
4、结束语句。根据算法写法程序: A=val(text1.text)If a>=60 then Label2.caption=”合格” Else Label2.caption=”不合格” End if 关系表达式
关系表达式就是用关系运算符将两个算术表达式(或字符串表达 式)连接起来的式子。
格式如下:
<算术表达式> <关系运算符> <算术表达式>或 <字符串表达式> <关系运算符> <字符串表达式> 关系运算符:
=(等于)>(大于)<(小于)<>(不等于)>=(大于等于)<=(小于等于)关系表达式运算顺序:先进行算术运算,再进行关系运算 关系表达式的值为逻辑值:“真”或“假”,条件成立,关系表达式的值为“真”,条件不成立,关系表达式为“假”。
例如:
x*y>x+y,(x=3,y=-2)②x<=5(x=2),条件成立,取“真”值。
(四)小结:
四、教学反思
湖北省巴东县第一高级中学 刘少银
一、教材学情分析
本次课是浙江版高中信息技术选修教材《算法与程序设计》第二章算法实例第四节查找中的一部分内容。由于教材体系不适合校本实际,我们在教学过程中对教材体系作了如下调整。
讲授顺序:第一章 算法和算法的表示、第三章 面向对象的程序设计的基本知识、第四章 VB程序设计初步、第二章算法实例,第五章 算法实例的程序实现穿插在相关内容教学中完成。
因此在前期教学中学生已经初步掌握了算法基础及算法表示,VB程序设计初步等。本次课是让学生掌握对分查找的思想及算法的实现。
二、教学目标
知识与技能:理解对分查找的基本含义、方法,理解并能画出对分查找的流程图;
过程与方法:通过案例分析、直观观察,增强分析问题和解决问题的能力;
情感、态度与价值观:感受信息技术与现实生活的关联,激发对信息技术学科的求知欲,培养主动学习和使用信息技术的意识;养成科学的学习态度,不迷信书本、不迷信权威。
三、教学重难点
教学重点:对分查找的基本方法及注意事项;
教学难点:对分查找算法的实现。
四、教学策略
·以“猜数”游戏导入,引入对分查找的概念;
·师生讨论、生生讨论、生生互助;分析、归纳、总结,理解并掌握对分查找的基本思想;
·采用分类研究、分享成果、课后练习等学习方法,理解对分查找方法及基本主要特征;
·采用自然评价、师生评价、生生评价等形式对学习进行过程性评价。
五、教学过程
1.游戏激趣,释疑对分查找
(三个程序图片)
(初始界面)(人工猜数界面)(程序猜数界面)
准备:几张白纸,一支记号笔。启动猜数程序。
师:同学们好!大家看到前面的程序了吗?它是一个什么程序呢?
同学:猜数游戏程序。
师:对,这是我用VB针对李泳主持的“幸运52”中猜商品价格环节开发的一款程序,我先来说说针对主持人的部分:当李泳宣布商品的价格范围时,比如10000元内,猜商品价格的人就可以在猜数范围栏起始栏填上“0”,终至栏填“10000”,然后再将鼠标移到猜数栏中单击,程序即提示:“准备!倒计时30秒”,当单击提示处,猜价格倒计时开始,猜价格人即可在猜数栏上填上所猜价格的数值,然后根据主持人的提示,选择“不对”重新填写商品价格或选择“正确”让所猜价格在“猜得结果”栏内显示正确结果并停止计时,提示栏中即显示“您猜了M次,对了,恭喜您”。
师:大家觉得程序光有这样的功能神奇吗?
生:不神奇。
师:对,我也是这样认为的。这个程序神奇的地方在它能帮助猜商品价格人在规定的时间内,根据主持人的提示准确地猜出商品的价格,而且猜中率100%,所以现在“幸运52”停播了,大家知道为什么吗?
生:不知道。
师:就是因为我开发了这个程序呀!
生:(有的说信,有的抱着怀疑的态度不吭声,也有说不信的)
师:有同学愿意上来试试吗?
师:你在纸上写下你的数值范围和要猜的数,然后给大家看一下,别说出来,别让电脑听见了。
师:好,操作程序让程序帮忙把写的数找出来。
(程序找到正确的数)
师:神奇吧。
师:还有那位同学愿意试一下。
师:同样,你还是先写下要猜的数和范围100~200,这次我们不让大家看到他要猜的数,请大家帮忙记下程序每次出现的数字。
师:电脑程序也猜出了正确结果:132。
程序给出的数字是:
第一个数是:150
第二个数是:12
5第三个数是:137
第四个数是:1
31第五个数是:13
4最后是:13
2大家能看出什么规律了吗?
生:看不出
师:单纯从这几个数当中是看不出什么规律,现在我们依次把这些数放到数轴上,再看一下,大家看能找出什么规律呢?
同学发言„„
师:大家认为他说的怎样?为什么不鼓掌呀!
师:对,正如刚才的同学说的那样,程序是在给定范围内依次找中点方法来找到我们要找的最终数值,这就是我们今天要讨论的一种新的查找方法:对分查找。
师:我们刚才的游戏中的数列是序的吗?
生:是有序的,升序排列的。
师:如果是降序能用对分查找方式查找吗?
生:能。
师:大家想一想,如果我们打乱数据的排序顺序,在没有排序的数列中能否用对分查找的方法,找到我们想找到的数据?
同学:不能。
师:对,这就是对分查找方法的一个特征,或称为条件。因为我们是根据数据的大小找到它在数列中的位置。
【设计意图】通过游戏和对程序给出数值在数轴上的分布分析,让学生初步理解和掌握对分查找的方法及前提条件,为后一阶段对分查找算法的实现作好铺垫。
2.分析实例,实现对分查找算法
师:下面我们一起来看一下程序是怎样一步一步的给出以上数据并最终找到“132”这个数的。
师:首先在100至200之间找中点,然后再用中点值150与所要找的数132比较,得出的结论是所要找的数在100至150之间的数,一下数值的范围就缩小了一半,终止变量j的值就由200变成了150;第二次查找时,程序就给出100至150的中点值125;当程序进行第三次查找时,起始变量i的值就被修改为125,它们的中点值应该是:(125+150)/2=137.5。有小数了,怎么办?
生:„„(有点茫然)
师:对于小数,程序可以继续查找,但有可能要增加查找次数。为了保证在整数范围内查找,我们就要对含小数的中间值进行处理:取整。大家还记得我们学过VB的取整函数吗?
生:int。
师:对。即int(137.5),结果是多少?
生:137。
师:所以我们查找i到j范围内的中点值的表达式应该为:m=int((i+j)/2)。
师:依次类推,程序会依次给出131、134、132即找到了要找的数。
师:请同学们根据算法逐步求精的原则在下面画出流程图。
(展示如下流程图,然后请同学完成完善对分查找的算法流程图)
流程图补充完善后的结果:
【设计意图】通过对程序给出中间数的分析,帮助学生理解对分查找算法实现的方法,为学生顺利完成对分查找算法流程图给予理论与实践上的支持。
3.推出特例,完善对分查找算法
师:同学们,刚才我们完成的对分查找的流程图;下面请同学们用刚才的查找方法分析一下在199至200范围内要找200这个数,能找到吗?为什么?如何解决这个问题?
(将教室内学生按座位分成若干组,进行讨论。每个组推选一名小 组长,完成后作小组发言)
„„
(每一小组完成发言后,老师或点评,或让学生点评)
师:根据刚才同学的讨论分析,那我们先前给出的流程图就有了一些缺陷,怎么修改?
(在同学们的发言声中,修改完善流程图)
修改后的流程图如下:
【设计意图】给出特例,让学生相互讨论、互助学习,归纳总结出上述流程图中出现问题的症结所在,并给出正确的流程图;由此可让学生体验到科学探究的方法,从而培养学生的科学态度与探索精神。
六、课后作业
师:1.在前面的取整中我们用了取整函数int,大家想一想能不能用四舍五入函数处理?如果用四舍五入函数(round)处理,流程图又将怎样修改?
2.请看教材P40-43,比较我们所给出的流程图与教材上的流程图有什么差异?两个流程图最后结果是否一致,那个流程图的结果有问题,问题是怎么造成的?请写出一篇500—800字的小论文。
(提示:认真阅读教材P40至P43内容,并分析教材中所给算法的逻辑错误)
作业提交方式:电子邮件(校内、校外均可)
邮件名称:登分号+姓名+论文题目
作业提交地址:bdxyz@qq.com
【设计意图】作业(1)扩充课堂内容,丰富学生知识面,丰富学生分别学习内容;作业(2)通过两个流程图之间差异性比较,引导学生判别书本上所给出流程图的逻辑错误,从而培养学生:1.科学的学习态度和精神,不迷信教材、不迷信权威;2.运用论文等形式来表达自己观点;3.通过学生自己的分析、探索,找出教材中的错误。
七、教学反思
1.需求分析.........................................错误!未定义书签。2.概要设计.........................................错误!未定义书签。3.详细设计.........................................错误!未定义书签。4.测试分析.........................................错误!未定义书签。课程设计总结.......................................错误!未定义书签。参考文献...........................................错误!未定义书签。
1.需求分析
根据课程之间的依赖关系制定课程安排计划,输入课程数及课程之间的关系。需要利用代码实现排序,以及对各个学期课程安排进行排序并输出。
1.1问题描述
大学的每个专业都要制定教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限值均相等,每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。
1.2设计思路
首先利用拓扑排序对课程先后顺序进行分析,邻接表位主要存储结构,栈为主要辅助结构,给出课程之间的先后关系比如AOV网,然后进行拓扑排序,但当又向图中存在环时,无法查找该图的一个拓扑排序,当图中的所有顶点全部输出,表示对该图排序成功,实现拓扑排序算法时,相应的建立邻接表存储AOV网,为了避免重复检测入度为零的顶点,建立一个栈来对入度为零的顶点进行存放。根据课程的先后关系,对个学期的课程进行排序,输出。
1.3设计环境、原理
设计环境和器材: 硬件:计算机;软件:Microsoft Visula C++。
设计原理说明:运用图的拓扑排序对课程先修排列的实现,并调用递归完成拓扑排序。
1.4实验目的
培养学生用学到的书本知识解决实际问题的能力;培养实际工作所需要的动手能力;培养学生以科学理论和工程上能力的技术,规范地开发大型、复杂、高质量的应用软件和系统软件具有关键性作用。通过课程设计的实践,学生可以在程序设计方法、上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
1.5实验内容
针对计算机系本科课程,根据课程之间的依赖关系(如离散数学应在数据结构之前开设)制定课程安排计划,并满足各学期课程数目大致相同。
2.概要设计:
2.1流程图
void FindInDegree(ALGraph G, int indegree[])//求图中各节点的入度(如下左图)void CreatGraph(ALGraph *G)//构件图(如下右图)。
void TopologicalSort_1(ALGraph G,int numterm,int uplcredit)//有向图G采用邻接表存储结构(如下左图);
void TopologicalSort_2(ALGraph G,int numterm,int uplcredit)//有向图G采用邻接表存储结构(如下右图)。
主函数: void main()
2.2抽象数据类型图的定义 ADT Graph{
数据对象V:V是具有相同特性的数据元素的集合,称为顶点集.数据关系R: R={VR} VR={(v,w)|v,w∈V,(v,w)表示v和w之间存在直接先修关系} 基本操作P: void CreatGraph(ALGraph *);void FindInDegree(ALGraph , int *);void TopologicalSort_1(ALGraph G,int numterm,int maxcredit);void TopologicalSort_2(ALGraph G,int numterm,int maxcredit);}ADT Graph 栈的定义: ADT Stack{ 数据对象:D={ai|ai∈ElemSet,i=1,2,…n,n>=0} 数据关系:R1={﹤ai-1 ai﹥|ai-1,ai∈D,i=2,…,n} 基本操作: void InitStack(SqStack *S);int StackEmpty(SqStack S);void Push(SqStack *S, int);int Pop(SqStack *S, int *e);}ADT Stack 2.3主程序
int main()//主函数 {
int numterm;//学期总数
int uplcredit;//一个学期的学分上限
int selectway;
ALGraph G;
printf(“请输入学期总数:n”);
scanf(“%d”,&numterm);
printf(“请输入一个学期的学分上限:n”);
scanf(“%d”,&uplcredit);
CreatGraph(&G);
printf(“请选择编排策略:1.课程尽可能集中到前几个学期;2.课程尽量均匀分布n”);
scanf(“%d”,&selectway);
if(selectway==1)
TopologicalSort_1(G,numterm,uplcredit);
if(selectway==2)
TopologicalSort_2(G,numterm,uplcredit);
system(“pause”);
return 0;} 2.4本程序只有两个模块,调用关系简单
主程序模块→拓扑排序模块
3.详细设计
3.1头结点、表结点、邻接表的定义
#define MAX_VERTEX_NUM 100 //最大课程总数 typedef struct ArcNode{ int adjvex;struct ArcNode *nextarc;}ArcNode;typedef struct VNode{ char name[24];
//课程名 int classid;
//课程号
int credit;
//课程的学分 int indegree;
//该结点的入度 int state;
//该节点的状态 ArcNode *firstarc;//指向第一条依附该顶点的弧的指针 }VNode,AdjList[MAX_VEXTEX_NUM];typedef struct{ AdjList vertices;int vexnum, arcnum;}ALGraph;邻接表的基本操作:
void CreatGraph(ALGraph *);创建邻接表
void FindInDegree(ALGraph , int *);求一个结点的入度
void TopologicalSort_1(ALGraph G,int numterm,int maxcredit);拓扑排序来编排课程
void TopologicalSort_2(ALGraph G,int numterm,int maxcredit);拓扑排序来编排课程
3.2栈的定义
#define STACk_INIT_SIZE 100 //存储空间的初时分配量 #define STACKINCREMENT 10
//存储空间的分配增量
typedef int ElemType;typedef struct { AdjList vertices;int vexnum, arcnum;}ALGraph;基本操作:
void InitStack(SqStack *S);栈的初始化
int StackEmpty(SqStack S);判断栈是否为空
void Push(SqStack *S, int);入栈操作
int Pop(SqStack *S, int *e);出栈操作
3.3主程序和其他算法:
#include // exit()#include typedef int Boolean;// Boolean是布尔类型,其值是TRUE或FALSE #define MAX_NAME 10 /* 顶点字符串的最大长度 */ #define MAXCLASS 100 int Z=0;int X=0;int xqzs,q=1,xfsx;typedef int InfoType;typedef char VertexType[MAX_NAME];/* 字符串类型 */ /* 图的邻接表存储表示 */ #define MAX_VERTEX_NUM 100 typedef enum{DG}GraphKind;/* {有向图,有向网,无向图,无向网} */ typedef struct ArcNode { int adjvex;/* 该弧所指向的顶点的位置 */ struct ArcNode *nextarc;/* 指向下一条弧的指针 */ InfoType *info;/* 网的权值指针)*/ } ArcNode;/* 表结点 */ typedef struct { VertexType data;/* 顶点信息 */ ArcNode *firstarc;/* 第一个表结点的地址,指向第一条依附该顶点的弧的指针 */ } VNode,AdjList[MAX_VERTEX_NUM];/* 头结点 */ typedef struct { AdjList vertices,verticestwo;int vexnum,arcnum;/* 图的当前顶点数和弧数 */ int kind;/* 图的种类标志 */ }ALGraph;/* 图的邻接表存储的基本操作 */ int LocateVex(ALGraph G,VertexType u){ /* 初始条件: 图G存在,u和G中顶点有相同特征 */ /* 操作结果: 若G中存在顶点u,则返回该顶点在图中位置;否则返回-1 */ int i;for(i=0;i void FindInDegree(ALGraph G,int indegree[]){ /* 求顶点的入度,算法调用 */ int i;ArcNode *p;for(i=0;i (SElemType));if(!(*S).base)exit(OVERFLOW);/* 存储分配失败 */(*S).top=(*S).base+(*S).stacksize;(*S).stacksize+=STACKINCREMENT;} *((*S).top)++=e;return OK;} typedef int pathone[MAXCLASS];typedef int pathtwo[MAXCLASS];Status TopologicalSort(ALGraph G){ /* 有向图G采用邻接表存储结构。若G无回路,则输出G的顶点的一个拓扑序列并返回OK, */ /* 否则返回ERROR。*/ int i,k,j=0,count,indegree[MAX_VERTEX_NUM];SqStack S;pathone a;pathtwo b;ArcNode *p;FindInDegree(G,indegree);/* 对各顶点求入度indegree[0..vernum-1] */ InitStack(&S);/* 初始化栈 */ for(i=0;i while(q<=xqzs){ int C=0;if(X<=G.arcnum){ while(C<=xfsx){C+=*G.verticestwo[Z].data;++Z;} printf(“第%d个学期应学课程:”,q);while(X<=Z){cout<<*G.vertices[X].data<<“ ”;++X;} cout< 4.用户使用和说明 使用VC++,打开sjjg.cpp文件,接着编译,无错误,然后重建也没有错误,最后执行该文件。显示如下图: 要求输入学期总数、一个学期的学分上限、需要编排课程总数、课程名、课程号、该课程的学分,按照出现的每一步来输入该课程设计所提供的相关数据。然后还要输入课程先修课程总数,依据教科书图7.26,可以算出有16种关系,分别输出如下图所示。接着程序会根据这些数据,自动生成建立好的邻接表,用户可以根据系统显示的选择编排策略进行选择,有两种编排策略,最后结果体现在实验的正确测试结果里(如上图)。 5.调试分析 5.1实验过程中出现的问题及解决方法 我们在实验过程中遇到的最大难题是两个课程排序算法的编写。刚开始的时候没有任何的思路,网上也只有拓扑排序的算法,对于课程设计要求的排序算法没有任何头绪。经过请教老师和同学以及翻阅了一些相关书籍,并在网上的搜索有了排序算法的大体思路。经过三天的修改,终于写出了符合要求的排序算法。 5.2测试数据 学期总数:6;学分上限:10;该专业共开设12门课,课程号从01到12,学分顺序为2,3,4,3,2,3,4,4,7,5,2,3。 5.3测试结果(包含正确和错误的) 正确测试结果: 错误测试结果: 5.4测试数据及程序运行情况 输入的内容如下: 课程编号 课程名称 学分 先决条件 01 程序设计基础 无 02 离散数学 01 03 数据结构 01,02 04 汇编语言 01 05 语言的设计和分析 03,04 06 计算机原理 07 编译原理 05,03 08 操作系统 03,06 09 高等数学 无 10 线性代数 09 11 普通物理 09 12 数值分析 09,10,01 两种编排方法都输出结果为: 第一学期学的课程有:高等数学程序设计基础; 第二学期学的课程有:普通物理 线性代数 汇编语言; 第三学期学的课程有:数值分析 计算机原理 离散数学; 第四学期学的课程有:数据结构; 第五学期学的课程有:操作系统 语言的设计和分析; 第六学期学的课程有:编译原理。 6.总结 刚开始学的时候确实有很多地方我很不理解,每次上课时老师都会给我们出不同的设计题目,对于我们一个初学者来说,无疑是一个具大的挑战,撞了几次壁之后,我决定静下心来,仔细去写程序。老师会给我们需要编程的内容一些讲解,顺着老师的思路,来完成自己的设计,我们可以开始运行自己的程序,可是好多处的错误让人看的可怕,还看不出到底是哪里出现了错误,但是程序还是得继续下去,我多次请教了老师和同学,逐渐能自己找出错误,并加以改正。经过了这次课程设计,现在已经可以了解很多错误在英文里的提示,这对我来说是一个突破性的进步,眼看着一个个错误通过自己的努力在我眼前消失,觉得很是开心。此次的程序设计能够成功,是我和我的同学三个人共同努力作用的结果。在这一段努力学习的过程中,我们的编程设计有了明显的提高。 其实现在想起来,收获还真是不少,虽然说以前非常不懂这门语言,在它上面花费了好多心血,觉得它很难,是需用花费了大量的时间编写出来的。现在真正的明白了一些代码的应用,每个程序都有一些共同点,通用的结构,相似的格式。同时也对教学编制问题有了进一步的认识。只要努力去学习,就会灵活的去应用它。 7.参考文献 空间谱估计是近2 0年得到长足发展的一种阵列信号处理方法,主要用于研究处理带宽内空间信号到达方向(D O A)问题,M U S I C算法作为D O A估计的重要算法之一,一直是研究的热点。在实际工程利用硬件实现M U S I C也成为广泛关注的热点。 为了降低运算复杂度,减少运算量,将M U S I C算法分解成三个主要步骤,并且在每部分分解内利用算式的内部规律做合理地简化。这里提出提出一种采用计算机仿真信号源数据,利用TI公司的浮点处理芯片MS320C6713构成松耦合式4片DSP并行处理结构来实现硬件系统的核心部分(MUSIC算法处理部分)的方法,大大地提高了运算速度。另外对算法内部主要任务模块进行合理改良过的并行任务分配,加大了系统的加速比。 2 基本MUSIC算法[1] 理想情况下,基本MUSIC算法[1]如下:考虑一元均匀线阵,设有p(p 式中,X(k)=[x1(k),x2(k),…,xM(k)]T是M个阵元的输出,A=[a(θ1),a(θ2),…a(θp)],a(θi)=[1,e-jωi,…,e-j(M-1)ωi]是矩阵的操纵矢量,ωi=2πd/λsin(θi),λ是载波波长,d是阵元的数目。S(k)=[s1(k),s2(k),…,sp(k)]T是传入的信号函数,N(k)=[n1(k),n2(k),…,np(k)]T是加性噪声信号,其中ni(k)(i=1,2,…,p)是均值为零,方差是δ2的白噪声,并且噪声与信号互不相关。 X(k)的协方差矩阵R为: 在上式中,P=E[S(k)SH(k)]为信号的协方差矩阵,δ2IM=E[N(k)NH(k)]是加性噪声的协方差矩阵,其特征分解为: 在上式中,US=[u1,u2,…,up]是大特征值对应的特征向量构成的向量块,这部分特征向量张成的是信号子空间,UN=[Up+1,up+2,…,uM]是小特征值对应的特征向量构成的向量块,这部分特征向量张成噪声子空间,也就是谱峰搜索空间。ΣS是由p个大特征值构成的对角阵,δ2是R的M-p个重复的小特征值。 在谱峰搜索空间中利用谱估计M U S I C算法的空间谱估计公式搜索谱峰,谱峰对应的角度θ就是所要测定的来波方向。MUSIC算法的空间谱估计公式[2]: 3 MUSIC算法的简化 MUSIC算法的运算量大是因为相关矩阵R的计算、对相关矩阵R进行特征值分解和利用谱估计方式搜索谱峰三部分的运算量很大,为了简化运算,减小运算量,以下提出了几点分解M U S I C算法的简化方法: 1、协方差矩阵R是Hermite矩阵,即R=RH,根据Hermite矩阵特性可知R是一个对称阵[3],所以只要计算R主对角线以上(包含对角线)的元素就可以了,主对角线以下的元素可以通过对称映射得到,这样运算量已经减低了近一半。 输入信号的相关矩阵R,R=1/KΣX(k)XH(k),但是在实际情况下是无法实现的。因为在实际的处理系统中采样时间有限,并且随着信号采样时间的延长,过旧的数据通常不能真实反映当前信号的状态。根据误差跟踪原理引入迭代因子α,并在每次迭代中通过指数平均的方法进行相关矩阵R的估计[2],具体迭代公式为: 其中迭代因子α的选取根据跟踪误差来获得,而误差定义为e=X(n+1)XH(n+1)-X(n)XH(n)。 2、一次复数加运算相当于两次实数加运算,一次复数乘运算相当于四次实数乘运算,而在M U S I C算法的硬件实现中要解决的是复矩阵,因此需要将对复Hermite矩阵求特征值和特征向量的问题转化为求解实对称阵的特征值和特征向量,而实对称阵的求解采用三对角Householder法,这样就大大降低了运算的复杂度和运算量。 利用相关矩阵R的Hermit特性[3],可将n阶复Hermite矩阵R表示成实数矩阵和虚数矩阵两个部分: 根据特征向量的定义可以得到等式: 这样就将求复Hermite阵的特征值和特征向量问题转化成求实数矩阵的特征值和特征向量的问题。再将实对称阵转化成为对称三角阵,也就是使C经过n-2次正交变换成为三对角阵AC,求解AC的特征值和特征向量,最终求解得到R的特征值和特征向量[5]。 3、由于采用的是均匀分布的均匀圆阵,其导向矢量a(θ)是有运算规律的,利用该规律可以使计算得到简化。空间谱搜索范围[0,2π]内,对于任意阵元数目的均匀圆阵,其方向矢量为: 由正弦运算sin(θ)的特性可知a(θ)在[0,π]和[π,2π]两个区间内的取值互为共轭,PMUSIC(θ)的搜索空间就压缩到[0,π]这个区间内,其它搜索范围内的结果可以通过相应的映射关系得到,这样就大大的降低了搜索工作的计算量。 4 MUSIC算法的硬件系统 4.1 硬件选择方案 主流的数字信号处理硬件分为DSP、FPGA和ASIC三种,它们有各自的特点和适用领域。DSP类似于微处理器M P U,它采用哈佛结构,程序和数据分开存储,能保证数字信号的处理速度;F P G A称为现场可编程门阵列,可将其看作是一个由若干与非门所构成的阵列,各与非门之间通过一定的方式相连接,实现特定功能;ASIC称为专用集成电路,是为实现某种特定算法而定制的集成电路芯片。针对M U S I C算法的实现而言,ASIC硬件结构固定,不具备通用性,灵活性差,成本较高,实现复杂,对技术人员的要求也很高,不适合;DSP和FPGA是比较适合,但是FPGA不能实现对浮点数的处理,且由于它对数字处理的动态范围较窄,对复杂的不规则计算开发起来比较有难度。中上所述选用D S P采用第三种并行结构[6]实现MUSIC算法最为合适。 多D S P并行处理系统的基本性能取决于组成系统的三个要素:并行处理系统结构、并行算法程序和任务分配方法以及处理单元(DSP芯片)三者之间紧密联系、互相依赖,任务分配和并行算法的好坏直接影响并行处理系统的性能。 4.1.1 并行处理系统结构 实际中实现和应用MUSIC算法遇到的最大问题是由于MUSIC算法内部大量的不规则运算使得其实时性差。为了提高硬件系统的运算速度,往往采用并行结构[4,5]。第一种并行结构是每片处理器都运行同样的处理程序,而把待处理的数据分批分别送给这些处理器进行处理。这种方法可以获得较高的数据处理速率,但对具体的某批数据的处理延迟不会缩短。第二种并行结构把算法内部的各计算模块分别分配给各处理器,让数据依次流过这些处理器,进行一种流水线式的处理。但是各个模块的任务分配不均衡,各处理器的负载不平衡将导致极低的系统加速,而且它也无法缩短数据的处理延迟(指一批数据输入后,获得该批数据的处理结果所要等待的时间),所以这种方法的并行效率将很低。第三种并行结构是将任务量较小的运算模块使用第一种并行结构实现,任务量最重的矩阵特征值分解这个模块采用一种新的并行方法。这种并行方法[6]结合了串行的Jacobi算法和David J.Kuck和Ahmed Sameh提出的并行算法,有效地缩短数据处理的延迟时间,实现了新的高效率并行算法,具有实用价值。 4.1.2 任务分配 这里用4片D S P并行实现对8元圆阵进行测向的M U S I C算法。算法内部估计协方差矩阵运行时间占总时间21%,只需要计算出36个上三角阵的元素,内部都是规则运算,只需要将3 6次计算平均非配给4个处理器,每个处理器将计算9个元素;协方差矩阵特征值分解并提取特征值的运行时间占总时间的60%,是整个算法内部运算量最大,且计算最不规则的模块,这里就要采用结合流水串行特点的并行结构;对求得的特征值排序并根据对应的特征向量生成搜索空间的运算时间占总时间的1%;空间谱搜索运行时间占总时间的1 8%这两部分运算量较小的部分只需要对其进行简化或者预处理然后平均分配到4个处理器上即可。 4.1.3 芯片选择 根据M U I S I C算法运算要求和硬件结构的设计目标,选择D S P芯片的侧重点主要参数包括以下几个方面:运算速度(浮点运算速度和指令周期长度)、运算精度(3 2位浮点)、字长、存储器等片内硬件资源安排、开发调试工具,功耗与电源管理和成本问题。 TMS320C6000系列是1997年美国TI公司推出的面向高性能,多功能,复杂应用领域而开发的DSP芯片,这种芯片是定点、浮点兼容的DSPs系列。其中定点系列是TMS320C62xx,浮点系列是TMS320C67xx,C67XX是32位浮点DSP芯片,且速度很高。TMS320C6713每周期可以执行8条32位指令;支持32/64位数据;具有最高225MHz的运行速度和1800MIPs(百万次定点运算每秒)或者1350 MIPs(百万次浮点运算每秒)的处理能力;E M I P(外部存储器接口)可以很方便地与SDRAM、SBSRAM、Flash存储器、SRAM等同步和异步存储器相连,16位EHPI接口可以与与各种处理器接口。TMS320C6713的以上性能技术指标达到MUSIC算法的高速浮点运算要求以及精度要求。 4.2 硬件系统的设计方案 实现M U S I C算法主要是对空间来波信号进行测向,也就是DOA估计。硬件系统主要包括计算机和测向处理器组成,其中计算机用于模拟产生信源信号和噪声信号,这项任务主要是利用M A T L A B完成,产生出的信号通过I/O口传送给测向处理器,由测向处理器完成对信号的D O A估计,运算出的结果通过R S 2 3 2串口返回给计算机显示结果,完成实验,实现M U S I C算法,硬件系统整体组成框图见图1。 M U S I C算法测向处理器是整个硬件系统的核心模块,它是由4片TMS320C6713芯片组成并行结构实现。根据测向处理器中各部分完成的功能得到其并行处理模块框图,见图2。 MUSIC算法的硬件系统并行处理机网络[7]即多DSP间连接通道的主要功能是为各处理单元提供数据交换的通路,并负责子任务传送和控制调度信号的传递。 组成整个硬件系统的各个功能模块的设计各个D S P功能如下: 在本文中的DSP并行处理系统中,各DSP在多通道模式下以主从方式工作,即所有通信进程都由主D S P 1控制,三片从DSP(DSP2—DSP4)以TDM方式挂接在总线上,各自有唯一的通道号(IDx),接受主DSP的控制。主D S P 1可任意选择某一指定通道建立双向数据通信,同时向各从DSP发送数据。主D S P不仅自身通过并行总线从FLASH加载程序,还要在自身程序加载完之后,再通过链路口从F L A S H为三片从D S P加载程序,加载完程序后,程序进入等待状态等候中断的到来,中断触发主程序的运行。 准备工作完成后,主D S P通过并行总线读入要处理的数据,将数据平均分配给四片D S P计算协方差矩阵上三角阵中36个元素,每片D S P计算9个元素。主D S P产生低脉冲信号,使三片从D S P进入中断服务程序,接收主D S P发送的数据,并分别进行处理。将所有值返回给主D S P得到协方差矩阵的上三角阵部分,然后通过出对角线元素的对称映射的到整体的协方差矩阵,并此刻的得到的矩阵通过遗忘因子结合得到最终的协方差矩阵[7]。 Jacobi方法实现对协方差矩阵的特征值分解[8]时,流水串行算法针对不满足要求的元素进行变换,即矩阵A中的元素Ak+1=TkAkTkT零化的元素只要低于特定值即停止变换[8]。 因为相比之下对特征值排序并根据小特征值对应的特征向量得出搜索空间的运算量较小,所以选用主DSP完成这项工作,来减少在通信和等待上的时间延迟,加快总体加速比。 不同角度的PMUSIC(θ)之间在计算时没有相互引用结果现象的存在,因此PMUSIC(θ)的计算可以十分简单地按角度平均分配给各处理器,即 180°—360°区间内PMUSIC(θ)的值在四片在DSP中通过映射相应计算完成,做到了各处理器负载平衡。最终值都送入主DSP中进行大小比较,根据信源数目估计D值取得D个最大值和它对应的角度,最后由主D S P将测得结果出入计算机,完成测向工作。 5 结束语 随着DSP芯片应用技术的发展,它已渗透到了各个领域。在信号达波估计的M U S I C处理中,得到了很好的应用效果,充分体现了DSP芯片在信号和数据处理上处理速度快、应用灵活方便、体积小等方面的优点。可以预见,随着高速DSP芯片的不断推出,它们在信号及数据处理方面有着广泛的应用前景。 本文描述了基于多D S P并行处理系统实现阵列测向的M U S I C算法的硬件系统设计,并且从实现算法所需要的各项参数的角度选择采用4片TMS320C6713来构成DSP处理模块,采用改良的任务分配方法提高系统的处理速度和精度。该系统具有很强的实时性,执行效率高,该系统具有灵活性高,可靠性强等特点,较好地完成了设计任务,达到了测向的目的。 参考文献 [1]张贤达.现代信号处理[M].北京:清华大学出版社,2002. [2]刘德树,罗景青,张剑云.空间谱估计及其应用[M].合肥:中国科学技术大学出版社,1997年. [3]李小波,薛王伟,孙志勇.一种求解如Hernite矩阵特征值的方法[J].数据采集与处理.2005,20(4):403-406. [4]郭元曦,桑恩方,王继胜.MUSIC算法在分布式并行处理机上的实现研究[J].电子技术应用.2007,02(1):112-114. [5]高勇,刘皓,肖先赐.MUSIC算法在高速DSP上的并行实现[J].通信学报,2000,21(4):84-88 [6]李军.极大似然和MUSIC算法用于DOA估计的DSP实现[D].成都:电子科技大学,2005. [7]刘皓,魏平,肖先赐.特定并行处理机上MUSIC算法的并行实现[J].成都:系统工程与电子技术.2001.23(1):86-88 关键词:非计算机专业;数据结构;Flash动画 中国分类号:G218.7 0引言 由于专业需求,一些理工类非计算机专业也相继开设数据结构课程,在我国,数据结构已成为理工科非计算机专业必修的信息技术基础课程之一[1],学习数据结构是要让学生掌握数据在计算机中的表示、组织和相应结构上的算法设计,以便学生在软件开发的过程中能选择适当的逻辑结构、存储结构,高效的设计算法,并初步掌握算法的时间和空间分析技术[2]。 然而由于课程内容繁多、理论抽象、逻辑性强、难以理解,很多算法没有源程序实现,因此,存在学生上课听不懂、上机实践动手能力差、课程难教难学的现象。本文从非计算机专业的视角切入,探讨数据结构教学的一些实践策略以及创新思维,为非计算机专业的数据结构教学提供一些有参考价值的建议。 1非计算机专业学生学习数据结构的现状 1.1学生学习基础薄弱,知识衔接不畅 程序设计基础是数据结构的先导课程之一,非计算机专业的学生一般在学习本课程之前,已经学习过C语言程序设计知识,学生对此课程的掌握程度直接关系到数据结构课程的教学效果。 1.2课时不足 数据结构通常只作为非计算机专业学生的选修课,一般只设置18个学时,因此无论是理论授课还是实验课时都相对不足。 1.3教学内容理论性较强,实用性难以充分体现 数据结构对于习惯了学习“所见即所得”的计算机知识(如Flash制作、网页设计等)的非计算机专业学生来说,还是比较困难的。一来教材虽然是C语言版的,但其实是往往觉得难以理解,二来有些教材中使用的类C语言又不能够直接上机使用,而且即便是写出相应的C程序,其运行结果也没有生动的界面来得好看和直接,学生对课程的实用性,心存疑惑。 2引入算法动画,改善课堂教学效果 2.1利用Flash软件,制作算法动画 数据结构课程内容多,大部分都很抽象,用传统的方法来讲解该课程非常枯燥,为了改善这种状况,可以借助现代教学手段,除了把教学内容做成多媒体课件外,还可以把适合动画演示的内容,通过Flash技术直观地展示出来。 HANOI问题是程序设计中的经典递归问题,掌握算法的执行过程,对深入理解和灵活运用递归有重要意义。该算法用高级语言描述只有几行语句,但由于递归算法中有两次递归调用,程序执行过程复杂。在实际教学中,为了把这个过程讲明白,可以利用Flash设计一个动画,形象地描述运作过程和堆栈的变化状态,从而帮助学生理解递归调用及递归过程,加深其对知识的理解。类似的问题还有很多,如串的模式匹配、二叉树的遍历、图的遍历等都可以借助动画演示来加深理解,改善教学效果。 2.2把握课程主线,紧扣知识要点 数据结构课程内容比较繁杂,但总体来说主要介绍线性结构和非线性结构这两大基本结构类型[3],线性结构部分包括线性表、栈和队列、串、数组和广义表,非线性结构包括树和图。 在线性结构中,线性表是最基本、最简单的一种结构,属于课程最基础的内容,如果学生掌握了它的存储结构及其基本操作,其他线性结构的教学就会相对容易。因此,在教学过程中加重对线性表部分的讲解十分重要,而利用算法的动画讲解又起到了事半功倍的效果。 非線性结构的典型代表是树和图,主要涉及存储结构、基本操作及其在实际中的应用,在这些存储结构下,树和图的各种操作几乎都是以遍历为基础的,因此以结构的遍历为主线进行展开是合适的。例如,二叉树是树这一部分的重点,因为树和森林的各种操作可以转换为二叉树来实现,而二叉树的各种操作都是以遍历为前提的。因此,掌握了二叉树的遍历,也就掌握了树及森林的遍历,从而达到快速掌握其他操作的目的。 另外,随着数字化校园网络的建设,利用网络教学平台辅助教学对改善教学效果十分有益。借助网络教学平台的发布和交流功能,可以把电子教案、多媒体课件、参考资料、课后习题、章节测试等各种课程资源提供给学生,学生可以在课后慢慢消化课堂上没有消化的知识;网络教学平台的论坛和答疑系统也为学生和老师之间提供了一个交流的平台,学生可以随时向同学或老师提问,任课老师也可以与学生充分交流,及时掌握学生的学习动态,调整教学方法。 3通过实验巩固课内知识 3.1科学设置实验内容 首先,在实验类型上我们把实验项目分为两大类,即验证型和综合型。验证型实验以验证教材介绍的算法为主,实验指导书提供了这些算法的详细案例代码。综合型实验注重相关知识的融合,通过设计合理的实验内容强化知识间的联系,锻炼学生的综合实践能力。 其次,在实验内容的设计和选择上必须兼顾广度、深度和梯度。广度即实验内容应该涵盖课程的所有的知识点;深度即对实验题目进行精心设计,选择一些带有趣味性的现实问题;梯度即有对基础知识进行巩固的较简单问题,也有相对较难的让学生有所提高的隐蔽性问题。 3.2规范实验过程 为了规范实验过程,我们在实验教学过程中要坚持做到有计划、有指导、有报告、有总结,随时掌握学生动态。实验开设前由教师制定详细的实验计划,对每个实验项目确定基本目标和要获得的具体结果;要求学生每次实验必须随堂提交实验报告,教师通过批改实验报告了解学生对相关知识的掌握程度,及时调整教学策略。 4结语 在利用Flash动画算法的教学过程中,在保证理论教学质量的前提下,充分重视实践教学环节,唤醒学生的兴趣,培养其自我性、主动性、抽象的归纳力和理解力,在教学中始终坚持培养学生的思维能力甚于知识本身的理念,以期对学生未来的发展起到有益的作用。 参考文献: [1]张铭,许卓群,杨冬青,等.数据结构课程的知识体系和教学实践[J].计算机教育,2004(3):89 [2]严蔚敏,吴伟民.数据结构[M].北京:清华大学出版社,2007:1-10 【分支结构算法的实现教学设计】推荐阅读: 数据结构和算法06-10 实验数据结构与算法06-23 《左右结构的字》教学设计06-25 课堂教学结构的科学设计10-09 左右结构字的教学设计05-28 生物种子的结构教学计划07-27 高层建筑的结构设计09-18 《作文的构思与结构》的教学反思10-04 《动物体的结构层次》的教学反思10-25 钢结构的施工组织设计10-06分支结构算法的实现教学设计 篇7
分支结构算法的实现教学设计 篇8