汉诺塔 面向对象课程设计

合集下载

汉诺塔课程设计

汉诺塔课程设计

汉诺塔课程设计一、教学内容: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柱。

c语言课程设计--汉诺塔

c语言课程设计--汉诺塔

课程设计报告课程设计名称:C语言课程设计课程设计题目:汉诺塔问题求解演示院(系):计算机学院专业:计算机科学与技术班级:学号:姓名:指导教师:完成时间:2010年3月18日沈阳航空航天大学课程设计报告目录第1章需求分析 (3)1.1 课程设计的题目及要求 (3)1.2 总体分析 (3)第2章系统设计 (4)2.1 主要函数和函数功能描述 (4)2.2 功能模块图 (4)第3章详细设计 (5)3.1主函数流程图 (5)3.2各功能模块具体流程图 (6)第4章调试分析 (10)4.1.调试初期 (10)4.2.调试中期 (10)4.3.调试后期 (10)参考文献 (11)附录 (12)第1章需求分析1.1 课程设计的题目及要求题目:汉诺塔问题求解演示内容:在屏幕上绘出三根针,其中一根针上放着N个从大到小的盘子。

要求将这些盘子从这根针经过一个过渡的针移到另外一根针上,移动的过程中大盘子不能压在小盘子上面,且一次只能移动一个盘子。

要求形象直观地演示盘子移动的方案和过程。

要求:1)独立完成系统的设计,编码和调试。

2)系统利用C语言实现。

3)安照课程设计规范书写课程设计报告。

4)熟练掌握基本的调试方法,并将程序调试通过1.2总体分析本题目需要使用C语言绘制图形,所以需要turbo C,需要绘图函数,而汉诺塔的函数属于经典的函数,在书本上都学习过,所以这个题目的难点在于需要绘制汉诺塔图形。

攻克这一点其他的问题都迎刃而解。

但是我个人以前也没有学过一些关于turboC 方面的知识。

所以我将重点放在了对#include<graphics.h>下的一系列绘图函数的研究与应用,对屏幕上的图像坐标分析是一个难点。

其中用到了graphics.h头文件中的bar, outtextxy, setfillstyle,closegraph函数。

进行了画图(利用bar函数进行画框的操作),填充颜色(利用setfillstyle函数填充白色和黑色,以分辨图形与图形背景),在特定位置输出特定字符等操作(利用outtextxy函数)。

汉诺塔游戏课程设计

汉诺塔游戏课程设计

汉诺塔游戏课程设计一、课程目标知识目标:1. 学生能理解汉诺塔游戏的起源、规则及数学原理。

2. 学生能掌握递归算法的基本概念及其在汉诺塔游戏中的应用。

3. 学生能运用数学归纳法推导汉诺塔游戏的步数与盘子数之间的关系。

技能目标:1. 学生能够运用所学知识,独立设计并解决汉诺塔游戏的不同层次问题。

2. 学生能够通过小组合作,提高问题解决能力和团队协作能力。

3. 学生能够运用信息技术工具,进行汉诺塔游戏模拟和数据分析。

情感态度价值观目标:1. 学生对数学产生兴趣,认识到数学与游戏的紧密联系,提高学习数学的积极性。

2. 学生在游戏中培养逻辑思维能力和创新精神,增强自信心和自主探究意识。

3. 学生通过合作与交流,培养团队精神,学会尊重他人,形成积极向上的人生态度。

课程性质:本课程以汉诺塔游戏为载体,结合数学知识和算法,培养学生的逻辑思维能力、问题解决能力和团队协作能力。

学生特点:五年级学生具有一定的数学基础和逻辑思维能力,对游戏具有浓厚兴趣,但可能对递归算法等抽象概念理解有限。

教学要求:结合学生特点,教师需采用生动有趣的教学方法,引导学生主动探究,注重培养学生的实践操作能力和团队协作精神。

通过本课程的学习,使学生将所学知识应用于实际情境,提高学生的综合素养。

二、教学内容1. 汉诺塔游戏背景介绍:包括汉诺塔的起源、发展及其在数学游戏中的地位。

相关教材章节:数学游戏与趣味数学2. 汉诺塔游戏规则及数学原理:讲解汉诺塔的游戏规则,引导学生发现汉诺塔移动盘子过程中的数学原理。

相关教材章节:组合数学基本概念3. 递归算法及其在汉诺塔游戏中的应用:介绍递归算法的概念,通过实例演示递归算法在汉诺塔游戏中的运用。

相关教材章节:算法与程序设计4. 汉诺塔游戏步数与盘子数之间的关系:运用数学归纳法,推导汉诺塔游戏中盘子数与步数之间的关系。

相关教材章节:数学归纳法5. 汉诺塔游戏实践操作:组织学生进行汉诺塔游戏实践,培养学生动手操作能力和问题解决能力。

c语言课程设计汉诺塔

c语言课程设计汉诺塔

c语言课程设计汉诺塔一、教学目标本节课的教学目标是让学生掌握汉诺塔问题的解法,理解其背后的算法思想,培养逻辑思维能力和编程能力。

具体分为以下三个部分:1.知识目标:使学生了解汉诺塔问题的定义、解法和算法思想,理解递归算法的原理及其在解决汉诺塔问题中的应用。

2.技能目标:培养学生运用C语言实现汉诺塔问题的解决方案,提高编程实践能力。

3.情感态度价值观目标:培养学生独立思考、合作交流的学习习惯,增强对计算机科学的兴趣和热情。

二、教学内容本节课的教学内容主要包括以下几个部分:1.汉诺塔问题的定义和解法:介绍汉诺塔问题的背景,讲解其解法及步骤。

2.递归算法的原理:讲解递归算法的基本概念、特点及其在解决汉诺塔问题中的应用。

3.C语言实现汉诺塔问题:引导学生运用C语言编写汉诺塔问题的解决方案,并进行调试和优化。

4.算法分析和改进:分析汉诺塔问题的算法复杂度,探讨如何优化算法性能。

