算法与程序设计思想

2024-05-11

算法与程序设计思想(精选8篇)

篇1:算法与程序设计思想

《算法与程序设计思想》教学案例1

一、教学目标 1.知识与技能:

求一批数据中最大值的算法设计思想,并将算法的设计思想用流程图表示出来。2.过程与方法:

利用现实生活中比较身高的活动,以及对武术比赛中“打擂台”流程的逐步梳理,让学生学会从此类生活实际中提炼出求最大值的思想方法,即算法思想。

培养学生分析问题、解决问题的能力,让学生学会在面对问题时能梳理出解决问题的清晰思路,进而设计出解决某个特定问题的有限步骤,从而理解计算机是如何解决、处理某种问题的。

3.情感、态度与价值观:

让学生全身心地投入到教学活动中,积极与同伴合作交流,进行探索活动。培养学生良好的思维品质,发展他们的创新思维,并养成积极的学习态度和良好的学习习惯。

创设情境,以激发学生的学习兴趣。努力营造一个可以接纳的、支持性的、宽容的课堂学习环境,让学生置身于民主和愉悦的课堂氛围中放飞思维、潜心研究、快乐创造。

二、教学重点、难点 教学重点:建立求一批数据中最大值的算法设计思想,并将此算法设计思想用流程图表示出来。

教学难点:上述重点问题同样是本课教学的难点。另外,如何把人解决问题的思路、步骤用计算机语言描述出来也是本课的难点之一。

三、教学对象分析

高一年级的学生。他们已具备了一定的观察、思考、分析和解决问题能力,也已有了顺序结构、分支结构、循环结构等知识的储备。因此,对于如何将解决问题的思路画成流程图,学生已有一定的基础,但可能还不很熟练,尤其对刚学过的循环结构,教师在课堂上要注意引导。

四、教学策略及教法设计

利用现实生活中比较一组学生身高这一事件,引导学生去发现求最大值的一种方法。如何设计求一批数据中最大值的算法?我认为让学生自己去经历整个探究过程,要比直接把现成的算法告诉学生有意义得多。它能迅速、有效地帮助学生建立程序设计思想。在完成这个任务的过程中,教师的循循善诱起到了非常关键的作用。找出一批数据中的最大者,从表面上来看是一个很简单的问题。在比较数的过程中,人因为动用了眼睛,比较大小的思维过程一闪而过,所以能很快求出一批数据中的最大值。而计算机与人不同,它对这些数据看不见、摸不着,怎么来完成这一任务呢?其实,计算机解决问题的关键,就是要把人解决问题的思维过程用计算机语言描述出来,即为大脑思维的每一步“拍照”。这是计算机程序设计教学的一个重点,也是一个难点,需要教师在教学过程中逐步引导和训练学生,使学生逐渐学会分析问题,寻求解决问题的方法和步骤。本案例运用生活中“打擂台”的实例引导学生分析求最大值的方法,通过对这一现象的分析,逐步引出求最大值的算法设计思想。1 孙朝霞.从生活中探究和建立程序设计思想——《算法与程序设计思想》教学案例.中小学信息技术教育,2005(12)

五、教学过程 1.情境创设 师(提问): 今天在第一排就座的有10 多位同学,谁是我们第一排在座各位中的最高者呢?

师(引导): 大家思考,通常这个任务我们是怎样去完成的? 教师根据学生对问题的回答进行分析。引导学生往古时候比武时常常采用的“打擂台”的方式上想,提示学生可参考电视上经常播放的“挑战主持人”节目。

师生: 打擂的过程可以描述为:

(1)确定一个擂主(讨论第一个擂主是如何确定的);(2)挑战者上台;

(3)擂主和挑战者比较;

(4)挑战者胜的话,挑战者做擂主,否则擂主卫冕;(5)重复执行(2)~(4)步骤,直到最后一个挑战者。

师: 在打擂的过程中,我们看到(2)~(4)步骤是要重复做的,所以我们该怎么办呢?

生: 需要循环结构来实现。

师: 这几个步骤序列重复到什么时候结束呢?由学生讨论结束的办法,很显然,需要在最后加上一个能判断什么时候结束的判断框。

根据讨论的步骤,最后师生共同得出打擂台的算法和流程图(如图1)。

2.求一般情况下的最大值的算法 师(引导): 如果我们面对的是一堆数据,现在希望我们求出这一堆数据中的最大值该怎么办?通过教师和学生的共同分析,把问题进一步细化为:

(1)从第一个数据开始看起;

(2)把第一个数据的值在变量中记下来;(3)再取一个数据;

(4)比较这个数据与变量中记下的数据的值;

(5)如果这个数据的值比记下的数据的值大,则去掉变量中原来那个数据,记下新数据的值;

(6)重复执行(2)~(4),继续比较,直到最后一个数据。也就是说,计算机的变量始终记着当前比较过数据中的最大者(我们不妨用X 表示它),当取完最后一个数据时,X 中留下的也就是最大值了。

求最大值的算法设计思想用图2 表示。

注意:

a.再次让学生讨论变量的意义,弄清赋值语句的意义。

b.一些物理量用变量表达的意义。如X 表示最大值,X 表示输入的一个值,且每次循环时都用同一个变量X。

c.为了控制循环结束,必须加入一个控制循环次数的计数器I,当I 达到一定的次数后,循环工作结束。

3. 回顾小结

师生共同总结算法设计的过程,就是将大脑思维的每一步都记录下来,并且用计算机能达到的功能来实现人解决问题的思路。

篇2:算法与程序设计思想

在高中阶段开设信息技术课程的基本目的是进一步提高学生的信息素养,使他们能适应社会发展的需求,为信息社会培养合格的人才。本课程力图通过信息的获取、加工、管理、表达与交流等各类信息实践活动,掌握信息技术,感受信息文化,增强信息意识,内化信息伦理。要达到这一目的,必须为学生建构起一个利于他们提高信息素养的良好学习和实践环境。

