mfc课程设计报告—汉诺塔演示系统

mfc课程设计报告—汉诺塔演示系统

ID:25592844

大小:78.18 KB

页数:9页

时间:2018-11-21

mfc课程设计报告—汉诺塔演示系统_第1页
mfc课程设计报告—汉诺塔演示系统_第2页
mfc课程设计报告—汉诺塔演示系统_第3页
mfc课程设计报告—汉诺塔演示系统_第4页
mfc课程设计报告—汉诺塔演示系统_第5页
资源描述:

《mfc课程设计报告—汉诺塔演示系统》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

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

2、栈出栈操作进一步了解和应用。4、通过本实验,将课堂学习的理论与实践结合在一起。5、学会编制结构清晰、风格良好、数据结构适当的C++语言程序,从而具备解决综合性实际问题的能力。2.课程设计题目描述和要求2.1课程设计描述1、在mfc界面中插入盘子,确定其初始状态以及背景图片。2、选择盘子的数量,以自动搬移的方式移动。3、自动搬移可以通过定时器的方法,每一次移动的时间间隔可以通过修改程序中的代码自定。4、定义塔的描述类和碟子的描述类。5、选定盘子数量点击开始运行,点击结束后退出程序。2.2课程设计要求通过对高级程序语言设计学习,以及对mfc的自

3、学过程,掌握对mfc可视化程序的设计,熟练运用老师所讲的高级程序语言设计的知识,通过综合运用先修课的知识,培养独立分析和解决实际问题的能力。培养学生使用高级语言开发系统的能力9,提高学生分析、设计系统的能力。3.课程设计报告内容3.1程序原理当在一个函数A的定义中出现调用函数A的情况时,或在A函数的定义过程中调用B函数,而在B函数的定义过程中又调用了A函数,这种调用关系称为递归调用。在设计递归程序函数时,通常是先判断递归结束条件,再进行递归调用。其执行过程比较复杂,都存在连续递归调用(参数入栈)和回推过程。在使用递归的方法设计程序时,在递归

4、程序中一定要有递归结束条件;否则,在执行程序时,会产生无穷无尽的递归调用。3.2程序内容算法设计思想:(1)将塔A上的n-1个碟子借助塔C先移到塔B上。(2)把塔A上剩下的一个碟子移到塔C上。(3)将n-1个碟子从塔B借助于塔A移到塔C上。实验步骤:1.用c++或c语言设计实现汉诺塔游戏;2.让盘子数从2开始到7进行实验,记录程序运行时间和递归调用次数;3.画出盘子数n和运行时间t、递归调用次数m的关系然后对程序进行分析93.3算法设计(1)移动盘子在CMyDlg中建立成员函数:MoveDisk:intCMyDlg::MoveDish(in

5、tn,inta,intb){if(1==n){//移动盘子inti=1;for(;i<=number;i++){if(a==dish[number-i]){break;}}if(i>number){9return0;}dish[number-i]=b;return0;//完成}else{//将要进行的操作进栈opt[pn][0]=n-1;opt[pn][1]=3-a-b;opt[pn][2]=b;pn++;opt[pn][0]=1;opt[pn][1]=a;opt[pn][2]=b;pn++;opt[pn][0]=n-1;opt[pn][1

6、]=a;opt[pn][2]=3-a-b;pn++;return1;}}(2)建立选择盘子以及盘子移动速度的成员函数:OnButton1()voidCMyDlg::OnButton1(){//开始演示if(0==number){MessageBox("请选择盘子数!");return;}SetDishNumber(number);//数据重置MoveDish(number,0,2);SetTimer(1015,400,NULL);//开始计时,每400毫秒一步}(3)对盘子进行设置:voidCMyDlg::OnR3(){//设置三个盘子Se

7、tDishNumber(3);}9voidCMyDlg::OnR4(){//设置四个盘子SetDishNumber(4);}voidCMyDlg::OnR5(){//设置五个盘子SetDishNumber(5);}voidCMyDlg::OnR6(){//设置六个盘子SetDishNumber(6);}voidCMyDlg::OnR7(){//设置七个盘子SetDishNumber(7);}//设置盘子个数voidCMyDlg::SetDishNumber(intn){KillTimer(1015);//停止计时pn=0;//清空栈numb

8、er=n;for(inti=0;i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。