三、教学方法为了达到本节课的教学目标,采用以下几种教学方法:1.讲授法:讲解汉诺塔问题的定义、解法和递归算法的原理。

2.案例分析法:分析实际案例,让学生了解递归算法在解决汉诺塔问题中的应用。

3.实验法:引导学生动手实践,用C语言实现汉诺塔问题的解决方案。

4.讨论法:学生进行小组讨论,分享算法优化思路,培养合作交流能力。

四、教学资源本节课的教学资源包括以下几个方面:1.教材:选用《C程序设计》等相关教材,为学生提供理论知识的学习参考。

2.参考书:推荐《算法导论》等参考书籍,帮助学生深入了解算法原理。

3.多媒体资料:制作PPT、教学视频等多媒体资料,辅助学生理解和记忆知识点。

4.实验设备:为学生提供计算机、编程环境等实验设备,方便学生动手实践。

五、教学评估本节课的教学评估主要包括以下几个方面:1.平时表现:评估学生在课堂上的参与度、提问回答等情况,占比20%。

2.作业:评估学生完成的汉诺塔问题相关练习,包括C语言代码编写和调试,占比30%。

汉诺塔牌课课程设计

汉诺塔牌课课程设计

汉诺塔牌课课程设计一、教学目标本课程的学习目标包括以下三个方面:1.知识目标:通过本课程的学习,学生需要掌握汉诺塔牌的基本概念、规则和策略,了解其背后的数学原理和逻辑思维。

2.技能目标:学生能够运用汉诺塔牌的规则和策略进行游戏,提高解决问题的能力,培养逻辑思维和抽象思维。

3.情感态度价值观目标:通过汉诺塔牌的学习和游戏,学生能够培养团队合作意识,增强自信心,提高自我认知和自我激励能力。

二、教学内容本课程的教学内容主要包括以下几个部分:1.汉诺塔牌的基本概念和规则,包括牌的种类、牌面数值和游戏的目标。

2.汉诺塔牌的策略和技巧,包括牌序的安排、牌型的组合和游戏的节奏控制。

3.汉诺塔牌的数学原理和逻辑思维,包括排列组合、递归思想和贪心算法。

4.汉诺塔牌的游戏实践,包括个人游戏和团队游戏的规则和技巧。

三、教学方法为了实现本课程的教学目标,我们将采用以下几种教学方法:1.讲授法:通过讲解汉诺塔牌的基本概念、规则和策略,使学生了解和掌握相关知识。

2.案例分析法:通过分析典型的汉诺塔牌游戏案例,使学生理解和运用相关策略和技巧。

3.实验法:通过实际操作汉诺塔牌游戏,使学生锻炼和提高解决问题的能力。

4.小组讨论法:通过团队合作和讨论,使学生培养团队合作意识和沟通交流能力。

四、教学资源为了支持本课程的教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:选择一本适合学生年级和知识深度的汉诺塔牌教材,作为学生学习的主要参考资料。

2.多媒体资料:制作相关的PPT、视频等多媒体资料,以便于学生更直观地理解和掌握知识。

3.实验设备:准备足够的汉诺塔牌游戏道具,以便于学生进行实际操作和实验。

4.在线资源:利用互联网资源,提供相关的学习、论坛和在线游戏,以便于学生自主学习和交流。

五、教学评估本课程的评估方式包括以下几个方面:1.平时表现:通过观察学生在课堂上的参与程度、提问回答和小组讨论的表现,评估学生的学习态度和积极性。

java课程设计方案Hannoi汉诺塔游戏

java课程设计方案Hannoi汉诺塔游戏

HUBEINORMALUNIVERSITYJava程序设计Hannoi塔游戏论文题目Hannoi塔游戏学生指导教师所在院系专业名称完成时间摘要《JAVA语言实用教程》是计算机相关专业的必修专业基础课程,其实践性、应用性很强。

实践教案环节是必不可少的一个重要环节。

本课程的程序设计专题实际是计算机相关专业学生学习完《JAVA语言实用教程》课程后,进行的一次全面的综合训练,JAVA语言实用教程的设计目的是加深对理论教案内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。

目录一、课程设计任务及要求31、课程设计任务32、设计要求3二、需求分析41、系统需求分析42、系统概述53、系统运行环境6三、设计思路6概要设计7四、详细设计7package Hannoi。

7HannoiWindow类7AutoMoveDisc类15Disc类21HandleMouse类22Tower类27TowerPoint 类31五、运行调试与分析讨论33六、设计体会与小结361.设计体会362.小结36参考文献37致谢37一、课程设计任务及要求1、课程设计任务设计GUI界面的Hannoi塔游戏,用户可以通过拖动鼠标移动各个塔上的盘子,程序也可以自动演示盘子的移动过程。

2、设计要求(1)有三个表示塔的对象,分别命名为A、B和C。

A塔上有若干个盘子,盘子的大小不等,并按着大小顺序依次摆放在A 塔上,大盘在下,小盘在上。

用户可以用鼠标拖动盘子,把A 塔上的盘子全部移动到另外两个塔中的任何一个塔上。

要求每次只能移动一个盘子,在任何时候不允许大盘压在小盘的上面。

(2)用户也可以选择让程序自动演示。

选择自动演示后,程序将以动画形式演示把A塔上的盘子全部移到C塔的过程,并将移动过程以文本形式显示在一个文本区中。

(3)可以由用户自己设置盘子数量和盘子大小。

汉诺塔演示程序实验报告参考模板

汉诺塔演示程序实验报告参考模板

课程设计报告课程名称:高级语言课程设计课程代码: 07300561设计内容:汉诺塔演示系统专业:计算机科学与技术2012 年12月16日目录1.课程设计目的 (3)1.1 内容简介 (3)1.2 功能实现 (3)2.课程设计题目描述和要求 (3)2.1 描述 (3)2.2 要求 (3)3.课程设计报告内容 (3)3.1 内容概要 (3)3.2 功能实现 (3)3.3 程序流程图 (3)3.4程序截图 (3)3.5详细内部设计介绍4.总结5小组分工情况1.课程设计目的随着社会的进步我们用来娱乐的游戏世界也越来越丰富,越来越复杂。

