汉诺塔课程设计

上传人:hs****ma 文档编号:486785235 上传时间:2023-06-09 格式:DOCX 页数:16 大小:146.48KB
返回 下载 相关 举报
汉诺塔课程设计_第1页
第1页 / 共16页
汉诺塔课程设计_第2页
第2页 / 共16页
汉诺塔课程设计_第3页
第3页 / 共16页
汉诺塔课程设计_第4页
第4页 / 共16页
汉诺塔课程设计_第5页
第5页 / 共16页
点击查看更多>>
资源描述

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

1、IE攀枝花学院课程设计题 目:汉诺塔演示程序设计院(系):年级专业:姓 名:学 号:指导教师:二00九年十二月十四日攀枝花学院教务处制攀枝花学院本科学生课程设计任务书题目汉诺塔演示程序设计1、课程设计的目的通过完成一个完整项目,经历策划、设计、开发、测试、验收各阶段,达到:(1)巩固和实践计算机图形学课程中的理论和算法;(2)培养项目策划、架构设计、软件开发和科研设计的能力;(3)培养认真学习、积极探索的工作态度和良好的团队合作精神。2、课程设计的内容和要求(包括原始数据、技术要求、工作要求等)开发工具:TC或Visual C+开发人数:1人实现内容:设计开发一个汉诺塔算法演示程序功能要求:(

2、1)根据需求设计出图形显示界面(2)根据汉诺塔算法原理实现大小不同的盘子移动的全过程演示。3、主要参考文献1 潘云鹤,董金祥等著.计算机图形学一一原理、方法及应用.北京:高等教育出版 社,2003.122 孙家广等,计算机图形学(第三版),清华大学出版社,20043 陈元琰编著.计算机图形学实用技术.北京:科学出版社,20004 和青芳著.计算机图形学原理及算法教程.北京:清华大学出版社5 陆润民.C语言绘图教程.北京:清华大学出版社,19966 陈锦昌,赵明秀.C语言计算机绘图教程.广州:华南理工大学出版社,1998.97 杨昂岳.微机实用绘图方法与技巧.长沙:国防科技大学出版社,1995.

3、128 刘路放.C语言的窗口式图形界面设计一一自带汉字环境的应用软件编程.西安交通大学出版社,19964、课程设计工作进度计划1、设计动员,布置任务,选题(1天)2、查阅资料,分析、讨论与设计(1天)3、编写程序,进行调试(4天)4、完成模块联调,进行测试(2天)5、成果验收,完成设计报告(2天)指导教师(签字)日期年 月 日教研室意见:年 月 日学生(签字):接受任务时间:年 月 日注:任务书由指导教师填写。课程设计(论文)指导教师成绩评定表题目名称评分项目分值得分评价内涵工作表现20%01学习态度6遵守各项纪律,工作刻苦努力,具有良好的科学 工作态度。02科学实践、调研7通过实验、试验、查

4、阅文献、深入生产实践等渠 道获取与课程设计有关的材料。03课题工作量7按期圆满完成规定的任务,工作量饱满。台户 能 力 水平 35%04综合运用知识的能力10能运用所学知识和技能去发现与解决实际问题, 能正确处理实验数据,能对课题进行理论分析, 得出有价值的结论。05应用文献的能力5能独立查阅相关文献和从事其他调研;能提出并 较好地论述课题的实施方案;有收集、加工各种 信息及获取新知识的能力。06设计(实验)能力,方案 的设计能力5能正确设计实验方案,独立进行装置安装、调试、 操作等实验工作,数据正确、可靠;研究思路清 晰、完整。07计算及计算机应用能力5具有较强的数据运算与处理能力;能运用计

5、算机 进行资料搜集、加工、处理和辅助设计等。08对计算或实验结果的分析 能力(综合分析能力、技 术经济分析能力)10具有较强的数据收集、分析、处理、综合的能力。成果质量45%09插图(或图纸)质量、篇 幅、设计(论文)规范化 程度5符合本专业相关规范或规定要求;规范化符合本 文件第五条要求。10设计说明书(论文)质量30综述简练完整,有见解;立论正确,论述充分, 结论严谨合理:实验正确,分析处理科学。11创新10对前人工作有改进或突破,或有独特见解。成绩指导教师评语指导教师签名:年 月曰摘要汉诺塔(又称河内塔)问题是一个古典的数学问题,是一个用递归方法解题 的典型例子。问题是这样的:开天辟地的

6、神勃拉玛在一个庙里留下了三根金刚石 的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小, 依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定 可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上 面。利用计算机图形学进行汉诺塔演示程序设计,是利用C语言绘图函数实现汉 诺塔的递归算法图形界面演示过程。通过C语言实现图形学的绘图,程序控制, 以及区域填充,并根据汉诺塔的算法原理实现大小不同的盘子移动的全过程演 示。关键词 汉诺塔,变换矩阵,种子填充算法,递归调用目录摘 要I1需求分析11.1需求概述11.2需求环境11.3功能描述22概要设计