根据教育部制订的普通高中课程标准编写的,由浙江教育出版社出版的高中信息技术教科书(实验),经全国各地多年来的试用,积累起了比较丰富的教学实践经验。在浙江教育出版社积极倡导、支持,教科书编写人员不懈努力和广大任课教师的热情参与下,多次开展了卓有成效的教学交流活动。例如,教师用书的编制与修订,优秀教案选编的出版,开展教学资源竞赛等等,都为教科书的使用和课程教学质量的提高作出了有益的贡献。

总的说来,上述各项活动都比较侧重于解决如何教的问题,受益的对象基本局限于教师范围。但是,我们更主要的任务是如何使广大同学直接受益,如何为广大高中同学创造一个便于进行自主学习信息技术课程的辅助学习的平台,通过这一平台来掌握高中课程范围内的信息技术基础知识和基本技能。使同学们能根据自己的基础、特长和兴趣,学会创造性地利用信息技术解决学习和生活中的实际问题。《高中信息技术辅助教学平台》(计算机光盘版)就是为这一目的开发和编制的。为了使信息技术课程的教学能全面贯彻教育部制订的课程标准精神,使广大任课老师在教学过程中有所参照,也为了减轻老师们的备课负担,更主要的是为了激发同学们学习本课程的积极性,能循序渐进地掌握信息技术的基础知识、基本技能和相关的应用能力。“平台”的设计是以“教案”或“学案”的形式呈现的。

信息技术辅助教学平台共分六个模块,分别是:信息技术基础、算法与程序设计、多媒体技术应用、网络技术应用、数据管理技术、研究与探索(机器人活动和信息学活动)。前5个模块按32课时来安排内容。任课老师可按本校生源、设备、师资条件的实际情况进行适当调整。

根据本“平台”的设计目标及其所肩负的任务,前5个模块的基本结构栏目为:课标理解、教材分析、教法实践、知识货架、素材下载等项。

课标理解:以课程标准为依据,提出对本单元教学内容在课程中的作用和地位的理解,使教师和学生的信息技术教学活动更符合课程目标。

教材分析:指明本课时的学习目的,基本教学内容,需要掌握的学习重点和要解决的难点。对部分重点或技术难点提供简明动画,帮助同学理解。

教法实践:根据教学内容,提出教学流程或教学方法,进行讨论交流、实践体验、综合探究等实践活动;通过实例演示或练习(含拓展练习),对同学反馈的知识、技能进行评价。知识货架:是本模块、本章、本节、本课涉及的知识和概念的汇编,供教师和同学查阅。

素材下载:为教师备课提供相关素材内容;为学生的学习、作业、练习准备必要的素材,以节约学生时间,提高学习效率。其中有些内容是为了拓展教师和学生的视野提供帮助。

《算法与程序设计》是高中信息技术课程的选修模块。由于算法与程序设计在解决问题过程中所起的关键作用,因此,它被各地学校广泛地选修,这也为本模块教学积累起了比较丰富的经验。本模块所担负的主要任务是:让学生体验算法思想,了解算法和程序设计在解决问题过程中的地位和作用,并能对简单问题设计算法,初步学会用一种程序设计语言编制程序,实现算法,解决问题。

本“平台”汇集了丰富的算法与程序设计教学内容和相关素材。它可以用来帮助教师备课,进行课堂教学;也可以帮助学生学习,提高他们的学习兴趣,激发他们对未知领域积极探究的欲望和提高分析问题、解决问题的能力。本“平台”努力为学生提供一个较为优良的学习环境,促进学生主动学习,以充分发挥其主体潜能,为学生个性化学习开辟一个新领地。

《算法与程序设计》既有严谨的理论,需要对被解决的问题进行周密的分析,把问题模型化,又要有解决问题的科学的、严格的方法。具备算法理念,初步掌握算法的设计与分析方法是一件对学生终身有用的好事。本“平台”对“课标理解”、“教材分析”等5个基本栏目都有较详尽的叙述;对部分比较典型和难度较大的内容还配置了相应的Flash动画帮助师生们进行教和学。

问题求解存在于社会生活的各个领域,在“拓展学习”栏目中“平台”提供了许多来源于学习、生活、工作的算法设计实例,供学生课内或课后进行自主学习,以进一步形成算法理念,提高自己的算法设计和算法表达的能力。所有的示例程序、练习素材及辅助动画都可在“素材下载”栏目中找到,供下载,以节省师生的教学与学习的时间,提高效率。

篇3:算法与程序设计思想

1 优化下料算法

工业当中, 关于优化下料的问题, 在国外称为CSP, 包括材料的排样问题、切割问题和装箱问题。根据是否为空间尺寸下料问题可划分为广义下料问题和狭义下料问题。在工业领域当中, 下料问题存在的比较广泛。对于下料问题的不断深入的研究, 可以得出目前主要的求解手段有两大类:

1.1 最优解法

数学模型中一维下料问题是一个对整数进行规划的问题, 一般的下料优化方法是通过将整数变量松弛后, 看做是线性规划, 运用单纯形方法进行求解, 然后将得到的结果圆整, 但是这样不能确保一定得到最优解, 并且进行圆整后会导致零件生产过量或者生产不足, 这就需要对其进行再处理;也可以运用针对整数规划求解的割平面和分支定界法进行求解;与此之外还可以采用枚举法, 通过比较可行解空间内所有点的目标函数从而找出下料问题的最优解;但是这些方法计算效率比较低, 经常因为解空间太大而对实际问题的处理束手无策, 所以这些方法只能对小规模问题进行优化。

1.2 启发式算法

