汉诺塔课程设计
汉诺塔课程设计

汉诺塔课程设计一、教学内容:1、了解汉诺塔的历史。
2、讲解汉诺塔的游戏规则。
二、课程设计目的:1、让伙伴们了解汉诺塔的历史,勾起孩子们的学习兴趣,让伙伴们更加热爱数学。
2、在掌握汉诺塔玩法的基础上,锻炼伙伴们的观察力,变通里,和右脑开发。
3、增强伙伴们的空间想象能力和动手能力。
4、让伙伴们体会到数学的神奇,从而对数学产生更加浓厚的兴趣。
三、培养技能:观察力、想象力、变通里、右脑开发。
四、所需工具:汉诺塔、记号笔。
五、教学流程概述:第一节课:1、讲一个关于汉诺塔的故事。
2、带领伙伴们一起观察和了解汉诺塔的游戏规则。
(以三盘为例说明)(30分钟)第二节课:汉诺塔4盘的移法。
(30分钟)第三节课:汉诺塔5盘的移法。
(30分钟)第四节课: 汉诺塔月底考核。
(30分钟)六、教学流程详细解读:第一节课:让伙伴们了解汉诺塔的历史,勾起孩子们的学习兴趣,让伙伴们更加热爱数学。
1、讲关于汉诺塔的故事:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。
印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。
不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。
僧侣们预言,当所有的金片都从梵天穿好的那根针上移2、告诉伙伴们游戏规则:以三个环为例说明:(一)先让伙伴们自己观察有几个柱子,有几个盘,并且盘是怎么排列的?答:有三根相邻的柱子,第一根柱子上从下到上放着3个不同大小的圆盘,并且顺序是由大到小依次叠放。
(二)分别为这3个相邻的柱子编号A柱、B柱、C柱;在为这3个圆盘编号盘1、盘2、盘3。
让伙伴们自己动脑想想:如何要把A柱上的3个盘子一个一个移动到C柱上,并且每次移动同一根柱子上都必须保持大点的盘子在下,小点的盘子在上。
最后也要使移动到C 柱的圆盘从下到上按照盘3,2,1金字塔的形状排列。
(三)带领伙伴们一起动手操作:(1)、盘1移动到C柱。
hannoi塔java课程设计

hannoi塔java课程设计一、教学目标本课程的学习目标包括知识目标、技能目标和情感态度价值观目标。
知识目标要求学生掌握Hannoi塔问题的算法原理及其Java实现;技能目标要求学生能够运用Java编程解决简单的算法问题;情感态度价值观目标培养学生的逻辑思维能力、问题解决能力和团队合作精神。
通过本课程的学习,学生将了解Hannoi塔问题的背景及其算法实现,能够运用Java编程解决相关问题。
同时,培养学生独立思考、创新解决问题的能力,提高他们对计算机科学的兴趣和热情。
二、教学内容教学内容主要包括Hannoi塔问题的算法原理、Java编程基础及其在解决Hannoi塔问题中的应用。
1.Hannoi塔问题的算法原理:介绍Hannoi塔问题的定义、解决方法及其数学原理。
2.Java编程基础:讲解Java编程的基本语法、数据结构、控制语句和函数。
3.Hannoi塔问题的Java实现:引导学生运用Java编程实现Hannoi塔问题的解决方案,并进行调试和优化。
三、教学方法本课程采用讲授法、讨论法、案例分析法和实验法等多种教学方法,以激发学生的学习兴趣和主动性。
1.讲授法:教师讲解Hannoi塔问题的算法原理、Java编程基础及相关知识。
2.讨论法:学生分组讨论Hannoi塔问题的解决方案,培养团队合作精神和独立思考能力。
3.案例分析法:分析典型的Hannoi塔问题案例,引导学生运用Java编程解决问题。
4.实验法:学生动手实践,编写Java程序实现Hannoi塔问题的解决方案。
四、教学资源教学资源包括教材、参考书、多媒体资料和实验设备。
1.教材:选用权威、实用的Java编程教材,为学生提供系统的学习资料。
2.参考书:提供相关的算法书籍,帮助学生深入了解Hannoi塔问题的算法原理。
3.多媒体资料:制作课件、教学视频等,丰富教学手段,提高学生的学习兴趣。
4.实验设备:提供计算机、网络等实验设备,保障学生实践教学活动的顺利进行。
汉诺塔游戏课程设计