7、32.1程序功能模块32.2程序流程图32.3数据结构的设计43详细设计53.1程序初始化53.1.1代码功能53.1.2功能实现代码53.2盘块的移动过程53.2.1代码功能53.2.2功能实现代码53.3递归函数63.3.1流程图63.3.2功能实现代码74测试与运行8结束语9参考文献101需求分析1.1需求概述汉诺塔演示程序设计是计算机图形学中图形变换的内容之一。而图形学中的 图形变换的概念是由简单图形生成复杂图形,可用二维图形表示三维形体,甚至 可以对静态图形经过快速变换而获得图形的动态显示效果。其任务是研究各点坐 标之间的变化规律。而本次课程设计就是利用C语言以及图形函数实现汉诺塔的

8、 递归算法来进行其盘块移动的全过程显示。在TC环境中要实现这样的功能,就 要牵涉到图形设备接口的知识。Windows图形设备接口是为与设备无关的图形设 计的,是Windows系统的重要组成部分,负责系统与用户或绘图程序之间的信息 交换,并控制在输出设备上显示图形或文字。应用程序必须通知图形设备接口来 加载特定的设备驱动,一旦驱动得以加载,就可以准备应用设备进行相关的操作 这些任务都要通过创建和维护设备描述表来完成。在实现汉诺塔演示程序设计 时,是利用坐标系统而得到的,而在Windows应用程序中有两种坐标系统:设备 坐标系统和逻辑坐标系统。其中设备坐标系统中又有三种相互独立的坐标系统: 屏幕坐

9、标系统、窗口坐标系统和用户区坐标系统。这些坐标系统均以像素点来表 示度量的单位。屏幕坐标系统使用整个屏幕作为坐标区域,原点为屏幕原点。窗 口坐标系统使用了边界在内的应用程序的窗口作为坐标区域。窗口边界的左上角 是坐标系统的原点。用户坐标系统是最经常使用的坐标系统。用户区是窗口工作 区,不包括窗口边界、菜单条及滚动条等。用户一般只需操作应用程序的用户区, 因此用户区坐标系统对大多数应用程序都是适用的。在计算机机图形学中窗口的定义是指在用户坐标系中定义的确定显示内容 的一个矩形区域,只有在这个区域内的图形才能在设备坐标系下输出,而窗口外 的部分则被截掉。视区是在设备坐标中定义的一个区域,用于输出窗

10、口中的图形。 视区决定了窗口中的图形要显示于屏幕上的位置的大小。1.2需求环境本课程设计需要的设备为硬件要求和软件配置要求具体要求如下: 硬件要求:一台计算机。 软件配置:WINDOWS、C/VC+6.0O1.3功能描述本课程设计是利用图形学的相关知识在TC或Visual C+环境下利用递归 算法实现汉诺塔演示的全过程,其基本的功能描述如下: 绘制三个塔座。 在第一个塔座上绘制一个矩形(一个矩形代表一个盘子),栈的高度递增, 则矩形的大小递减。 为矩形填充颜色,盘子的颜色代码为栈顶盘子代号加1。 通过鼠标或者键盘控制移动矩形,将所有的矩形借助第二个塔座从第一个 塔移到第三个塔,并显示每次移动盘

11、子的步骤。2概要设计2.1程序功能模块由需求分析知,本次课程设计是用递归算法实现汉诺塔演示程序,故其功能 模块分为:程序初始化模块,盘块移动模块,递归调用模块三个模块。(可以把功能模块用图画出来)2.2程序流程图图2.1程序流程图2.3数据结构的设计根据需求分析将用递归算法实现汉诺塔演示过程的数据结构的设计如下: 用一个结构体数组 struct M ( int data15; int top; num3;来定 义三个塔座的高度,以及每个塔座存放每个盘块的代号。 定义两个变量cx,cy来分别表示程序演示步骤的横坐标和纵坐标的变 化。 用函数 void move(char x,char y,str

12、uct M num3);来表示盘块移动 的具体过程;并在move函数中调用函数void hanoi(char x,char y,char z,int n,struct M num3);来表示递归调用的过程;最后用一个初始化 函数void Init(void)来对整个程序进行初始化,并调用move函数。3详细设计3.1程序初始化3.1. 1代码功能在初始化程序中,主要实现的是绘制塔座标志,绘制盘块,设置塔座标志颜 色,以及填充盘块颜色等。3.1.2功能实现代码 绘制塔座的代码如下:setcolor(GREEN);/*设置塔座标志颜色*/outtextxy(180,450,press any ke

13、y 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*num0.datanum0.top),400-20*i-8,100+(33-3*num0.datanum0.top),400-20*i+8); /*画矩形*/3.2盘块的移动过程3.2.1代码功能盘块的移动实际上是一个出栈和入栈的过程,盘块出栈后便将原来

14、的地方涂 黑,本块代码主要是实现显示汉诺塔的具体移动的演示过程及移动步骤。3.2.2功能实现代码void move(char x,char y,struct M num3)/* 移动的具体过程*/(int i;char num13,num23;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(cy210) /*横坐标换行后另起一列*/( cx+=145;cy=0;/*纵坐标重新回到顶部开始显示下一列的演示步骤*/settextstyle(0,0,2);setfillstyle(SOLID_FILL,BLACK);/* 把原来的地方移去涂黑*/bar(100+150*(x-97)-(33-3*numx-97.datanumx-97.t

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

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