优化下料问题作为一个NPC难的问题, 有复杂的计算程度, 求解时间根据问题规模呈现指数级的增长, 所以通常没有多项式算法。由于存在复杂的实际情况, 所以不能通过最优算法来求得每个问题实例中的最优解, 因此启发式算法的求解比较常用。针对最优算法, 可以用启发式算法来这样进行定义:如果算法是基于经验或直观构造, 那么在能够接受的花费下为待解决优化问题的每一个实例给出一个可行解, 是无法事先预约这个可行解与最优解存在的偏离程度的。通过启发式算法寻找出最优解的近似解, 可以在可接受的花费的前提下得到一个满意的问题解, 使得生产实际中能够应用优化下料技术, 所以启发式算法在现阶段的研究较多, 根据规则的不同, 启发式算法的构成也不同。

2 设计优化步骤

2.1 零件分组

对于下料的实际生产当中, 我们需要安排许多种类的零件, 通过长度对零件进行分组, 对每组的四个零件优化, 这种方法所得到的最优解只是每组内的一部分的最优解而不是得到整体的。我们可以运用这样的分组原则:将截面规格相同的零件按照尺寸长多进行从大到小的排列, 取出两个最小长度零件和最大长度零件, 将取出的这四个零件合成一组, 使得零件可以长短搭配。根据这种分组原则, 不仅可以使安排所有这四种零件的概率得到提高, 使原材料的消耗得到降低, 还使下料的排列方式数量得到减少, 并提高了优化计算程序总体运行速度, 使系统的稳定性得到了加强。

2.2 求全部下料方式

分组后可通过下面步骤求出下料方式: (1) 零件的种类数不大于4时, 可以直接进行数学模型的计算, 如果零件不少于1种时, 根据前面的分组原则对零件进行分组。 (2) 对截面规格相同的原材料的尺寸长度种类数进行判断, 如果种类数是1时, 可以直接求得所有下料方式, 如果种类数比1大时, 要先将对应的1种原材料尺寸的所有下料方式求出, 这时所求的4种零件只剩下3种零件了, 依次进行判断, 可以得到全部的下料方式, 也就是4种零件所对应1种原材料的尺寸长度的所有下料方式。 (3) 将每组零件对应的原材料的所有下料方式相互混合在一起, 就可以得到了每组零件对应于所有原材料的各种下料方式, 线性规划方程组当中的系数矩阵正是由这些下料方式组成。

2.3 关于整数线性规划

求出下料方式以后就可以建立整数线性规划的相关模型了, 对于设计角钢的优化下料, 决策变量要求只取出整数值, 求出的解中不能够出现小数或分数, 使所用原材料总根数最小等于目标函数和以达到零件需要量为约束条件所进行的数学规划问题就是角钢优化下料问题。可表示为:MAXZ=CX;Aχ≤b;χ≥0。

其中, C代表下料方式的最大可利用长度。

对与不等式约束条件极值问题, 最普通的算法和一般求解的方法是单纯形法, 总体思路:先要引进人工的变量, 把数学整体模型转变成标准的线性规划方面的问题。通过已经得到的等式相互约束条件将目标函数当中的某些自变量约去, 使得非基变量变成零, 求出一组基向量所对应的基本可行解, 通过这种基本可行解进行考察, 看使目标函数达到最小值的是不是这一点。不是话, 再去考察其他的基本可行解使得目标函数达到最小值。

对于原始单纯形法, 每次进行迭代都要将整个单纯形表改写, 对于单纯形表上的所有数据, 都要参与到运算当中, 某些运算其实是不必要的, 如果约束方程的变量个数n和个数m比较大时, 对于计算机的计算量和储存量要求都很大, 会导致计算量和储存量方面的浪费, 对单纯形法进行改进, 将单纯形法当中需要的计算依次按格式排列, 防止出现不必要的计算。

3 结束语

对于角钢的优化下料系统, 整个系统的核心是优化计算模块, 所以想要实现计算功就要有高性能的算法。我们要加大对下料系统的算法研究, 以确保满足当前阈值的下料方式, 兼顾加工难度、利用率以及整体计算时间。本篇文章将铁塔厂角钢优化下料工作做为应用的背景, 不断提高原材料利用率和下料车间工作效率, 从生产管理和下料技术两个的角度出发, 探究了角钢的优化下料系统, 优化了下料工作的整体性, 加大了市场竞争力和企业快速反应能力。

摘要:国家不断加大对电力建设的投入, 使市场对电力铁塔的需求也不断增加, 所以必须提高对铁塔设计制造技术要求, 以达到相应水平。目前许多企业原材料利用率和生产效率不够高、信息化水平比较低、生产成本居高不下、工作流程不合理, 怎样去解决这些难题, 并不断提高自身竞争力是现在需要解决的主要问题。

关键词:铁塔制造,下料问题优化算法,生产管理下料系统

参考文献

[1]李琼, 金升平.一维优化下料问题的模型与算法的综合比较[J].武汉交通科技大学学报, 1998.

[2]华中平, 张立.基于线性规划的角钢优化下料算法研究.湖北工业大学学报, 2005.

篇4:算法与程序设计思想

将数学归纳法的思想引入算法与程序设计的教学中可以结合数学和信息技术两门课程优势,使学生利用已有的知识和技能去设计正确的算法,达到培养信息素养的目的。同时,可以开辟新的教学方法,从有别于传统程序设计教学的角度,快速高效地在中学生中普及算法知识。

以下是数学归纳法教学思路与传统程序设计思路的对比。

数学归纳法是一种数学证明方法,典型地用于确定一个表达式在所有自然数范围内是成立的或者用于确定一个其他的形式在一个无穷序列是成立的。

用数学归纳法进行证明的步骤:

1.(归纳奠基)证明当取第一个值时命题成立;证明了第一步,就获得了递推的基础

2.(归纳递推)假设当前命题成立,证明后续命题也成立;证明了第二步,就获得了递推的依据,但没有第一步就失去了递推的基础。只有把第一步和第二步结合在一起,才能获得普遍性的结论;

3.下结论:从第一个值开始的所有后续命题都成立

数学归纳法的第二种形式:第二数学归纳法原理是设有一个与自然数n有关的命题,如果:

(1)当n=1回时,命题成立;