汉诺塔游戏课程设计一、课程目标知识目标:1. 学生能理解汉诺塔游戏的起源、规则及数学原理。
2. 学生能掌握递归算法的基本概念及其在汉诺塔游戏中的应用。
3. 学生能运用数学归纳法推导汉诺塔游戏的步数与盘子数之间的关系。
技能目标:1. 学生能够运用所学知识,独立设计并解决汉诺塔游戏的不同层次问题。
2. 学生能够通过小组合作,提高问题解决能力和团队协作能力。
3. 学生能够运用信息技术工具,进行汉诺塔游戏模拟和数据分析。
情感态度价值观目标:1. 学生对数学产生兴趣,认识到数学与游戏的紧密联系,提高学习数学的积极性。
2. 学生在游戏中培养逻辑思维能力和创新精神,增强自信心和自主探究意识。
3. 学生通过合作与交流,培养团队精神,学会尊重他人,形成积极向上的人生态度。
课程性质:本课程以汉诺塔游戏为载体,结合数学知识和算法,培养学生的逻辑思维能力、问题解决能力和团队协作能力。
学生特点:五年级学生具有一定的数学基础和逻辑思维能力,对游戏具有浓厚兴趣,但可能对递归算法等抽象概念理解有限。
教学要求:结合学生特点,教师需采用生动有趣的教学方法,引导学生主动探究,注重培养学生的实践操作能力和团队协作精神。
通过本课程的学习,使学生将所学知识应用于实际情境,提高学生的综合素养。
二、教学内容1. 汉诺塔游戏背景介绍:包括汉诺塔的起源、发展及其在数学游戏中的地位。
相关教材章节:数学游戏与趣味数学2. 汉诺塔游戏规则及数学原理:讲解汉诺塔的游戏规则,引导学生发现汉诺塔移动盘子过程中的数学原理。
相关教材章节:组合数学基本概念3. 递归算法及其在汉诺塔游戏中的应用:介绍递归算法的概念,通过实例演示递归算法在汉诺塔游戏中的运用。
相关教材章节:算法与程序设计4. 汉诺塔游戏步数与盘子数之间的关系:运用数学归纳法,推导汉诺塔游戏中盘子数与步数之间的关系。
相关教材章节:数学归纳法5. 汉诺塔游戏实践操作:组织学生进行汉诺塔游戏实践,培养学生动手操作能力和问题解决能力。
汉诺塔牌课课程设计

汉诺塔牌课课程设计一、教学目标本课程的学习目标包括以下三个方面:1.知识目标:通过本课程的学习,学生需要掌握汉诺塔牌的基本概念、规则和策略,了解其背后的数学原理和逻辑思维。
2.技能目标:学生能够运用汉诺塔牌的规则和策略进行游戏,提高解决问题的能力,培养逻辑思维和抽象思维。
3.情感态度价值观目标:通过汉诺塔牌的学习和游戏,学生能够培养团队合作意识,增强自信心,提高自我认知和自我激励能力。
二、教学内容本课程的教学内容主要包括以下几个部分:1.汉诺塔牌的基本概念和规则,包括牌的种类、牌面数值和游戏的目标。
2.汉诺塔牌的策略和技巧,包括牌序的安排、牌型的组合和游戏的节奏控制。
3.汉诺塔牌的数学原理和逻辑思维,包括排列组合、递归思想和贪心算法。
4.汉诺塔牌的游戏实践,包括个人游戏和团队游戏的规则和技巧。
三、教学方法为了实现本课程的教学目标,我们将采用以下几种教学方法:1.讲授法:通过讲解汉诺塔牌的基本概念、规则和策略,使学生了解和掌握相关知识。
2.案例分析法:通过分析典型的汉诺塔牌游戏案例,使学生理解和运用相关策略和技巧。
3.实验法:通过实际操作汉诺塔牌游戏,使学生锻炼和提高解决问题的能力。
4.小组讨论法:通过团队合作和讨论,使学生培养团队合作意识和沟通交流能力。
四、教学资源为了支持本课程的教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:选择一本适合学生年级和知识深度的汉诺塔牌教材,作为学生学习的主要参考资料。
2.多媒体资料:制作相关的PPT、视频等多媒体资料,以便于学生更直观地理解和掌握知识。
3.实验设备:准备足够的汉诺塔牌游戏道具,以便于学生进行实际操作和实验。
4.在线资源:利用互联网资源,提供相关的学习、论坛和在线游戏,以便于学生自主学习和交流。
五、教学评估本课程的评估方式包括以下几个方面:1.平时表现:通过观察学生在课堂上的参与程度、提问回答和小组讨论的表现,评估学生的学习态度和积极性。
汉诺塔课程设计