本程序的汉诺塔游戏不但包括了游戏最基本的功能,而且还能培养用户的逻辑思维能力,本游戏实现的是一个自动演示搬移汉诺塔的功能,此功能能够帮助初次接触此游戏的用户了解此游戏的玩法。

2.课程设计题目描述和要求2.1 描述本程序是一个能够实现汉诺塔搬移演示功能的MFC程序2.2要求实现用图形界面,画出三个杆和最多七个矩形盘子,形成三个塔,分别为A、B、C塔,同时盘子数目可以人工进行设定,让程序自动的完成把A塔上的盘子搬移到C塔上的过程,实现自动演示。

3.课程设计报告内容3.1内容概要有三个表示塔的对象,分别命名为A、B、C塔,A上有若干个(不超过七个)盘子,盘子大小不等,并按照大小顺序依次摆放在A塔上,大盘在下小盘在上,程序实现自动演示,把A塔上的盘子依次全部搬移到C塔上,要求每次只能移动一个盘子并且在任何时候不允许大盘子在小盘子之上,并且在演示过程中可以实现暂停功能。

3.2功能实现设计图形用户界面的MFC程序,用户可以通过单击汉诺塔界面中提供的按钮,进行盘子数量的设置并且单击开始按钮让程序自动演示A塔上盘子移动到C塔上的过程,并且在程序运行过程中可随时单机程序界面中提供的按钮实现游戏暂停,重新开始游戏等功能。

3.3程序流程图3.4程序截图1、开始游戏:为了更好地人机交互,在执行游戏时会弹出一个欢迎的对话框。

Hannoi塔(汉诺塔)--Java课程设计报告

Hannoi塔(汉诺塔)--Java课程设计报告

Java课程设计报告题目汉诺塔所在院系软件学院学生姓名邓小文专业土木+软件工程班级08-1班学号14号2010年7月17日一、总体设计1.本系统的主要功能(1)本软件是汉诺塔游戏;(2)可以实现计时功能;(3)游戏结束时记录排名;(4)在玩游戏的同时还可以欣赏歌曲;(5)不知如何玩时可以实现自动演示;2.系统包含的类及类之间的关系为了实现本软件的各项功能,对要在本软件中需要用到的源文件进行总体设计。

本系统共包括12个java 源文件。

1.各个类之间的关系如图1所示。

Hel TowerHannoiTower Musi Disk TowerPoint TimeRecord ShowRecor Peopl图1-1各个类之间的关系2.java 源文件及其功能,如表所示。

表1java 源文件及其功能二、详细设计为了实现总体设计中的各个类之间的接口连接,使玩家能够顺畅的使用本软件进行游戏,考虑用详细设计来给玩家一一介绍。

以下是对本软件的详细设计:序号文件名主要功能备注1Tower 用户可以在主窗口选择开始搬运盘子或自动演示。

程序默认的情况是手动搬运盘子2HannoiTower 该文件生成的类负责创建Hannoi塔,汉诺塔由A、B、C 三个塔组成,可以用鼠标搬运各个塔上的盘子。

3Disk该文件生成的类负责创建盘子对象4TowerPoint 该文件生成的类负责为Hannoi 塔创建塔点对象,即盘子放置的位置。

5Time 记录玩家完成游戏所需的时间6People 记录成绩能够排进排行榜的选手7About 关与本软件的制作信息8Help 帮助主题9Record 记录10Music 该文件负责生成一款播放器,可以选取玩家自己喜欢的歌曲欣赏。

播放的歌曲需要是“wav”等形式的。

11ShowRecord该文件用来实现玩家看英雄榜的情况。