(2)假设当n≤k时命题成立,则当n=k+1时,命题也成立。

从上可以看出数学归纳法有着很强的递推关系,而计算机的很多算法都具备递推关系。由此,我们可以考虑,在中学NOIP的教学过程中,可以利用数学归纳法来进行教学。

一、用于递归的教学

程序调用自身的编程技巧称为递归。这种编程技巧可以解决很多算法问题。它也是算法的核心思想和描述方法。

一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

对比数学归纳法,我们可以这样理解:递归的边界条件即为数学归纳法的第一步,也就是当取第一个值时命题成立。递归的过程就是归纳递推的方法。即假设当前命题成立,证明后续命题也成立。

例如:阶乘计算

递归的思考方式:

1.边界条件n=1时:n!=1。

2.递归过程n!=n*(n-1)!

数学归纳法的思考方式:

1.n=1时,1!=1成立

2.假设(n-1)!可以求出,则n!=

n*(n-1)!必定可以求出。

我们可以看出,递归的思考方式和数学归纳法是有一定相似之处的。

使用数学归纳法,除了可以引入解题的方法之外,还可以同时在数学上证明该思路是正确的。可以加深初学者对递归的认识并降低难度。

又例如汉诺塔问题的思考:

递归的思考方式:

1.边界条件

只有一个盘子时,盘子从A柱移到C柱

2.递归过程

n-1个盘子从A柱移到B柱,剩下的盘子从A柱移到C柱,n-1个盘子从B柱移到C柱

数学归纳法的思考方式:

1.n=1时盘子可移,盘子从A柱移到C柱

2.假设n-1个盘子可以从一个柱子移动到另一个柱子,寻找n个盘子从一个柱子移动到另一个柱子的方法。

在初学递归的同学中,汉诺塔问题是学习的难点和重点。我们需要从栈、函数的调用原理、题目的思考方法来讲述。从数学归纳法的思考方式来看,我们可以更好的加深学生对递归的理解。同时引入数学归纳法的思考方式可以更容易的证明解题的正确性。

二、用于分治的教学

一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这是分治算法的核心思想。

我们也可以看到:“最后子问题可以简单的直接求解”即为数学归纳法中命题n=1时的阶段,“问题的解的合并”即为数学归纳法中当n≤k时命题成立推n=k+1时命题成立的阶段。

例如:二分排序算法利用数学归纳法的讲解思路

1.n=20=1时,1个数据自然排序成功。

2.假设n=2k-1时,2组2k-1个数据分别有序,则n=2k时,可将两组分别有序的数据通过归并排序合并,使之有序。

可以看到,数学归纳法的讲解思路不同于普通的分治排序的思考方式。但这可以激发学生从多方面思考算法的求解思路。

(3)用于动态规划的教学

动态规划是一种在数学和计算机科学中使用的,用于求解包含重叠子问题的最优化问题的方法。其基本思想是,将原问题分解为相似的子问题,在求解的过程中通过子问题的解求出原问题的解。动态规划的思想是多种算法的基础。

动态规划思想中“将原问题分解为相似的子问题,在求解过程中通过子问题的解求出原问题的解”所具备的递推性质,决定了动态规划的问题思考中也可以使用数学归纳法的思想。其中的状态转移方程,便是第二数学归纳法中当n≤k时命题成立,推n=k+1时,命题成立的步骤。这里的性质决定了使用数学归纳法来思考,可以解决子结构和多阶段规划(无后效性)问题。

如题:

7

3 8

8 1 0

2 7 4 4

4 5 2 6 5

请编一个程序计算从顶至底的某处的一条路径,使该路径所经过的数字的总和最大。规定:

●每一步可沿直线向下或右斜线向下走;

●1<三角形行数≤100;

●三角形中的数字为整数0,1,…,99;

在动态规划的题目中,数学归纳法的归纳奠基思想起到了寻找边界条件的作用;其递推思想则起到了划分阶段,定决策并写出状态转移方程的作用。

从这里可以想到,当三角形只有一个结点时,问题自然解决。需要解决的命题是从已知1个结点的三角形结果推出具有3个结点的三角形的结果。从已知3个结点的三角形结果推出具有6个结点的三角形的结果,以此类推;即由n=k-1时命题成立推出n=k时命题成立。这样,我们就可以引入顺推和逆推的方法。最终得到该题的状态转移方程。

在整个的教学过程中,学生所学的知识始终由原有的知识进行迁移转化,利于学生的理解和接受。可以大大简化动态规划的教学难度,加快学生入门的速度。

从这里可以看到,凡是具备分层和递推形式的问题都可以使用数学归纳法的思想。所以在进行算法教学中,可以将数学归纳法思想作为主线,贯穿于递归、分治和动态规划的教学中。使学生从纵向上加深对算法的理解。学生在学习过程中,整合了数学和程序设计。

篇5:算法与程序设计教案

一、教学目标

1、知识与技能

(1)理解算法的概念,培养学生自我探索信息,高效获取信息的能力;

(2)能初步利用算法解决简单的问题,培养学生的理论联系实际能力和动手操作能力。

2、情感、态度、价值观

学生在学习过程中,通过亲身经历体验获得对此算法的感性认识,培养学生自我获取信息、分析评价信息、、表达呈现信息的能力,进一步提高其信息素养。

二、教学重点难点

重点:算法概念的理解

难点:如何科学合理的选择和设计算法。

三、教学策略与手段

以趣味性问题设置情境,激发学生探索解决问题的兴趣,与学生进行互动探讨,通过Flash演示材料,比较直观地把抽象的问题简单化,使学生的思考逐步深入,从而总结出算法的概念,学会如何设计和选择算法,培养学生自主探究学习的能力。

四、教学过程(1课时)

(一)我们来共同寻找下面一些生活中比较现实的问题的解决方法。【问题一】天下真的有“不要钱的午餐”吗?