攀枝花学院课程设计题目:汉诺塔演示程序设计院(系):年级专业:姓名:学号:指导教师:二〇〇九年十二月十四日攀枝花学院教务处制攀枝花学院本科学生课程设计任务书注:任务书由指导教师填写。
课程设计(论文)指导教师成绩评定表摘要汉诺塔(又称河内塔)问题是一个古典的数学问题,是一个用递归方法解题的典型例子。
问题是这样的:开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。
利用计算机图形学进行汉诺塔演示程序设计,是利用C语言绘图函数实现汉诺塔的递归算法图形界面演示过程。
通过C语言实现图形学的绘图,程序控制,以及区域填充,并根据汉诺塔的算法原理实现大小不同的盘子移动的全过程演示。
关键词汉诺塔,变换矩阵,种子填充算法,递归调用目录摘要 (I)1 需求分析 (1)1.1 需求概述 (1)1.2 需求环境 (1)1.3 功能描述 (2)2 概要设计 (3)2.1 程序功能模块 (3)2.2 程序流程图 (3)2.3 数据结构的设计 (4)3 详细设计 (5)3.1 程序初始化 (5)3.1.1 代码功能 (5)3.1.2 功能实现代码 (5)3.2 盘块的移动过程 (5)3.2.1代码功能 (5)3.2.2 功能实现代码 (5)3.3 递归函数 (6)3.3.1 流程图 (6)3.3.2 功能实现代码 (7)4 测试与运行 (8)结束语 (9)参考文献 (10)1 需求分析1.1 需求概述汉诺塔演示程序设计是计算机图形学中图形变换的内容之一。
而图形学中的图形变换的概念是由简单图形生成复杂图形,可用二维图形表示三维形体,甚至可以对静态图形经过快速变换而获得图形的动态显示效果。
其任务是研究各点坐标之间的变化规律。
而本次课程设计就是利用C语言以及图形函数实现汉诺塔的递归算法来进行其盘块移动的全过程显示。
汉诺塔教案

