目录。一、目的与要求 1
1、设计目的 1
2、基本要求 1
3、创新要求 2
4、写出设计说明书 2
二、任务分析 2
1、要求 2
2、输入 2
三、设计方法和基本原理 2
1、问题描述(功能要求) 2
2、问题的解决方案 2
四、分析设计 3
1、概要设计 3
2、各模块之间的调用关系 4
五、详细设计 4
1、马踏遍棋盘流程 4
2、 部分**与截图 5
六、调试分析 8
1、调试结果 8
2、调试 9
3、 分析与心得 9
七、使用说明 10
八、小结与源程序**清单 10
1、小结 10
2、源程序清单 10
九、参考文献 15
一、目的与要求。
1、设计目的。
1) 熟练使用c语言编写程序,强化模块设计理念;
2) 设计一个国际象棋马踏棋盘的演示程序。
3) 理解栈的特性“后进先出” 和队列的特性“先进先出”。
4) 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
2、基本要求。
将马随机放在国际象标的8*8棋盘board[8][8]某个方格中,马按走棋规则进行移动。要求每个方格只进入一次,走遍棋盘上全部64个方格。编制非递归程序,求出马的行走路线,并按求出的行走路线,将数字依次真入一个8*8的方阵,输出之。
3、创新要求。
在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。
4、写出设计说明书
二、任务分析。
1、要求。在国际象棋8×8棋盘上面,按照国际象棋规则中马的行进规则,实现从任意初始位置,每个方格只进入一次,走遍棋盘上全部64个方格。编制程序,求出马的行走路线,并按求出的行走路线,将数字1,2,…,64依次填入一个8×8的方阵,并输出它的行走路线。
2、输入。任意一个起始位置;输出:无重复踏遍棋盘的结果,以数字1-64表示行走路线。
三、设计方法和基本原理
1、问题描述(功能要求)
在国际象棋8×8棋盘上面,按照国际象棋规则中马的行进规则,实现从任意初始位置,每个方格只进入一次,走遍棋盘上全部64个方格。编制程序,求出马的行走路线,并按求出的行走路线,将数字1,2,…,64依次填入一个8×8的方阵,并输出它的行走路线(棋盘如图所示)。
2、问题的解决方案
采用顺序栈或者链栈实现。
下图显示了马位于方格(2,3)时,8个可能的移动位置。
一般来说,当马位于位置(i,j)时,可以走到下列8个位置之一。
i-2,j+1)、(i-1,j+2)、(i+1,j+2)、(i+2,j+1)
i+2,j-1)、(i+1,j-2)、(i-1,j-2)、(i-2,j-1)
但是,如果(i,j)靠近棋盘的边缘,上述有些位置可能超出棋盘范围,成为不允许的位置。8个可能位置可以用两个一维数组htry1[0..7]和htry2[0..7]来表示:
htry1 -2 -1 1 2 2 1 -1 -2
htry2 1 2 2 1 -1 -2 -2 -1
位于(i,j)的马可以走到的新位置是在棋盘范围内的(i+htry[h],j+htry2[h]),其中h=0,1,2,…,7。
每次在多个可走位置中选择其中一个进行试探,其余未曾试探过的可走位置必须用适当结构妥善管理,以备试探失败时的“回溯”(悔棋)使用。
四、分析设计。
1、概要设计。
1)、顺序栈的抽象数据类型定义:
adt stack
数据关系:r=
adt stack
2)本程序包含三个模块:
1、主程序模块:
void main()
printf(" ")
printf("从这里这个位置开始 %d :", 8*(x-1)+y);
initlocation(x-1,y-1调用起始坐标函数。
2)、输出路径函数模块。
void display()
int i,j;
for(i=0;i
printf("");
六、调试分析。
1、调试中的问题。
1)调试问题:本程序设计过程中采用多文件组件工程的方式进行。在头文件中定义了全局变量,解决方案:将全局变量定义为staic型变量。或者在声明中使用extern关键字。
2)调试问题:虽然编译都能通过,但是运行时却出错,程序不能终止,只有通过人工方式结束程序,可能是在某些地方出现了无限死循环了,马儿回溯的时候,下一次又有可能走那个方向,这样就出现了死循环。
解决方案:标记马儿选择的方向director。在结点结构设计上加入director
3)调试问题:在调试过程中,对变量的监视发现栈顶元素中director无法更新,我原本的程序**设计是cur. director= k
解决方案: (from=k;//保存下一步所选最佳路径下标。
4)调试问题:当走到边界时,有可走的路,但是程序却回溯了。
解决方案:for (int k = 1+direction; k < 9, k <=mayway[0] ;k++)向所得的方向进行探寻。
一、分析。1)、本次实验的主要目的是在于掌握和理解栈的特性和它的应用。在编制该程序中遇到了很多问题。
首先,在开始刚编制程序的时候遇到的问题是,程序编译都通不过,主要在一些细节的问题上,还有在程序的返回值在刚开始时也没有正确返回。经过编译慢慢调试,编译都能通过,没有错误和警告。
2)、虽然编译都能通过,但是运行时却出错,程序不能终止,只有通过人工方式结束程序,可能是在某些地方出现了无限死循环了,然后在仔细检查**,发现没有标记马儿尝试的方向director,这样的话,马儿回溯的时候,下一次又有可能走那个方向,这样就出现了死循环。
3)、标记好马儿尝试的方向后,编译运行,但是运行结果却不符合程序所要求的结果,说明在算法上肯定有错误,检查发现,马儿走的坐标没有控制后,它的横纵坐标必须控制0到7之间,否则的话马儿就会踏出棋盘以外,这样输出的结果就不对。还有就是棋盘走过的位置要标记一下,以便下次走不重复走,当回溯的时候的记得把标记给清掉,这个地方有时候也很容易混淆。
4)、还有一点就是,该程序运算量大,算法复杂度高,所以运行的时候很慢,特别占内存,cpu的使用也很高,几乎都在70%到90%之间,配置低了可能还运行不了。
二、心得体会。
通过本次实验的编写,能够掌握栈的性质以及它的应用。但是自己掌握的东西还很不够,所以很多东西都是在同学的帮助下才完成的。在这次课程设计之后我明天了想自己很多的不足之处,知道了自己什么地方需要加强!
争取以后能完全靠自己做出程序。
用户使用手册:本系统有8个操作,用户只需将源程序清单输入可运行c++的编辑平台,例如vc++,c++ builder等等,然后进行编译,连接,最后出现工作平台。进入工作平台后用户可根据自己需要按界面提示进行相关操作即可。
八、小结与源程序**清单。
1、小结。通过本次实验的编写,能够掌握栈的性质以及它的应用。这个程序也让我头疼了几次,就是运行速度很慢,要等很久才能输出结果,这样的话很占内存资源,而且cpu的使用记录也很高,主要是它需要的运算太多,所以cpu 使用记录也是很高的。
通过网上查询一些算法了解到了贪心法,并运用到本程序的设计中,大大提升了算法的效率。
在该程序的编制过程中留下了一些思考的问题,就是马儿从一个起点位置开始探寻,最后马儿探寻成功的路径会不会是不只一条路径,可能还有多条路径,由于时间和精力的限制没有去深究,但是这应该值的思考的。
在用顺序栈来实现该程序之前,也尝试过用链栈来做,但是发现如果用链栈来做的话,在存储调用的时候不是很方便,或许用链栈来做应该是对自己的一种挑战。尽管没有用链栈做不过,用顺寻栈来做在编制该程序中也收获不小。
/(1)、定义头文件和预定义。
#include<>
#define maxsize 100
#define n 8
/(2)、数据类型定义。
int board[8][8定义棋盘。
数据库库课程设计
目录。引言11 开发环境1 1.1 硬件环境1 1.2 软件环境1 1.2.1 sql server 2005 delphi7简单介绍2 2 需求分析3 2.1 信息需求3 2.2 功能需求3 2.3 安全性与完整性要求3 3 概念结构设计3 4 逻辑结构设计4 5 数据库实现6 5.1 创建数据库...
数据库课程设计总结数据库课程设计个人总结
数据库课程设计个人总结 4班6组赵 王婆卖瓜时间过了,言归正传吧。凡是都要有个总结,以下便是我在这个课程设计中的一点心得。首先我分析一下我们组任务顺利完成的成功之处并总结一些经验,供以后反省参考用。凡事预则备,不预则废。这是我的座右铭,也是我深有感悟的几句古语之一。在这个项目的开始阶段,老师便让我们...
数据库课程设计
简单pos系统。班级 计科二班 姓名 韩田田 学号 201010510237 目录。前言。销售管理作为零售企业现代化管理不可缺少的组成部分,日益受到人们的重视。传统销售模式以及销售管理体系和机制,已经越来越难以适应零售企业现代化管理的需求。pos point of sales,销售终端的英文缩写 是...