某一餐馆门口海报上写着“不要钱的午餐”,规则如下:在三个月内,来宾必须凑够五个人,五人每次来就餐必须按照不同的顺序坐,直到把所有可能的顺序都坐一遍,以后来吃饭就可永远免费”。于是有人想,这太容易了,每人每次坐不同的位置,吃五次不就行了?于是他就叫上自己的朋友参加这项活动,可是,吃了十次之后,还没有吃上免费午餐,这是怎么回事呢?

学生们感觉非常有意思,很快以小组为单位进行热烈的讨论并得出了破解问题的步骤:①第一个座位5个人都有坐的机会②第二个座位只有4个人中的任一个有坐的机会(一个人不能同时坐两个座位)③第三个座位只有3个人中的任一个有坐的机会④第四个座位只有2个人中的任一个有坐的机会⑤第五个座位只有1个人有坐的机会⑥计算:5×4×3×2×1=120⑦得出结论:需要吃120次才有可能吃上免费午餐。

【问题二】有三个和尚和三个妖怪过河,只有一条能装下两个人的船,在河的任何一方或者船上,如果妖怪的人数大于和尚的人数,那么和尚就会有被吃掉的危险。你能不能找出一种安全的渡河方法呢?请写一写你的渡河方案。学生:学生讨论回答。〖展示步骤〗

①两个妖怪先过河,一个妖怪回来; ②再两个妖怪过河,一个妖怪回来; ③两个和尚过河,一个妖怪和一个和尚回来; ④两个和尚过河,一个妖怪回来; ⑤两个妖怪过河,一个妖怪回来; ⑥两个妖怪过河。

【Flash动画展示】通过讨论和动画展示,我们可以知道,计算机解决问题和人解决问题一样需要有清晰的解题步骤。算法就是解决问题的程序或步骤。

(二)【课件展示】算法的概念:

1、广义的算法是指完成某项工作的方法和步骤,在我们日常生活中也经常使用算法,只是没意识到罢了。如:洗衣机的使用说明书是操作洗衣机的算法,菜谱是做菜的算法等等。

2、在数学中,现代意义的算法是指可以用计算机来解决的某一类问题的程序和步骤,这些程序或步骤必须是明确和有效的,而且能够在有限步之内完成。

【小试身手】按照这样的理解,我们可以设计出很多由具体数学问题解决一类数学问题的算

法.下面看一个例子:(要求学生自己考虑并写出具体的算法)

鸡兔同笼问题。一个笼子里有鸡和兔,现在只知道里面一共有17个头,48只脚,鸡和兔各有多少只?试设计一个求解的算法。

【设计意图】求解鸡兔的问题简单直观,却包含着深刻的算法思想。应用解二元一次方程组的方法来求解鸡兔同笼问题。

第一步:设有小鸡x只,小兔y只,则有

第二步:将方程组中的第一个方程两边乘-2加到第二个方程中去,得到,得到y=7; 第三步:将y=7代入(1)得x=10。

【变一变】在笼中有鸡、兔若干,已知有头a个,有脚b只,求各有多少只鸡和兔。

【师生合作】老师带领学生共同书写规范的算法的具体步骤,最后引出算法使用的范围:能解决一类问题,并且能重复使用。

(三)【课件展示】算法的基本特征

①有穷性 ②确定性 ③不唯一性 ④有效性(逻辑性)

1、有穷性:一个算法应该包含有限个操作步骤,而不能是无限的。

2、确定性:算法的每个步骤都应该是明确无误的,不能含义模糊,使执行者无所适从。

3、有零个或者多个输入,有一个或者多个输出

4、有效性:算法中的每一步都应该能有效地执行,执行算法最后应该能得到确定的结果。

【教学总结】

1、本节课通过一些生活中看似简单问题的解决方法和步骤,使学生比较轻松的接受了生活算法的概念,进一步理解了计算机算法的概念。

2、课堂教学的效益取决于学生对所学知识理解了多少,能否用所学知识来解决一些实际问题。本节课的设计突出讲与练的结合,培养学生的动手能力,并且引出学生对下一节课的内容的思考,比较顺利的完成了本节课的教学任务。

篇6:算法与程序设计的教案

一、学情分析

通过上学期《算法与编程》部分的学习,学生初步了解算法及其表示、比较熟悉流程图设计;

本学期课程为《算法与程序设计》,对算法的理解更加深入,要求能通过visual basic实现简单算法;

在本课之前,学生应了解了流程图的应用,熟悉在一组数中求极值算法,对于排序及冒泡排序,学生比较熟练。

对于本部分,学生可能会对选择排序算法的原理理解较为困难,需要教师的引导学习。学生应当在学习过程中认真听取教师对于算法的分析,在教师指导下能解释该算法的流程图,进而实现程序。

二、教学目标

知识性目标:

了解排序的概念、能在现实生活中列举出关于排序的实例

能对照冒泡排序,解释选择排序的优势,指出选择排序的策略,找出数字之间的逻辑联系

有迁移应用能力,能由此及彼,归纳排序中的数字规律,探索更有效率的排序算法

技能性目标:

具有模仿水平,在教师指导下可以表达出选择排序的思想,能对流程图作出解释

能独立完成流程图的绘制,对选择排序的各个环节比较熟练,并能在visual basic环境中规范地编写程序

情感、态度、价值观目标:

学生在学习过程中,通过亲身经历体验选择排序的实现过程,获得对此算法的感性认识

利用信息技术手段,开展交流合作,把自己对此算法的心得与他人交流,培养良好的信息素养,提升热爱科学的理念

三、重点难点

重点:对选择排序原理的理解,绘制流程图,数据交换,调试程序

难点:分析流程图

四、教学策略与手段

把握重点,先导入问题,复习排序定义,分析冒泡中数据交换次数多的问题,指出冒泡排序法效率不高,从而引出数据交换次数较少的选择排序算法

在教学过程中,可通过flash演示材料,比较直观地把抽象的问题简单化,由“流程图雏形绘制”-“逐步完善流程图”-“程序实现”-“调试”的过程,让学生熟练此算法与程序实现。