1.主类Tower(1)该类用到的主要成员变量见表5表5类Tower主要成员变量成员变量描述变量类型名称汉诺塔对象HannoiTower tower塔名数组Char[]TowerName盘子数目int盘子数目p float盘子从上到下缩小的比例盘子大小Int盘宽,盘高自动演示线程Thread Threadfile初级,file高级File初级高级排行榜记录file1,file2File规则帮助文本自动演示文字显示搬运过程TextArea信息条背景音乐Music music菜单条JMenuBar bar菜单JMenu fileMenu1,fileMenu2,fileMenu3菜单项JMenuItem 开始游戏,重新开始,自动演示,英雄榜,退出,背景音乐,帮助主题,关于汉诺塔;显示时间JTextField显示时间(2)方法见表6表6类Tower主要方法名称功能备注Tower创建窗口构造方法(3)源代码见文件Tower.java2.类HannoiTower(1)该类用到的主要成员变量见表7表7类HannoiTower主要成员变量成员变量描述变量类型变量名位置int X,Yp float盘子从上到下缩小的比例搬运坐标int Shartx,Starty,Starti盘子数目int盘子数目塔名char Towername[]时间int spendtime塔点TowerPoint point[]移动状态boolean move盘子Disk盘子[]显示移动信息TextArea信息条用来计时Time计时计时器是否启动boolean计时器是否启动(2)方法见表8表8类HannoiTower主要方法名称功能(3)源代码见文件HannoiTower.java3.类TowerPoint(1)该类用到的主要成员变量见表9表9类TowerPoint主要成员变量成员变量描述变量类型变量名位置Int X,Yboolean有盘子查看是否有盘子创建盘子Disk盘子创建塔HannoiTower con (2)方法见表10表10类TowerPoint主要方法名称功能是否有盘子返回“有盘子”变量的状态(3)源代码见文件TowerPoint.java4.类Disk(1)该类用到的主要成员变量见表11表11类Disk主要成员变量成员变量描述变量类型变量名数目int number 上方有无盘子boolean上方有盘(2)方法见表12表12类Disk主要方法名称功能get上方有盘得到“上方有盘”set上方有盘设置“上方有盘”getNumber得到盘子号(3)源代码见文件Disk.java5.类Time(1)该类用到的主要成员变量见表13表13类Time主要成员变量成员变量描述变量类型变量名时间int time计时器javax.swing.Timer计时器显示时间JTextField显示时间计时器是否启动boolean计时器是否启动(2)方法见表14表14类Time主要方法名称功能actionPerformed处理ActionEvent事件begin设置开始计时rebegin设置重新开始计时pause设置停止计时clear设置计时清零且不显示(3)源代码见文件Time.java6.类Music(1)该类用到的主要成员变量见表15表15类Music主要成员变量成员变量描述变量类型变量名线程Thread thread音频对象AudioClip clip按钮Button buttonPlay,buttonLoop,buttonStop选择框Choice choice面板Panel p1,p2盒式容器Box baseBox,boxV1,boxV2标签Label标签1,标签2(2)方法见表16表16类Music主要方法名称功能Music创建背景音乐对话框run启动线程actionPerformed处理ActionEvent事件(3)源代码见文件Music.java7.类People(1)该类用到的主要成员变量见表17表17类People主要成员变量成员变量描述变量类型变量名测试者姓名String name测试所用时间int time(2)方法见表18表18类People主要方法名称功能People获取测试者姓名getTime获取测试所用时间(3)源代码见文件People.java8.类Record(1)该类用到的主要成员变量见表19表19类Record主要成员变量变量类型变量名功能int time记录游戏所用时间int n判断级别JTextFile yourName记录测试者的名字File gradeFile存放成绩的文件JButton确定,取消是否保存成绩的按钮(2)方法见表20表20类Record主要方法名称功能Record创建保存成绩窗口setTime设置时间setFile设置文件actionPerformed处理ActionEvent事件(3)源代码见文件Record.java9.类ShowRecord(1)该类用到的主要成员变量见表21表21类ShowRecord主要成员变量变量类型变量名功能File gradeFile存放成绩的文件JButton确定,清除按钮JTextArea Show显示成绩的区域(2)方法见表22表22类ShowRecord主要方法名称功能ShowRecord创建显示成绩窗口actionPerformed处理ActionEvent事件(3)源代码见文件ShowRecord.java10.类Help(1)该类用到的主要成员变量见表25表25类Help主要成员变量变量类型变量名功能TextArea text存放帮助主题的文件FileReader f帮助主题的文本文档(2)方法见表26表26类Help主要方法名称功能Help创建帮助窗口三、运行效果1、将10个java文件打包保存到同一个文件夹中,并且分别编译生成相应的字节码文件。

汉诺塔课程设计

汉诺塔课程设计

汉诺塔课程设计一、课程目标知识目标:1. 学生能理解汉诺塔的起源、规则及数学原理;2. 学生掌握汉诺塔问题解决的递归思想,并能运用到其他数学问题中;3. 学生能运用数学符号和表达式描述汉诺塔的移动过程。

技能目标:1. 学生能够运用所学知识解决汉诺塔问题,提高逻辑思维和问题解决能力;2. 学生通过合作探究,培养团队协作能力和沟通表达能力;3. 学生学会利用递归思想分析问题,提高数学建模能力。

情感态度价值观目标:1. 学生在探索汉诺塔问题的过程中,培养对数学的兴趣和好奇心,激发学习热情;2. 学生通过解决汉诺塔问题,体验成功的喜悦,增强自信心;3. 学生在合作探究中,学会尊重他人意见,培养包容、谦逊的品质;4. 学生认识到数学在现实生活中的应用,理解数学的价值。

课程性质:本课程为数学学科拓展课程,旨在通过汉诺塔问题的探究,培养学生的逻辑思维、问题解决和团队协作能力。

学生特点:学生处于初中阶段,具有一定的数学基础和逻辑思维能力,对新鲜事物充满好奇心,喜欢探索和挑战。

教学要求:教师需结合学生的特点,设计有趣、富有挑战性的教学活动,引导学生主动参与,充分调动学生的积极性和主动性。

在教学过程中,注重培养学生的逻辑思维、问题解决和团队协作能力,同时关注学生的情感态度价值观的培养。

通过本课程的学习,使学生能够在知识和能力上得到全面提升。

二、教学内容1. 汉诺塔的起源与规则:介绍汉诺塔的背景、发展历程及基本规则,使学生了解汉诺塔问题的历史背景和基本操作。

相关教材章节:数学游戏与趣味数学2. 汉诺塔的数学原理:讲解汉诺塔问题中的递归思想,引导学生发现规律,理解汉诺塔问题背后的数学原理。

相关教材章节:递归与数学问题3. 汉诺塔问题解决方法:教授解决汉诺塔问题的具体方法,如递归法、迭代法等,帮助学生掌握解决问题的技巧。

相关教材章节:算法与程序设计4. 汉诺塔问题拓展与应用:引导学生将汉诺塔问题与其他数学问题相联系,培养学生举一反三的能力。

汉诺塔课程设计

汉诺塔课程设计

汉诺塔课程设计一、课程目标知识目标:1. 学生能理解汉诺塔游戏的起源、规则及数学原理。

2. 学生掌握汉诺塔问题中的递归思想,能运用数学归纳法解决相关问题。

3. 学生了解汉诺塔问题在计算机科学中的应用。

技能目标:1. 学生能运用所学知识解决汉诺塔问题,提高逻辑思维和问题解决能力。

2. 学生通过团队合作,学会沟通与协作,共同完成汉诺塔挑战任务。

3. 学生能运用递归思想设计算法,解决类似汉诺塔的其他问题。

情感态度价值观目标:1. 学生培养对数学和计算机科学的兴趣,激发探索精神。

2. 学生在汉诺塔游戏中体验挑战与成功,增强自信心和毅力。

3. 学生通过汉诺塔问题,认识到数学与生活、科技的紧密联系,提高对数学价值的认识。

课程性质:本课程为数学与计算机科学跨学科课程,结合实际操作,培养学生的逻辑思维、问题解决和团队合作能力。

学生特点:五年级学生具有一定的数学基础和逻辑思维能力,对新鲜事物充满好奇心,喜欢挑战和团队合作。

