汉诺塔模拟程序-课程设计报告

上传人:桔**** 文档编号:552739617 上传时间:2023-06-02 格式:DOC 页数:22 大小:314KB
返回 下载 相关 举报
汉诺塔模拟程序-课程设计报告_第1页
第1页 / 共22页
汉诺塔模拟程序-课程设计报告_第2页
第2页 / 共22页
汉诺塔模拟程序-课程设计报告_第3页
第3页 / 共22页
汉诺塔模拟程序-课程设计报告_第4页
第4页 / 共22页
汉诺塔模拟程序-课程设计报告_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《汉诺塔模拟程序-课程设计报告》由会员分享,可在线阅读,更多相关《汉诺塔模拟程序-课程设计报告(22页珍藏版)》请在金锄头文库上搜索。

1、合肥学院计算机科学与技术系课程设计任务书20112012学年第一学期课程JAVA语言课程设计课程设计名称汉诺塔模拟程序专业班级08网络工程(1)班学号0804031034姓名Xx指导教师金莹 郭昌建 2011年9月目 录目 录2摘要:3关键词:31、需求分析31.1 课程设计目的31.2 课程设计名称及内容31.3 任务和要求31.4 设计方案提示41.5 相关背景41.5.1 来源41.5.2 传说42、设计部分52.1 设计思想52.1.1 汉诺塔的演示52.1.2 算法分析52.1.3 程序流程图62.1.4 算法分析图解72.2 功能内容设计82.2.1 程序实现总体功能82.2.2

2、具体功能设计92.3 详细设计103、调试及测试143.1 调试过程中遇到的主要问题集解决方法143.2 对设计和编码的回顾讨论和分析144、经验和体会155、附录:16主要源程序16摘要:本文对经典的“ 汉诺塔”问题进行了详细的分析,给出了实现的算法,并用JAVA实现。通过该问题的JAVA实现,可使清晰地观测到解决问题的全过程。关键词:汉诺塔;算法;递归;JAVA1、需求分析1.1 课程设计目的通过课程设计,学生在下述各方面的能力应该得到锻炼:(1)进一步巩固、加深学生所学专业课程JAVA语言教程的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。(2)全面考核学生所掌

3、握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。(3)利用所学知识,开发小型应用系统,掌握运用JAVA语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。 (5)熟练掌握JAVA语言的GUI设计、线程技术,灵活运用各种类库。1.2 课程设计名称及内容课程设计名称:汉诺塔模拟程序课程设计内容:设计一个模拟程序,图形化地展现汉诺塔的求解过程1.3 任务和要求1 学习数据结构课程中关于汉诺塔的知识和算法。2 设计图形界面,画出3个柱子和若干个大小不一的圆盘,圆盘数量可人工设定。3 当点击“开

4、始”按钮后,系统自动展现圆盘的移动过程,一秒移动一次。1.4 设计方案提示利用线程控制每次移动的时间间隔1.5 相关背景1.5.1 来源汉诺塔是源自印度神话里的玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。1.5.2 传说在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是

5、所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。 不管这个传说的可信度有多大,如果考虑一下把64片金片,由一根针上移到另一根针上,并且始终保持上小下大的顺序。这需要多少次移动呢?这里需要递归的方法。假设有n片,移动次数是f(n).显然f(1)=1,f(2)=3,f(3)=7,且f(k+1)=2*f(k)+1。此后不难证明f(n)=2n-1。n=64时, f(64)= 264-1=184467440

6、73709551615 假如每秒钟一次,共需多长时间呢?一个平年365天有 31536000 秒,闰年366天有31622400秒,平均每年31556952秒,计算一下, 18446744073709551615/31556952=584554049253.855年,这表明移完这些金片需要5845亿年以上,而地球存在至今不过45亿年,太阳系的预期寿命据说也就是数百亿年。真的过了5845亿年,不说太阳系和银河系,至少地球上的一切生命,连同梵塔、庙宇等,都早已经灰飞烟灭。2、设计部分2.1 设计思想本程序的主要思想是图形与多线程处理,熟悉图形、图像的使用方法,理解计算机动画的原理和java的多线程

7、处理机制,以及Java语言的GUI设计。2.1.1 汉诺塔的演示1、柱子和盘子可以用图形界面里的直线和矩形模拟。2、矩形(即盘子)的大小可以通过循环控制,这样可以让盘子看上去有层次感。3、盘子移动后构造一个重绘方法来擦去旧的盘子4、盘子的移动时间通过线程来控制2.1.2 算法分析如果n=1,则将圆盘从A直接移动到C。如果n=2,则:(1)将A上的n-1(等于1)个圆盘移到B上;(2)再将A上的一个圆盘移到C上;(3)最后将B上的n-1(等于1)个圆盘移到C上。 如果n=3,则:A)将A上的n-1(等于2,令其为n)个圆盘移到B(借助于C),步骤如下:(1)将A上的n-1(等于1)个圆盘移到C上