在教学中可灵活运用小组合作、分组讨论、小组间竞赛等手段进行教学,通过发散性思维的培养,增强学生对知识的探索能力。

五、课前准备

1.学生的学习准备:对流程图的绘制方法、vb语法作巩固,对选择排序算法作预习;学生分组:4人一组

2.教师的.教学准备:准备充分的演示材料、相关数据、相关软件安装。

3.教学环境的设计与布置:计算机教室

六、教学过程

简要点拨排序的概念。

演示已经学习过的冒泡排序flash动画。

[小组讨论]在冒泡排序算法中,我们知道冒泡排序是依次把数组中相邻两个数据进行比较,通过交换数据,把较小的数据逐次向上移动的算法。由于数据的移动是逐次进行的,数据交换的次数相当多。大家想想它的实质既然是将一堆数据中的最小数据移动到某个位置,有没有必要让这个数字逐个移动?比如,对于数组:4、8、3、9、6、5、11、10、2、9,如果要用冒泡法实现排序,第一遍冒泡其实是把这组数据中最小数“2”移动到最前边,第二遍冒泡把“3”逐次移到第二个位置,其它类推。它们的过程是逐次向前的,这样做很多无谓的交换。为了达到移动2到最前边的目的我们可以怎么简化这个过程?

[学生]直接把2最前面的数4交换,再把3与第二个位置的数8交换,其它类推

篇7:高中算法与程序设计教学

左权中学 张彦萍

算法与程序设计是高中信息技术选修课。本模块强调的是通过算法与程序设计解决实际问题的方法。对于学生来说,程序设计的思维方式、方法和概念都是全新的,学生接受起来比较困难,因此必须认真研究程序设计的教学方法。我在近几年的高中信息技术课教学过程中进行了一些研究与探索,对程序设计教学方法有了一些浅显的认识,与大家共同探讨。

一、培养学生编程的学习兴趣,调动学习积极性

爱因思坦说“兴趣是最好的老师”。兴趣相当程度上决定了教学效果的好坏。如何培养学生学习程序设计的兴趣,我认为可以从以下几个方面入手。

1、让学生认识到学习程序设计在提高自身素质的突出作用。讲一些IT界精英的故事;社会需要提高学生未来的生存能力;自身素质提高:可以培养学生的思维品质,培养学生发现问题、思考问题和解决问题的能力;学习程序计算机教育对其他学科的影响等方面入手。

2、程序设计教学中要从学生的兴趣入手,利用学生对事物的好奇心,选择学生身边的,学生感兴趣的、有实际意义的程序,激发学生的学习兴趣。比如:第一堂课讲VB界面设计,可设计一个QQ登录界面。学完选择语句后,我设计了利用随机函数加法练习小程序,加数和被加数随机产生(1-100),结果自己输入,可判断对错,程序结束可计算得分。例程也可以找班内学生自己编写的程序,学生非常喜欢。

3、一定要分层次教学。文科班和理科班、尖子班教学内容难度上有所变化。一个班级布置作业时也要分层次。

4、轻入浅出,消除学生们对程序设计的畏难心理。在教学时,低起点,从一个个简单实例出发,让学生们从自身的实践中感受到这个的确很简单,从而迎合了学生渴望成功的心理特点。前两节课千万不能罗列过多的概念,让学生不知东西,打击学生的学习兴趣。

二、适当调整教材结构,立足具体实例,渗透基本概念

VB程序设计概念比较多,如何让学生较容易按受、理解是我在最初的教学中较为头痛的问题。刚接触程序设计的学生,对程序设计充满了好奇,如果把一开头还用不上的许多的控件、属性放在前面,一下子引入大量抽象的名词、概念,就会让不少学生望而生畏。因此要想让学生领会这些抽象的概念,教学中我选择的方法是先少讲控件,最多讲窗体、按钮,三个控件。结合数学课本已学的知识,先复习、巩固、提高基本知识。从数据类型,基本运算,讲到三种基本控制结构后,然后再讲基本的控件。这时,控件用于程序设计的例子就可以讲明白了。但是,我仍然不敢把控件的每一个属性都细讲。突出按问题需要设计界面来选用控件,以一个个鲜活的具体实例为切入点,在每个例子中适时、适量渗透一些相关的概念和知识,让学生在做中学,在学中做,使学生在完成任务的过程中,逐渐地、很自然地去体会控件、对象、事件的概念。教学中要安排足够的课时把这些控件的用法渗透到一个个程序实例中,由浅入深逐渐介绍,让学生在编写程序的过程中总结控件的用法。

三、采用启发、引导的教学方法,培养学生的实际应用能力、设计教学的主要环节,因“材”施教与因“需”施教相结合

《VB程序设计》课程的内涵十分丰富, 涉及的知识单元和知识点很多。因此在教学过程中,不仅要培养学生程序设计的技能,还要培养学生系统分析和系统开发的技能。实施VB的教学,首先要选择合适的教材,这样既有利于教师设计教学过程,又有助于学生的学习。这里所讲的“材”是指以教材为纲,按照教材的章节按部就班地讲授,课堂教学中往往以教师讲课为主,要求学生紧跟教师的思路,但是教学方法极易造成教与学的脱节,限制学生创造力的正常发挥。而“需”是紧扣教学大纲所确定的培养目标,以应用为目的,以必需够用为尺度,打破课程界限,将相关课程的知识点加以整合,按照“实际、实用、实践”的原则重新组织教学内容,这是VB教学方法的重要方面,也为教师在讲课过程中提出了更高要求。另外,程序设计是设计与实践并用的工作,只听、看、读是学不会的,只有让学生多动脑、多动手、多实践,通过编写调试大量的程序,才能使学生从中理解程序设计的思想方法、积累程序调试的经验,体会成功的喜悦。因此,在实验环节,除了验证型实验外,增加了设计型实验和综合型实验。为了解学生学习的具体情况,提高教学效果,授课教师要督促学生独立完成上机实验,以提高学生的动手能力,为学生创造性发展提供良好的条件。