教学要求:结合汉诺塔问题,注重引导学生发现数学规律,运用递归思想解决问题,提高学生的实践操作能力和团队合作精神。

在教学过程中,关注学生的个体差异,鼓励学生积极参与,充分挖掘学生的潜能。

通过课程目标的分解,实现对学生学习成果的评估和反馈。

二、教学内容1. 汉诺塔游戏介绍:讲解汉诺塔的起源、规则以及与数学的关系。

- 教材章节:数学游戏与逻辑思维- 内容:汉诺塔的起源、规则、数学原理介绍2. 汉诺塔问题的数学原理:引导学生探究汉诺塔问题中的递归思想。

- 教材章节:递归与数学归纳法- 内容:递归定义、数学归纳法、汉诺塔问题中的递归应用3. 汉诺塔问题的解决策略:教授如何运用递归思想解决汉诺塔问题。

- 教材章节:算法与程序设计- 内容:递归算法设计、汉诺塔问题求解步骤、编程实践4. 汉诺塔挑战任务:设置不同难度的汉诺塔问题,让学生分组合作解决。

- 教材章节:团队协作与问题解决- 内容:团队合作、问题分析、解决方案设计、成果展示5. 汉诺塔在计算机科学中的应用:介绍汉诺塔问题在计算机科学中的实际应用。

汉诺塔问题课程设计

汉诺塔问题课程设计

汉诺塔问题课程设计一、课程目标知识目标:1. 学生能理解汉诺塔问题的起源、规则及数学原理。

2. 学生掌握递归思想,并能运用递归算法解决汉诺塔问题。

3. 学生能运用数学归纳法推导汉诺塔问题的解法。

技能目标:1. 学生能够运用计算机编程语言实现汉诺塔问题的求解。

2. 学生能够通过实际操作,培养逻辑思维和问题解决能力。

3. 学生能够与他人合作探讨问题,提高沟通与协作能力。

情感态度价值观目标:1. 学生对数学问题产生浓厚的兴趣,增强对数学学科的学习信心。

2. 学生培养面对困难勇于挑战、善于思考的良好品质。

3. 学生通过解决汉诺塔问题,认识到数学知识在实际生活中的应用价值。

课程性质:本课程为信息技术与数学学科相结合的实践课程,以汉诺塔问题为载体,培养学生逻辑思维和问题解决能力。

学生特点:学生处于初中阶段,具有一定的计算机操作能力和数学基础,对新鲜事物充满好奇。

教学要求:教师应注重引导学生通过自主探究、合作学习的方式,将所学知识应用于实际问题的解决中,达到学以致用的目的。

同时,关注学生情感态度价值观的培养,提高学生的综合素质。

在教学过程中,将课程目标分解为具体的学习成果,便于教学设计和评估。

二、教学内容1. 汉诺塔问题背景介绍:引导学生了解汉诺塔问题的起源、发展及数学原理。

相关教材章节:数学思维训练篇第一章第二节《递归与汉诺塔问题》。

2. 递归算法讲解:讲解递归的概念、递归算法的设计及汉诺塔问题中的递归应用。

相关教材章节:计算机科学篇第二章第五节《递归算法及其应用》。

3. 汉诺塔问题求解:引导学生运用递归算法解决汉诺塔问题,通过数学归纳法推导汉诺塔问题的解法。

相关教材章节:数学思维训练篇第一章第三节《汉诺塔问题的数学解法》。

4. 计算机编程实践:指导学生运用计算机编程语言(如Python、C++等)实现汉诺塔问题的求解。

相关教材章节:计算机科学篇第三章第一节《编程基础及实践》。

5. 案例分析与讨论:分析汉诺塔问题在实际生活中的应用,提高学生学以致用的能力。

01-C++课程设计任务书(汉诺塔)

01-C++课程设计任务书(汉诺塔)

北方软件学院
课程设计任务书
专业名称:计算机科学与技术(软件工程)
课程名称:面向对象程序设计与C++
设计题目:汉诺塔
起止时间:2011年12月21日至2011年12月30日
问题描述
通过本课题设计与实现,掌握对类、结构、菜单的设计以及文件的存储、读取等操作,培养学生综合利用C++语言进行程序设计的能力,主要是培养学生对模块化设计思想的理解,合理划分函数功能及参数设计。

基本要求
所有的图形都以字符堆砌而成,根据汉诺塔的特性,模拟实现移动过程;
本程序模拟5个盘子即可;
汉诺塔的移动算法见教材133页。

实现提示
1、编程以基于字符界面的控制台应用程序来实现;
2、执行完某个功能后,重新显示该菜单,可将菜单的显示放置到循环结构
中;
3、使用类来实现所有的方法,建议绘制盘子写成方法,根据自定义盘子的
大小对其进行调用,注重函数的重用机制,优化其绘制方法。

|
|
_|_
_|_|_|_
__|___|___|__
_|______|______|___
选作内容
盘子的数量可以自定义;
学生姓名:学号:
指导教师:年月日。

07141326汉诺塔-课程设计

07141326汉诺塔-课程设计

07141326汉诺塔-课程设计汉诺塔课程设计报告⽬录⼀、需求分析 (3)⼆、概要设计 (4)三、详细设计 (6)四、测试与分析 (7)五、总结 (7)六、附录:源程序清单 (8)⼀、需求分析1.1问题描述汉诺塔(⼜称河内塔)问题是印度的⼀个古⽼的传说。

开天辟地的神勃拉玛在⼀个庙⾥留下了三根⾦刚⽯的棒,第⼀根上⾯套着64个圆的⾦⽚,最⼤的⼀个在底下,其余⼀个⽐⼀个⼩,依次叠上去,庙⾥的众僧不倦地把它们⼀个个地从这根棒搬到另⼀根棒上,规定可利⽤中间的⼀根棒作为帮助,但每次只能搬⼀个,⽽且⼤的不能放在⼩的上⾯。

这是⼀个著名的问题,⼏乎所有的教材上都有这个问题。