汉诺塔教案一、教学目标1.了解汉诺塔的起源和规则;2.掌握汉诺塔的基本解法;3.培养学生的逻辑思维和耐心。
二、教学内容1. 汉诺塔的起源和规则汉诺塔是一种益智游戏,起源于印度。
传说中,有一座印度寺庙里有三根针,最底下的一根针上有64个盘子,盘子大小不一,大的在下,小的在上。
寺庙里的僧人们每天都要把这64个盘子从最底下的一根针上移到另一根针上,中间可以借助第三根针。
据说完成这个任务需要几个世纪的时间。
汉诺塔的规则很简单,即每次只能移动一个盘子,且大盘子不能放在小盘子上面。
2. 汉诺塔的基本解法汉诺塔的基本解法是递归。
假设有n个盘子需要从A柱移动到C柱,可以分为以下三步:1.将A柱上面的n-1个盘子移动到B柱;2.将A柱上的最后一个盘子移动到C柱;3.将B柱上的n-1个盘子移动到C柱。
具体实现可以使用递归函数,代码如下:def hanoi(n, a, b, c):if n ==1:print(a, "->", c)else:hanoi(n-1, a, c, b)print(a, "->", c)hanoi(n-1, b, a, c)3. 汉诺塔的实践操作让学生自己动手操作汉诺塔,可以帮助他们更好地理解汉诺塔的规则和解法。
可以使用实物或者虚拟的汉诺塔游戏进行操作。
三、教学过程1. 导入介绍汉诺塔的起源和规则,引出汉诺塔的基本解法。
2. 讲解讲解汉诺塔的基本解法,包括递归函数的实现。
3. 操作让学生自己动手操作汉诺塔,可以分为以下几个步骤:1.准备三个柱子和若干个盘子,按照大小顺序从下往上依次放置在A柱上;2.使用递归函数将A柱上的所有盘子移动到C柱上;3.检查移动过程是否符合规则。
4. 总结总结汉诺塔的规则和基本解法,强调递归思想的重要性。
四、教学评价1.学生是否了解汉诺塔的起源和规则;2.学生是否掌握汉诺塔的基本解法;3.学生是否能够独立操作汉诺塔;4.学生的逻辑思维和耐心是否得到了培养。
汉诺塔课程设计

汉诺塔课程设计一、课程目标知识目标:1. 学生能理解汉诺塔的起源、规则及数学原理;2. 学生掌握汉诺塔问题解决的递归思想,并能运用到其他数学问题中;3. 学生能运用数学符号和表达式描述汉诺塔的移动过程。
技能目标:1. 学生能够运用所学知识解决汉诺塔问题,提高逻辑思维和问题解决能力;2. 学生通过合作探究,培养团队协作能力和沟通表达能力;3. 学生学会利用递归思想分析问题,提高数学建模能力。
情感态度价值观目标:1. 学生在探索汉诺塔问题的过程中,培养对数学的兴趣和好奇心,激发学习热情;2. 学生通过解决汉诺塔问题,体验成功的喜悦,增强自信心;3. 学生在合作探究中,学会尊重他人意见,培养包容、谦逊的品质;4. 学生认识到数学在现实生活中的应用,理解数学的价值。
课程性质:本课程为数学学科拓展课程,旨在通过汉诺塔问题的探究,培养学生的逻辑思维、问题解决和团队协作能力。
学生特点:学生处于初中阶段,具有一定的数学基础和逻辑思维能力,对新鲜事物充满好奇心,喜欢探索和挑战。
教学要求:教师需结合学生的特点,设计有趣、富有挑战性的教学活动,引导学生主动参与,充分调动学生的积极性和主动性。
在教学过程中,注重培养学生的逻辑思维、问题解决和团队协作能力,同时关注学生的情感态度价值观的培养。
通过本课程的学习,使学生能够在知识和能力上得到全面提升。
二、教学内容1. 汉诺塔的起源与规则:介绍汉诺塔的背景、发展历程及基本规则,使学生了解汉诺塔问题的历史背景和基本操作。
相关教材章节:数学游戏与趣味数学2. 汉诺塔的数学原理:讲解汉诺塔问题中的递归思想,引导学生发现规律,理解汉诺塔问题背后的数学原理。
相关教材章节:递归与数学问题3. 汉诺塔问题解决方法:教授解决汉诺塔问题的具体方法,如递归法、迭代法等,帮助学生掌握解决问题的技巧。
相关教材章节:算法与程序设计4. 汉诺塔问题拓展与应用:引导学生将汉诺塔问题与其他数学问题相联系,培养学生举一反三的能力。
校本课程《汉诺塔游戏》【教学设计】