2、实例教学

《VB程序设计》是一门实用性很强的课程,它既有理论又有实践,既讲方法又讲动手能力。讲授《VB程序设计》,像任何其他语言的程序设计一样,教材中前几章多数都是先介绍对象、对象的属性、方法和事件及VB语言基础等等一系列的在程序设计中比较抽象难懂的概念,然后才介绍程序的建立和运行。因此在教学中,可适当打破课本原有以知识的逻辑结构体系为顺序组织课堂教学的方式,改用从简单有趣的实例入手,通过让学生观看、模仿,在实际操作中去探究和领悟这些概念,例如,在一开始学习VB对象及对象的方法和事件的有关概念时,我设计了一个求外语、教育学平均成绩的并打印平均成绩的程序实例,让学生和教师一起做,在当前打开的窗体内添加了三个命令按钮、三个文本框和两个标签,设置好各对象的属性;并分别在三个命令按钮的单击事件过程中添加相应代码,按功能键F5运行程序。在操作的过程当中,教师开始只简单提示学生完成程序,等学生完成任务后,教师通过设问,让学生思考:什么是对象的方法和事件?并让学生找出本实例中各对象的名称、不同对象的方法和事件过程名称,教师再适当加以归纳和小结:窗体以及添加到窗体中的控件,统称为对象;而方法却是VB提供的内置于对象的特殊子程序,它可以直接调用,如Print方法;而事件则是对象能够响应和识别的动作,如单击鼠标触发Click事件等,同时提醒学生注意观察在VB中方法与事件的区别。在此基础上,再适当引导学生归纳总结出创建VB应用程序的基本步骤,及如何在界面内添加对象、设置事件等等,一切问题都迎刃而解。在讲解实例时,教师当以精选出的具有代表性的程序实例,把重点放在具体实例的分析和讲解上,把要学习的语法和概念融入到具体实例中来讲解。

3、重视算法,抓住核心

在教学中经常存在这样一种现象:很多学生对语法、结构等知识掌握得很好,但一旦碰到实际问题就束手无策,不知道如何用学到的知识解决实际问题,其实这是算法能力欠缺的一种表现。教师经常注重于分析每条语句的含义,却忽略了算法描述过程的展现,造成学生知其然不知其所以然。其实,在VB中,算法设计是它的核心。如果学生掌握了良好的算法设计能力,也就掌握了钓鱼的本领,无论遇到什么问题都可以很好的解决。那么在教学中可以通过多种方法培养学生的算法设计能力:(1)详细讲授常用的算法。算法有很多种,学生一般只要掌握常用的就可以满足编写模块的需要。而与数据结构、软件工程相关联的算法则不做要求。(2)教师带领学生多阅读程序,分析过程,吸取他人的经验和成熟的算法,使学生少走弯路或不走弯路。(3)开展实践性学习,引导学生积极参与编程实践,促进思维的飞跃,比如让学生练习编辑班级学生档案管理软件等等。在这个过程中,学生亲自动手解决具有一定难度的实际问题,为之设计合适的算法, 经过实践去培养学生的创新意思、应用意识和探究能力。这些意识和能力一旦形成,就会使学生利用VB解决实际问题能力得到很快的提高。

4、培养学生综合运用知识及自己动手的能力

程序设计课程的实践性很强,“精讲多练”是程序设计课程教学的一大特点,实验教学在程序设计教学中起着重要的作用,学生只有通过自己编写程序、上机调试程序,才能从中理解程序设计的思想方法、积累程序调试的经验,体会成功的乐趣,从而激发学生的学习兴趣,学生只听不练根本达不到学习的目的。学生在完成课后习题时积极性不高,兴趣不大,甚至想抄作业应付老师。只有让学生动手编制他们感兴趣的程序,学生才会有成就感,才会对课程产生兴趣,学起来才会从容自如。如在学生学会编写求1+2+„+N!=?的程序后,即引导学生设计求N!的程序,待学生设计出N!的程序后,接着又让学生进一步设计求1!+2!+„+N!=?的程序。这种一环紧扣一环的探究式的动手实践练习, 以发展学生探索能力为主线来组织实践, 以培养探究性思维的方法为目标,以基本的教材为内容,使学生通过再发现的步骤进行主动实践的过程,产生一种探索和发现的心理。因此如何让学生综合应用所学知识解决实际问题,提高综合应用能力和动手操作能力,激发学习兴趣也是我们需要加入课程设计的内容。课程设计时,老师要重点设计选题, 使得选题既贴近实际需要,又能够让学生感兴趣,并且能够运用所学知识解决问题,课程设计题目分为基本题和综合题。基本题按教学顺序设计,尽量避免涉及后续章节的知识,后续的课程设计题目尽量引用前面的课程设计内容,以便加深对前面所学知识的理解;综合性题目是对一学期所学知识的总结和巩固,应与实际生活或工作相关且具有一定规模,可将其分成几个子项目,由更多的学生参与,分工合作,以期进一步锻炼学生的动手能力,从而进一步培养学生分析问题、解决问题、研究和探索问题的能力和团队协作精神。

篇8:算法与程序设计思想

关键词:模型设计,电梯控制,自动生成代码,HDLcoder

随着嵌入式系统的普及,人们对产品的安全性、实时性、可操作性、特定功能等要求越来越高,这大大增加了嵌入式系统的复杂性和开发难度。在传统的解决办法中,整个项目开发周期可分为4个阶段:需求分析和技术规范、设计、实现及测试与验证。在这种传统的开发流程中,缺少一个必要的工具把4个阶段有机联系起来,从而导致了开发过程中的问题,例如基于文本的需求分析和规范定义,导致不同人产生不同的理解,使得最后开发出的产品可能不符合客户的需求;其次,在设计阶段可能需要昂贵的物理原型来验证算法是否满足要求;而在实现阶段,通常利用手工方法完成编码,不但费时费力,而且不可避免地引入人为失误。以上问题若等到最后的测试验证阶段才得到修正,不仅会增加开发成本,严重的会延误开发周期,增加开发风险。基于模型的设计提供了一种通用的开发和测试平台,使得4个阶段有机地结合在一起,无论在哪个阶段发现问题,都能及时、方便地进行定位、查错,这样既可以保证设计和需求的一致性,又可以避免手工编码的冗长过程,保证项目的开发周期[1]。