由于条件是⼀次只能移动⼀个盘,且不允许⼤盘放在⼩盘上⾯,所以64个盘的移动次数是:18,446,744,073,709,551,615这是⼀个天⽂数字,若每⼀微秒可能计算(并不输出)⼀次移动,那么也需要⼏乎⼀百万年。

我们仅能找出问题的解决⽅法并解决较⼩N值时的汉诺塔,但很难⽤计算机解决64层的汉诺塔。

后来,这个传说就演变为汉诺塔游戏:1.有三根杆⼦A,B,C。

A杆上有若⼲圆盘2.每次移动⼀块圆盘,⼩的只能叠在⼤的上⾯3.把所有圆盘从A杆全部移到C杆上经过研究发现,汉诺塔的破解很简单,就是按照移动规则向⼀个⽅向移动圆盘:如3阶汉诺塔的移动:A→C,A→B,C→B,A→C,B→A,B→C,A→C此外,汉诺塔问题也是程序设计中的经典递归问题。

将n个盘⼦从a座移动到c座可以分解为以下3个步骤:(1)将a上n-1个盘借助c座先移到b座上。

(2)把a座剩下的⼀个盘移到c座上。

(3)将n-1个盘从c座借助于a座移到c座上。

1.2基本要求(1)输⼊的形式和输⼊值的范围:输⼊圆盘的数量,类型为整型,⼤于零。

(2)输出的形式:运⾏结果为⽤字母表⽰移动盘⼦的⽅案,⽽并⾮是真正移动盘⼦。

(3) 程序所能达到的功能;输⼊圆盘数量为定值时的移盘⽅案。

帮助我们更清晰的理解汉诺塔问题,及递归调⽤的应⽤。

hannoi塔java课程设计

hannoi塔java课程设计

hannoi塔 java课程设计一、课程目标知识目标:1. 学生能理解汉诺塔问题的背景、原理及其数学特性。

2. 学生能掌握利用Java编程语言实现汉诺塔问题的递归算法。

3. 学生能掌握基本的Java语法,如变量声明、循环结构、条件判断和函数定义。

技能目标:1. 学生能够运用递归思想解决实际问题,提高逻辑思维能力。

2. 学生通过编写Java代码实现汉诺塔问题,掌握程序调试和错误处理的方法。

3. 学生能够在团队合作中发挥个人优势,提高沟通与协作能力。

情感态度价值观目标:1. 学生对计算机科学产生兴趣,培养探索精神和创新意识。

2. 学生在编程过程中,培养面对困难、解决问题的勇气和毅力。

3. 学生通过学习汉诺塔问题,认识到数学与计算机科学的紧密联系,增强跨学科学习的意识。

课程性质:本课程为信息技术学科,以实践操作为主,注重培养学生的编程能力和逻辑思维。

学生特点:学生处于高中年级,具备一定的数学基础和编程经验,好奇心强,喜欢挑战性任务。

教学要求:结合学生特点,课程设计需注重理论与实践相结合,充分调动学生的主观能动性,引导学生在实践中掌握知识,提高技能。

同时,关注学生的情感态度价值观培养,激发学生的学习兴趣和内在动机。

通过分解课程目标,为后续教学设计和评估提供明确依据。

二、教学内容1. 汉诺塔问题背景介绍:引导学生了解汉诺塔问题的起源、发展及其数学原理。

- 教材章节:第一章 计算机问题求解基础2. Java编程基础回顾:变量声明、数据类型、循环结构、条件判断和函数定义。

- 教材章节:第二章 Java编程基础3. 递归算法原理及实现:介绍递归的概念、汉诺塔问题的递归解法。

- 教材章节:第三章 算法基础、第七章 递归算法4. 编写汉诺塔问题的Java程序:引导学生动手编写代码,实现汉诺塔问题的递归解法。

- 教材章节:第四章 Java面向对象编程、第七章 递归算法5. 程序调试与优化:教授学生如何调试程序、处理错误,并对代码进行优化。

汉诺塔课程设计

汉诺塔课程设计

课程设计(论文)任务书软件学院学院软件工程专业 4 班一、课程设计(论文)题目Hannoi塔二、课程设计(论文)工作自 2011 年 12 月12 日起至2011 年12 月 16 日止。

三、课程设计(论文) 地点: 软件学院实训中心四、课程设计(论文)内容要求:1.本课程设计的目的(1)掌握Java语言的程序设计方法;(2)理论联系实际,进一步提高学生的软件开发技术;(3)培养学生分析、解决问题的能力;(4)提高学生实践论文撰写能力。

2.课程设计的任务及要求1)课程设计任务:设计GUI界面的Hannoi塔,用户可以通过拖动鼠标移动各个塔上的盘子,程序也可以自动演示盘子的移动过程。

2)创新要求:1.有三个表示塔的对象,分别命名为A、B和C。

A塔上有若干个盘子,盘子的大小不等,并按着大小顺序依次摆放在A塔上,大盘在下,小盘在上。

用户可以用鼠标拖动盘子,把A 塔上的盘子全部移动到另外两个塔中的任何一个塔上。

要求每每次只能移动一个盘子,在任何时候不允许大盘压在小盘的上面。

2.用户也可以选择让程序自动演示。

选择自动演示后,程序将以动画形式演示把A塔上的盘子全部移到C塔的过程,并将移动过程以文本形式显示在一个文本区中。

3)课程设计论文编写要求(1)课程设计任务及要求(2)设计思路--工作原理、功能规划(3)详细设计---数据分析、算法思路、类设计、功能实现(含程序流程图、主要代码及注释)、界面等。

(4)运行调试与分析讨论---给出运行屏幕截图,分析运行结果,有何改进想法等。

(5)设计体会与小结---设计遇到的问题及解决办法,通过设计学到了哪些新知识,巩固了哪些知识,有哪些提高。

(6)参考文献(必须按标准格式列出,可参考教材后面的参考文献格式)(7)报告按规定排版打印,要求装订平整,否则要求返工;(8)课设报告的装订顺序如下:封面---任务书---中文摘要---目录----正文---附录(代码及相关图片)(9)严禁抄袭,如有发现,按不及格处理。