校本课程《汉诺塔游戏》【教学设计】.doc教学设计:汉诺塔游戏研究内容:数学游戏“汉诺塔”第一课时研究目标:1.了解汉诺塔游戏的传说和基本规则。
2.在游戏中掌握汉诺塔游戏的基本规则,初步发现游戏中的规律。
3.发展归纳推理能力和逻辑思维能力。
4.体会与他人合作获得更多的成功体验。
研究重点:掌握汉诺塔游戏的基本规则,发现游戏中的规律。
研究难点:发展归纳推理能力和逻辑思维能力。
研究过程:课前活动:1.引入话题,了解学生喜欢的游戏。
2.播放黑猩猩玩游戏的视频,引出汉诺塔游戏。
一、认识XXX:1.介绍XXX的来历和相关信息。
2.介绍汉诺塔的各部分,包括托盘和三根柱子。
3.介绍汉诺塔游戏的规则,包括从一边到另一边、一次只能移动一个金片和大金片不能放在小金片上面。
二、动手实践玩游戏:1.从一个圆片开始研究,掌握游戏规则。
2.探究两个圆片的玩法,发现规律。
3.逐步增加圆片数量,练归纳推理和逻辑思维能力。
4.在合作中获得成功体验。
教学设计:汉诺塔游戏研究内容:数学游戏“汉诺塔”第一课时研究目标:1.了解汉诺塔游戏的传说和基本规则。
2.在游戏中掌握汉诺塔游戏的基本规则,初步发现游戏中的规律。
3.发展归纳推理能力和逻辑思维能力。
4.体会与他人合作获得更多的成功体验。
研究重点:掌握汉诺塔游戏的基本规则,发现游戏中的规律。
研究难点:发展归纳推理能力和逻辑思维能力。
研究过程:课前活动:1.引入话题,了解学生喜欢的游戏。
2.播放黑猩猩玩游戏的视频,引出汉诺塔游戏。
一、认识XXX:1.介绍XXX的来历和相关信息。
2.介绍汉诺塔的各部分,包括托盘和三根柱子。
3.介绍汉诺塔游戏的规则,包括从一边到另一边、一次只能移动一个金片和大金片不能放在小金片上面。
二、动手实践玩游戏:1.从一个圆片开始研究,掌握游戏规则。
2.探究两个圆片的玩法,发现规律。
3.逐步增加圆片数量,练归纳推理和逻辑思维能力。
4.在合作中获得成功体验。
请在A柱上放置两个圆片,并将它们移动到C柱上。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
攀枝花学院课程设计题目:汉诺塔演示程序设计院(系):年级专业:姓名:学号:指导教师:二〇〇九年十二月十四日攀枝花学院教务处制攀枝花学院本科学生课程设计任务书注:任务书由指导教师填写。
课程设计(论文)指导教师成绩评定表摘要汉诺塔(又称河内塔)问题是一个古典的数学问题,是一个用递归方法解题的典型例子。
问题是这样的:开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。
利用计算机图形学进行汉诺塔演示程序设计,是利用C语言绘图函数实现汉诺塔的递归算法图形界面演示过程。
通过C语言实现图形学的绘图,程序控制,以及区域填充,并根据汉诺塔的算法原理实现大小不同的盘子移动的全过程演示。
关键词汉诺塔,变换矩阵,种子填充算法,递归调用目录摘要 (I)1 需求分析 (1)1.1 需求概述 (1)1.2 需求环境 (1)1.3 功能描述 (2)2 概要设计 (3)2.1 程序功能模块 (3)2.2 程序流程图 (3)2.3 数据结构的设计 (4)3 详细设计 (5)3.1 程序初始化 (5)3.1.1 代码功能 (5)3.1.2 功能实现代码 (5)3.2 盘块的移动过程 (5)3.2.1代码功能 (5)3.2.2 功能实现代码 (5)3.3 递归函数 (6)3.3.1 流程图 (6)3.3.2 功能实现代码 (7)4 测试与运行 (8)结束语 (9)参考文献 (10)1 需求分析1.1 需求概述汉诺塔演示程序设计是计算机图形学中图形变换的内容之一。
而图形学中的图形变换的概念是由简单图形生成复杂图形,可用二维图形表示三维形体,甚至可以对静态图形经过快速变换而获得图形的动态显示效果。
其任务是研究各点坐标之间的变化规律。
而本次课程设计就是利用C语言以及图形函数实现汉诺塔的递归算法来进行其盘块移动的全过程显示。
在TC环境中要实现这样的功能,就要牵涉到图形设备接口的知识。
Windows图形设备接口是为与设备无关的图形设计的,是Windows系统的重要组成部分,负责系统与用户或绘图程序之间的信息交换,并控制在输出设备上显示图形或文字。
应用程序必须通知图形设备接口来加载特定的设备驱动,一旦驱动得以加载,就可以准备应用设备进行相关的操作这些任务都要通过创建和维护设备描述表来完成。
在实现汉诺塔演示程序设计时,是利用坐标系统而得到的,而在Windows应用程序中有两种坐标系统:设备坐标系统和逻辑坐标系统。
其中设备坐标系统中又有三种相互独立的坐标系统:屏幕坐标系统、窗口坐标系统和用户区坐标系统。
这些坐标系统均以像素点来表示度量的单位。
屏幕坐标系统使用整个屏幕作为坐标区域,原点为屏幕原点。
窗口坐标系统使用了边界在内的应用程序的窗口作为坐标区域。
窗口边界的左上角是坐标系统的原点。
用户坐标系统是最经常使用的坐标系统。
用户区是窗口工作区,不包括窗口边界、菜单条及滚动条等。
用户一般只需操作应用程序的用户区,因此用户区坐标系统对大多数应用程序都是适用的。
在计算机机图形学中窗口的定义是指在用户坐标系中定义的确定显示内容的一个矩形区域,只有在这个区域内的图形才能在设备坐标系下输出,而窗口外的部分则被截掉。
视区是在设备坐标中定义的一个区域,用于输出窗口中的图形。
视区决定了窗口中的图形要显示于屏幕上的位置的大小。
1.2 需求环境本课程设计需要的设备为硬件要求和软件配置要求具体要求如下:①硬件要求:一台计算机。
②软件配置:WINDOWS、C/VC++6.0。
1.3 功能描述本课程设计是利用图形学的相关知识在TC或Visual C++环境下利用递归算法实现汉诺塔演示的全过程,其基本的功能描述如下:①绘制三个塔座。
②在第一个塔座上绘制一个矩形(一个矩形代表一个盘子),栈的高度递增,则矩形的大小递减。
③为矩形填充颜色,盘子的颜色代码为栈顶盘子代号加1。
④通过鼠标或者键盘控制移动矩形,将所有的矩形借助第二个塔座从第一个塔移到第三个塔,并显示每次移动盘子的步骤。
2 概要设计2.1 程序功能模块由需求分析知,本次课程设计是用递归算法实现汉诺塔演示程序,故其功能模块分为:程序初始化模块,盘块移动模块,递归调用模块三个模块。
(可以把功能模块用图画出来)2.2 程序流程图图2.1 程序流程图2.3 数据结构的设计根据需求分析将用递归算法实现汉诺塔演示过程的数据结构的设计如下:①用一个结构体数组struct M{ int data[15]; int top; }num[3];来定义三个塔座的高度,以及每个塔座存放每个盘块的代号。
②定义两个变量cx,cy来分别表示程序演示步骤的横坐标和纵坐标的变化。
③用函数void move(char x,char y,struct M num[3]);来表示盘块移动的具体过程;并在move函数中调用函数void hanoi(char x,char y,char z,int n,struct M num[3]);来表示递归调用的过程;最后用一个初始化函数void Init(void)来对整个程序进行初始化,并调用move函数。
3 详细设计3.1 程序初始化3.1.1代码功能在初始化程序中,主要实现的是绘制塔座标志,绘制盘块,设置塔座标志颜色,以及填充盘块颜色等。
3.1.2 功能实现代码①绘制塔座的代码如下:setcolor(GREEN);/*设置塔座标志颜色*/outtextxy(180,450,"press any key to continue");settextstyle(0,0,2);outtextxy(90,420,"A"); /*塔座标志*/outtextxy(240,420,"B");outtextxy(390,420,"C");②绘制矩形的代码如下:setfillstyle(SOLID_FILL,color);/*设置填充颜色*/bar(100-(33-3*num[0].data[num[0].top]),400-20*i-8,100+(33-3*num[0].data[num[0].top]),400-20*i+8); /*画矩形*/3.2 盘块的移动过程3.2.1代码功能盘块的移动实际上是一个出栈和入栈的过程,盘块出栈后便将原来的地方涂黑,本块代码主要是实现显示汉诺塔的具体移动的演示过程及移动步骤。
3.2.2 功能实现代码void move(char x,char y,struct M num[3])/*移动的具体过程*/{int i;char num1[3],num2[3];sprintf(num1,"%c",x-32);/*将小写变成大写,并转换成字符串输出*/ sprintf(num2,"%c",y-32);setfillstyle(SOLID_FILL,BLACK);/*把原来的地方移去涂黑*/ setcolor(YELLOW);outtextxy(20+cx,30+cy,num1);/*输出移动过程,每次移动后纵坐标加30*/ outtextxy(62+cx,30+cy,"-->");outtextxy(130+cx,30+cy,num2);cy+=30;if(cy>210) /*横坐标换行后另起一列*/{ cx+=145;cy=0;/*纵坐标重新回到顶部开始显示下一列的演示步骤 */}settextstyle(0,0,2);setfillstyle(SOLID_FILL,BLACK);/*把原来的地方移去涂黑*/bar(100+150*(x-97)-(33-3*num[x-97].data[num[x-97].top]),400-20*num [x-97].top-8,100+150*(x-97)+(33-3*num[x-97].data[num[x-97].top]),400-20*num[x-97].top+8);num[y-97].to p++;/*入栈,目标点的top加1*/num[y-97].data[num[y-97].top]=num[x-97].data[num[x-97].top];/*在目标点盘子的代号与源点盘子的代号相同*/num[x-97].top--;/*出栈,原来地方的top减1*/setfillstyle(SOLID_FILL,num[y-97].data[num[y-97].top]+1);/*盘子颜色代码是栈顶盘子代号加1*/bar(100+150*(y-97)-(33-3*num[y-97].data[num[y-97].top]),400-20* num[y-97].top-8,100+150*(y-97)+(33-3*num[y-97].data[num[y-97].top]), 400-20*num[y-97].top+8);getch( );/*自己按键盘来进行手动控制*/3.3 递归函数3.3.1 流程图根据概要设计中的实现递归函数过程的流程图设计如图3.3所示:图3.1 递归函数3.3.2 功能实现代码汉诺塔演示程序设计主要是利用递归调用函数实现。
函数调用hanoi( one,two,three,n,num)表示将n个盘块从A座移到C座的过程,函数调用move(one,three,num)是将1个盘块从A座移到C座的过程。
其具体代码实现如下:if(n==1)move(one,three,num);/*如果盘子为1,将这个盘子从塔座A移动到塔座C*/ else{hanoi(one,three,two,n-1,num);/*将塔座A的前n-1个盘子移到塔座B*/ move(one,three,num);/*将塔座A的第n个盘子移到塔座C*/hanoi(two,one,three,n-1,num); /*将塔座B的n-1个盘子移到塔座C*/}4 测试与运行由需求分析可知,汉诺塔演示程序设计是在TC环境下利用递归算法实现大小不同的盘子移动的全过程演示。
本程序已调试成功并实现了其功能,当移动盘块数为3时,其运行结果如下:图4.1 盘块移动前图4.2 盘块移动中图4.3 盘块移动后结束语在这次课程设计中,我基本上完成了任务,通过递归调用算法实现了汉诺塔的演示过程,以及盘块移动的具体步骤的显示,基本上达到了此次课程设计的要求。
但是它的不足也是显而易见的,在盘块移动的过程中用方向键移动时会一次显示两个步骤,这给用户的实际操作带来了一定的困难,所以这是值得改进的地方,整个程序的功能有待进一步完善,让更多的方法能得以实现。