基于模型的设计对应传统的项目开发方法同样分为4个阶段,分别是:可执行的技术规范,定点生成,代码自动生成,连续的测试和验证。

1 可执行的技术规范

基于模型的设计始于可执行技术规范的建立。MathWorks公司的Matlab/Simulink及专用的模块,为嵌入式算法的高层描述提供了一个图形化环境。电梯控制算法的可执行规范如图1所示[2]。

如图1所示,该嵌入式系统分为3个部分:中间是该系统的子系统,左边是输入信号,右边是输出信号。子系统是该嵌入式系统的核心,负责输入信号的接收、处理以及给执行机构发出相应的指令;输入信号分为楼层面的输入命令和电梯箱内的输入命令;输出信号又分为升降电机控制信号和电梯门的控制信号。

算法实现在 Stateflow 有限状态机中建模完成,如图2所示[3]。

共分为3个状态:“Elevator_Manager”、“Elevator_A”、“Elevator_B”。“Elevator_Manager”负责电梯资源的调度:当有命令输入时,首先判断是不是有效命令,如果是则根据命令来判断是启用电梯A还是电梯B;“Elevator_A”和“Elevator_B”处理各自收到的服务指令:上升或者下降,到了指定位置打开门,并延时一段时间后关闭,也包括在紧急情况下,停在最近的楼层并打开电梯门。

建模完成后即可仿真。在Matlab/Simulink 环境中直接运行模型,测试、验证该算法的可行性、实时性、稳定性及功能的完整性。在此期间,设计团队的每个成员都应参与,理解并完善该模型[4]。

2 生成定点模型

在设计可执行的技术规范时,重点在于设计符合系统级要求的算法,而忽略了实现细节。比如本嵌入式系统最终要用一款普通的FPGA模块实现,就要考虑资源的有限性以及FPGA本身的特点。

(1)参数变量定点化。

因为本设计最终的实现目标是FPGA,所以必须将输入变量、中间变量、输出变量以及常量都要从双精度浮点型转化为定点型。在Simulink环境很容易实现这一点。定点数整数部分和小数部分的位数应以实际需要的精确要求决定,也可以参考Simulink系统推荐的方案。

(2)算法重新设计。

在算法的实现中调用了两个Matlab提供的库函数:一个是取绝对值;另一个是取整。如果最终要在FPGA实现该算法,则必须重新编写两个函数。设计采用添加两个Embedded Matlab函数实现,如图4所示。

在下一步代码自动生成之前,还必须重新编写该算法中有类似C语言中“for”循环结构的函数。这样的函数不止一个,下面以请求服务为例说明重新设计的思路与方法。

Stateflow可用图形化的流程图定义函数,也能使用类似于C语言中“for”循环结构体,如图4所示的enqueue()服务请求队列函数。

当某一楼层服务请求按钮第一次被按下时,如果请求队列第一个请求服务已经是该楼层则不用处理,否则进入循环体。只要符合条件就停留在第二个节点,直到找到该服务队列的末尾,结束循环;此时如果已经大于等于最好请求服务数则返回,否则把该楼层号插入到服务队列的末尾。现采用从头到尾逐个判断是否为空的方法来查找请求队列最近的空位并把该楼层号插入其中。

在定点化过程中,每一次改变必须进行验证和仿真以确保转换的正确性,而且自始至终都要验证技术规范。

3 自动生成代码

MathWorks公司提供的HDL Coder功能模块,可以将Simulink/Stateflow中的模型自动转换成可综合的HDL或者VHDL语言。在生成代码之前,必须做模型的一致性检查。如果检查没有错误,则可以自动生成代码。但第一次检查往往会有错误,必须根据错误提示改正。

4 连续的测试和验证

基于模型的设计从建立可执行的技术规范时,就可以不断地进行测试和验证,检测设计变更对系统的影响,并快速跟踪变更的来源。在代码自动生成之后,既可以通过MathWorks公司的ModelSim链接,在Simulink环境中使用 Modelsim对 HDL设计进行仿真,也可以通过其他途径进一步仿真。文中采用Altera公司的Quartus软件进行综合、仿真,结果如图6所示。

通过设置恰当的输入测试向量,验证了代码有效性与功能的完整性:在固定的时钟节拍下,电梯A和电梯B各自响应本电梯的请求服务,并在到达请求 楼层后延时一定的打开电梯门,再延时一段时间后关闭;当楼层面有请求服务时,按就近原则决定是电梯A还是电梯B去响应;当按下火警按钮时,电梯A和电梯B如果已经停止,则立即打开电梯门,如果还在升降中,则在下一次到达某楼层面时及时打开电梯门;再次按下火警按钮时,关闭电梯门,如有未执行完请求任务则继续执行。

5 结束语

基于模型的设计提供了一个可行的设计方法,使用该方法,可以在嵌入式系统的开发过程中进行不断地测试和验证,利用HDL coder代码自动生成工具可以快速、有效地生成优化的、可综合的目标代码,缩短了开发周期,降低了开发成本。

参考文献

[1]刘杰.基于模型的设计及其嵌入式实现[M].北京:北京航空航天大学出版社,2010.

[2]MURPHY B.使用基于模型的设计进行虚拟测试[J].电子设计应用,2010(z1):46-48.

[3]LIDRBAUCH D.基于模型的设计加速验证功能[J].电子设计应用,2009(7):53-55.

上一篇:承租权下一篇:中国银行“智税慧法”财富规划客户实施方案