MFC课程设计报告—汉诺塔演示系统_第1页
MFC课程设计报告—汉诺塔演示系统_第2页
MFC课程设计报告—汉诺塔演示系统_第3页
MFC课程设计报告—汉诺塔演示系统_第4页
MFC课程设计报告—汉诺塔演示系统_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、山东中医药大学理工学院课 程 设 计 报 告课程名称: 高级语言课程设计 课程代码: 07300561 设计内容: 汉诺塔演示系统 二0一二 年 12 月21日目 录1.课程设计目的3了解汉诺塔的基本原理32.课程设计题目描述和要求3课程设计题目3课程设计要求33.课程设计报告内容4程序原理4程序内容5算法设计73.4程序调试74.总结8一、课程设计目的了解汉诺塔基本原理1、通过本实验,掌握复杂性问题的分析方法,了解汉诺塔游戏的时间复杂性和空间复杂性。2、通过本实验,学习和了解mfc环境的应用。3、通过本实验,对递归算法及进栈出栈操作进一步了解和应用。4、通过本实验,将课堂学习的理论与实践结合

2、在一起。5、学会编制结构清晰、风格良好、数据结构适当的+语言程序,从而具备解决综合性实际问题的能力。2.1 课程设计描述1、在mfc界面中插入盘子,确定其初始状态以及背景图片。2、选择盘子的数量,以自动搬移的方式移动。3、自动搬移可以通过定时器的方法,每一次移动的时间间隔可以通过修改程序中的代码自定。 4、定义塔的描述类和碟子的描述类。5、选定盘子数量点击开始运行,点击结束后退出程序。2.2 课程设计要求通过对高级程序语言设计学习,以及对mfc的自学过程,掌握对mfc可视化程序的设计,熟练运用老师所讲的高级程序语言设计的知识,通过综合运用先修课的知识,培养独立分析和解决实际问题的能力。培养学生

3、使用高级语言开发系统的能力,提高学生分析、设计系统的能力。程序原理当在一个函数A的定义中出现调用函数A的情况时,或在A函数的定义过程中调用B函数,而在B函数的定义过程中又调用了A函数 ,这种调用关系称为递归调用。在设计递归程序函数时,通常是先判断递归结束条件,再进行递归调用。其执行过程比较复杂,都存在连续递归调用(参数入栈)和回推过程。在使用递归的方法设计程序时,在递归程序中一定要有递归结束条件;否则,在执行程序时,会产生无穷无尽的递归调用。程序内容算法设计思想: (1)将塔A上的n-1个碟子借助塔C先移到塔B上。 (2)把塔A上剩下的一个碟子移到塔C上。 (3)将n-1个碟子从塔B借助于塔A

4、移到塔C上。实验步骤: 1. 用c+ 或c语言设计实现汉诺塔游戏; 2. 让盘子数从2 开始到7进行实验,记录程序运行时间和递归调用次数; 3. 画出盘子数n和运行时间t 、递归调用次数m的关系然后对程序进行分析3.3 算法设计(1)移动盘子在CMyDlg中建立成员函数:MoveDisk:int CMyDlg:MoveDish(int n, int a, int b) if(1 = n)/ 移动盘子int i = 1;for(; i <= number ; i+)if(a = dishnumber - i)break;if(i > number)return 0;dishnumbe

5、r - i = b;return 0; / 完成else/ 将要进行的操作进栈optpn0 = n-1;optpn1 = 3-a-b;optpn2 = b;pn +;optpn0 = 1;optpn1 = a;optpn2 = b;pn +;optpn0 = n-1;optpn1 = a;optpn2 = 3-a-b;pn +;return 1;(2)建立选择盘子以及盘子移动速度的成员函数:OnButton1()void CMyDlg:OnButton1() / 开始演示if(0 = number)MessageBox("请选择盘子数!");return ;SetDishN

6、umber(number); / 数据重置MoveDish(number, 0, 2);SetTimer(1015, 400, NULL); / 开始计时,每400毫秒一步(3)对盘子进行设置:void CMyDlg:OnR3() / 设置三个盘子SetDishNumber(3);void CMyDlg:OnR4() / 设置四个盘子SetDishNumber(4);void CMyDlg:OnR5() / 设置五个盘子SetDishNumber(5);void CMyDlg:OnR6() / 设置六个盘子SetDishNumber(6);void CMyDlg:OnR7() / 设置七个盘子

7、SetDishNumber(7);/ 设置盘子个数void CMyDlg:SetDishNumber(int n)KillTimer(1015); / 停止计时pn = 0; / 清空栈number = n;for(int i = 0; i < n ; i+)dishi = 0; / 初始化每个盘子都在第一根柱子上Invalidate(FALSE);/重绘(4)显示背景void CMyDlg:ShowBg(CDC * dc)/显示背景CDC pdc, ddc;pdc.CreateCompatibleDC(dc); / 创建一个临时显示设备ddc.CreateCompatibleDC(dc

8、); / 创建一个加载盘子的临时显示设备CBitmap bmp, * obmp;bmp.LoadBitmap(IDB_BG); / 加载背景图片obmp = pdc.SelectObject(&bmp); / 将图片显示在设备pdc上。/显示盘子int n = 0, 0, 0; / 用于存放每个柱子已显示多少盘子for(int i = 0; i < number ; i+)CBitmap dbmp, * odbmp;dbmp.LoadBitmap(IDB_B7 - i); / 加载从大到小第i个盘子图片odbmp = ddc.SelectObject(&dbmp); /

9、将盘子显示在设备ddc上。pdc.BitBlt(10 + 150*dishi, 225 - ndishi*20, 140, 15, &ddc, 0, 0, SRCCOPY); / 将ddc拷贝到临时显示设备pdc对应位置上ndishi +;ddc.SelectObject(odbmp); / 显示完毕,还原设备dc->BitBlt(10, 10, 460, 260, &pdc, 0, 0, SRCCOPY); / 将pdc拷贝到程序显示设备dc上pdc.SelectObject(obmp); / 显示完毕,还原设备对于这次对汉诺塔程序演示的设计,因为是第一次接触mfc可视化程序设计,多少有点棘手,在网上找了挺多关于这方面的演示程序进行参考,通过对他们的程序进行分析理解,学习一些以前自己没有学到的知识,最终将其变成自己的东西。在实际操作过程中出现了不少的错误,虽然犯了一些错误但是还会有意外的收获感觉也挺有意思。毕竟这些错误在自己的各种寻找方法,网上查找资料,询问老师同学等等,最终将问题解决,先不说结果怎样,其中的过程就挺让人回味的。当然,在具体操作中对这学期所学的数据结构的理论知识得到巩固

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论