汉诺塔问题演示课程设计

汉诺塔问题演示课程设计

汉诺塔问题演示课程设计一、课程目标知识目标:1. 学生能理解汉诺塔问题的起源、规则及数学原理;2. 学生掌握运用递归思想解决汉诺塔问题的方法;3. 学生了解汉诺塔问题与数学归纳法的关系。

技能目标:1. 学生能够运用所学知识编写程序解决汉诺塔问题;2. 学生通过小组合作,培养团队协作能力和问题解决能力;3. 学生能够运用数学归纳法分析汉诺塔问题,提高逻辑思维能力。

情感态度价值观目标:1. 学生对数学问题产生兴趣,培养探究精神和创新意识;2. 学生在解决汉诺塔问题的过程中,树立克服困难的信心,培养坚韧不拔的品质;3. 学生通过课程学习,认识到数学在现实生活中的应用价值,提高数学学习的积极性。

本课程针对高年级学生,结合学科特点,强调理论与实践相结合,注重培养学生的逻辑思维能力和实际操作能力。

课程设计以汉诺塔问题为主线,引导学生通过小组合作、自主探究等方式,掌握递归思想和数学归纳法在实际问题中的应用。

课程目标具体、可衡量,旨在让学生在课程结束后能够独立解决汉诺塔问题,并在此过程中培养情感态度价值观。

本课程教学内容主要包括以下三个方面:1. 汉诺塔问题背景介绍:- 汉诺塔问题的起源及发展历程;- 汉诺塔问题的基本规则;- 汉诺塔问题与数学归纳法的关系。

2. 汉诺塔问题的数学原理:- 递归思想及其在汉诺塔问题中的应用;- 数学归纳法的基本概念及运用;- 汉诺塔问题解法与数学公式推导。

3. 汉诺塔问题实践操作:- 编写程序解决汉诺塔问题;- 小组合作探讨汉诺塔问题的优化解法;- 分析汉诺塔问题在不同条件下的解法及规律。

教学内容依据课程目标,结合教材相关章节进行组织。

具体教学大纲如下:1. 引言与背景介绍(1课时);2. 汉诺塔问题的数学原理(2课时);3. 汉诺塔问题实践操作(2课时);4. 拓展与提高(1课时)。

教学内容具有科学性和系统性,旨在帮助学生从理论到实践,全面掌握汉诺塔问题的解法及其数学原理。

同时,注重培养学生的团队合作能力和问题解决能力。

hannoi塔java课程设计

hannoi塔java课程设计

hannoi塔 java课程设计一、教学目标本课程的教学目标是让Java初学者通过学习Hanoi塔的算法实现,掌握基本的Java编程语法、面向对象编程思想,以及常用的数据结构。

在知识目标上,学生需要了解Hanoi塔问题的背景和算法原理,熟悉Java的基本语法、类和对象的概念,掌握常用的数据结构如数组、链表等。

在技能目标上,学生能够运用Java编写简单的程序,独立解决Hanoi塔问题,提高编程实践能力。

在情感态度价值观目标上,学生通过克服编程过程中的困难,培养解决问题的信心和毅力,增强团队合作意识。

二、教学内容本课程的教学内容主要包括Hanoi塔问题的引入、Java基本语法、面向对象编程、数据结构等。

首先,介绍Hanoi塔问题的背景和算法原理,使学生了解问题求解的过程。

其次,通过讲解Java基本语法,让学生掌握编程的基本元素,如变量、运算符、控制结构等。

然后,引入面向对象编程的概念,让学生了解类和对象的关系,掌握构造方法、封装、继承等编程技巧。

最后,讲解常用的数据结构如数组、链表等,为学生解决实际问题提供支持。

三、教学方法本课程采用多种教学方法,如讲授法、案例分析法、实验法等,以激发学生的学习兴趣和主动性。

在教学过程中,教师通过生动的案例和实际问题引入知识点,引导学生思考和讨论,培养学生的创新思维。

同时,学生进行实验操作,让学生亲自动手编写代码,提高编程实践能力。

此外,鼓励学生之间的交流与合作,通过团队项目的方式,培养学生的团队合作意识和沟通能力。

四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将提供以下教学资源:教材《Java编程基础》、参考书《Java核心技术》、多媒体教学课件、在线编程练习平台、实验设备等。

教材和参考书将为学生提供系统的理论知识,多媒体教学课件帮助学生更好地理解知识点,在线编程练习平台让学生进行实际操作练习,实验设备则为学生的实验操作提供支持。

通过这些教学资源,学生将能够全面掌握本课程的知识和技能。

汉诺塔面向对象程序课程设计

汉诺塔面向对象程序课程设计

《面向对象程序设计》课程设计报告题目:Hannoi塔游戏院(系):信息科学与工程学院专业班级:计算机科学与技术1003班学生姓名:梁晓明学号:20101183107指导教师:吴奕20 13 年_6_月8_日至20 13 年,6_月2^日华中科技大学武昌分校制面向对象程序设计课程设计任务书一、设计(调查报告/论文)题目Hannoi塔游戏二、设计(调查报告—/论文)主要内容内容:设计GUI界面的Hannoi塔。

汉诺塔中有三个座,名字分别为A, B, C。

初始状态时A 塔上有3个大小不等的盘子,这些盘子从座底到座顶按着大小顺序依次摆放在A座上。

用户可以用鼠标选中盘子,然后通过拖动鼠标来移动盘子。

释放鼠标来放置该盘子。

基本功能与要求:1程序要求用户在移动盘子的过程中,不允许吧大盘子放置在小盘子的上面,用户最终要完成的是把A座上的全部盘子移动到B座或C座上。

2用户可以通过Hannoi塔界面的提供的改变盘子数目功能来改变盘子的数目,同时可以改变盘子的大小以及改变盘子和界面的背景颜色,而且还可以选择控制背景音乐的播放。