8、。(2)将A上的一个圆盘移到B。(3)将C上的n-1(等于1)个圆盘移到B。B)将A上的一个圆盘移到C。C)将B上的n-1(等于2,令其为n)个圆盘移到C(借助A),步骤如下:(1)将B上的n-1(等于1)个圆盘移到A。(2)将B上的一个盘子移到C。(3)将A上的n-1(等于1)个圆盘移到C。到此,完成了三个圆盘的移动过程。 从上面分析可以看出,当n大于等于2时, 移动的过程可分解为三个步骤:第一步 把A上的n-1个圆盘移到B上;第二步 把A上的一个圆盘移到C上;第三步 把B上的n-1个圆盘移到C上;其中第一步和第三步是类同的。 当n=3时,第一步和第三步又分解为类同的三步,即把n-1个圆盘从

9、一个针移到另一个针上,这里的n=n-1。2.1.3 程序流程图图1-12.1.4 算法分析图解2.2 功能内容设计2.2.1 程序实现总体功能(1) 设计Hannoi塔中有三个座,名字分别是1、2和3。初始状态是1座上有n个大小不等的盘子,这些盘子从座底到座顶按着大小顺序依次摆放在1座上。(2)程序要求在移动盘子过程中,不允许把大盘放置在小盘的上面,用户最终要完成的是把1座上的全部盘子移动到3座上;(3)可以通过Hannoi塔界面提供的菜单来任意输入盘子数目(程序初始化时可选择1-8个);(4)可以通过单击Hannoi塔界面上提供的开始按钮按钮,让程序自动完成把1座上的盘子全部移动到3座上;(

10、5)在移动盘子的过程中,可以随时单击Hannoi塔界面上提供的按钮,结束当时程序;(6)有计时功能,每一步一秒钟,界面右边有步骤移动显示。(7)程序可以设置最大和最小盘子的大小;(8)更改程序可以设置盘子的颜色;(9)每移动盘子的时候相邻盘子的颜色不同;2.2.2 具体功能设计1、 设计汉诺塔层数选择界面将布局管理器设置为空。然后添加开始和退出按钮以及汉诺塔层数选择下拉选择列表。层数选择界面如下图2-1所示:图2-2 层数选择界面2、 汉诺塔移动演示界面也是通过布局管理器根据所选择的盘子层数画出相应的盘子,setlocation()来根据需求来定位汉诺塔演示界面如下图:图2-3 汉诺塔演示界面

11、图2-4 运行中演示界面2.3 详细设计1、 层数选择界面及布局的部分代码contentPane = (JPanel) getContentPane(); contentPane.setLayout(null); this.setResizable(false); setSize(new Dimension(300, 150); setTitle(Hanoi); /选择框 jComboBox1.setFont(new java.awt.Font(Dialog, Font.PLAIN, 12); jComboBox1.setBorder(BorderFactory.createEtchedBor

12、der(); jComboBox1.setBounds(new Rectangle(157, 38, 70, 26); jComboBox1.addItem(1层); jComboBox1.addItem(2层); jComboBox1.addItem(3层); jComboBox1.addItem(4层); jComboBox1.addItem(5层); jComboBox1.addItem(6层); jComboBox1.addItem(7层); jComboBox1.addItem(8层); /开始按钮 jButton1.setBounds(new Rectangle(66, 81, 7

13、1, 27); jButton1.setFont(new java.awt.Font(Dialog, Font.PLAIN, 12); jButton1.setText(开始); /开始myDrawingFrame jButton1.addActionListener(new DefaultFrame_jButton1_actionAdapter(this); /退出按钮 jButton2.setBounds(new Rectangle(156, 81, 71, 27); jButton2.setFont(new java.awt.Font(Dialog, Font.PLAIN, 12); j

14、Button2.setText(退出); /退出事件 jButton2.addActionListener(new DefaultFrame_jButton2_actionAdapter(this); /Hanoi 层数:文字显示 jLabel1.setFont(new java.awt.Font(Dialog, Font.PLAIN, 12); jLabel1.setToolTipText(); jLabel1.setText(Hanoi 层数:); jLabel1.setBounds(new Rectangle(68, 39, 79, 25); /将上述按钮添加到主界面 contentPane.add(jButton2); contentPane.add(jButton1); contentPane.add(jComboBox1);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号