3用户可以通过单击Hannoi塔界面上提供的按钮,让程序自动完成把A座上的盘子全部移动到C座上。

4用户在移动盘子的过程中,可以随时单击Hannoi塔界面上提供的按钮,重新开始。

三、原始资料1. 《面向对象程序设计课程设计》指导书2. 耿祥义.JAVA大学实用教程•北京:清华大学出版社,2009.四、要求的设计(调查/论文)成果1. 课程设计报告2. 课程设计软件五、进程安排布置任务,查找资料、需求分析1天总体设计1天详细设计1.5天编制源程序实现3.5天测试与修改1天撰写课设报告2天六、主要参考资料[1] 张广彬.Java课程设计案例精编(第二版).北京:清华大学出版社,2011.[2] 耿祥义.Java课程设计(第二版).北京:清华大学出版社,2008.[3] 耿祥义.JAVA大学实用教程•北京:清华大学出版社,2009.[4] 邹林达•陈国君Java2程序设计基础•北京:清华大学出版社,2010.⑸邹林达.Java2程序设计基础实验指导•北京:清华大学,2010.指导教师(签名):20目录1需求与总体设计 (1)1.1设计目标 (1)1. 2主体功能 (1)1. 3流程图 (2)1. 4类图 (2)2详细设计 (3)2.1 总体功能设计 (3)2.2 HannoiWindow 类 (3)2. 3 Tower 类 (3)2. 4 Di sc 类 (5)2.5 TowerPo int 类 (5)2.6 Han dleMouse 类 (6)2.7 AutoMoveDisc 类 (6)3编码实现 (7)3.1 HannoiWin dow.java (7)3.2 Tower.java (9)3.3 Disc.java (13)3.4 TowerP oin t.java (14)3.5 Han dleMouse.java (15)3.6 AutoMoveDisc.java (20)4系统测试 (26)4.1 测试方案 (26)4.2 测试结果 (26)5总结 (28)1 需求与总体设计1.1 设计目的可以正常运行程序,并且按照设计目的预想的完成具体功能能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据库课程设计报告------------题目:汉诺塔学院名称:计算机学院专业名称:计算机科学与技术班级:计算机08-08班学号:0804010807姓名:田昊指导教师:孙冬璞起始时间:2011年1月5日-------2011年1月9日摘要汉诺塔(又称河内塔)问题是一个古典的数学问题,是一个用递归方法解题的典型例子。

问题是这样的:开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。

利用计算机图形学进行汉诺塔演示程序设计,是利用C语言绘图函数实现汉诺塔的递归算法图形界面演示过程。

通过C语言实现图形学的绘图,程序控制,以及区域填充,并根据汉诺塔的算法原理实现大小不同的盘子移动的全过程演示。

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.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.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*}部分代码// HanoiDlg.h : header file//#if !defined(AFX_HANOIDLG_H__E551CB54_1428_4EEC_87E3_ED79E2FB2219__ INCLUDED_)#defineAFX_HANOIDLG_H__E551CB54_1428_4EEC_87E3_ED79E2FB2219__INCLUDED_#include "Tower.h" // Added by ClassView#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000/////////////////////////////////////////////////////////////////// //////////// CHanoiDlg dialog#include "Tower.h"#include <vector>using namespace std;struct StartToEnd{int a;int b;};class CHanoiDlg : public CDialog{// Constructionpublic:void ReDrawFirst();CButton m_Pause;void ReDraw();BOOL m_flag;void hanoi(int n,int a,int b,int c);CTower m_tower_first;CTower m_tower_second;CTower m_tower_third;vector<StartToEnd> m_line;//保存路线CHanoiDlg(CWnd* pParent = NULL);// standard constructor// Dialog Data//{{AFX_DATA(CHanoiDlg)enum { IDD = IDD_HANOI_DIALOG };CString m_num;//}}AFX_DATA// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CHanoiDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support//}}AFX_VIRTUAL// Implementationprotected:HICON m_hIcon;// Generated message map functions//{{AFX_MSG(CHanoiDlg)virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();virtual void OnOK();afx_msg void OnNext();afx_msg void OnForward();afx_msg void OnStart();afx_msg void OnTowerFirst();afx_msg void OnTowerSecond();afx_msg void OnTowerThird();afx_msg void OnStop();afx_msg void OnLoad();//}}AFX_MSGDECLARE_MESSAGE_MAP() private:bool flag;int m_floor;};//{{AFX_INSERT_LOCATION}}// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif// !defined(AFX_HANOIDLG_H__E551CB54_1428_4EEC_87E3_ED79E2FB2219__INC LUDED_)// SelectDlg.cpp : implementation file//#include "stdafx.h"#include "Hanoi.h"#include "SelectDlg.h"#include "HanoiDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////// //////////// CSelectDlg dialogCSelectDlg::CSelectDlg(CWnd* pParent /*=NULL*/): CDialog(CSelectDlg::IDD, pParent){//{{AFX_DATA_INIT(CSelectDlg)// NOTE: the ClassWizard will add member initialization here//}}AFX_DATA_INITm_flag=TRUE;}void CSelectDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CSelectDlg)// NOTE: the ClassWizard will add DDX and DDV calls here//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CSelectDlg, CDialog)//{{AFX_MSG_MAP(CSelectDlg)ON_BN_CLICKED(IDC_RADIO2, OnRadio2)ON_BN_CLICKED(IDC_RADIO1, OnRadio1)//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////// //////////// CSelectDlg message handlersvoid CSelectDlg::OnRadio2(){// TODO: Add your control notification handler code herem_flag=FALSE;}void CSelectDlg::OnOK(){// TODO: Add extra validation here((CHanoiDlg*)GetParent())->m_ flag=m_flag;CDialog::OnOK();}void CSelectDlg::OnRadio1(){// TODO: Add your control notification handler code herem_flag=TRUE;}4 测试与运行由需求分析可知,汉诺塔演示程序设计是在vc环境下利用递归算法实现大小不同的盘子移动的全过程演示。

相关文档
最新文档