八皇后问题课程设计报告_第1页
八皇后问题课程设计报告_第2页
八皇后问题课程设计报告_第3页
八皇后问题课程设计报告_第4页
八皇后问题课程设计报告_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、电子设计应用软件训练总结报告沈阳航空航天大学电子设计应用软件训练总结报告学生姓名: 专 业: 电子信息工程学院 班 级: 学 号: 指导教师: 张丽丽 训练时间:2010年7月12日到2010年7月24日电子信息工程学院电子设计应用软件训练任务1、PROTEL 部分(1) 熟练掌握PROTEL 软件的使用;(2) 按要求绘制电路原理图和PCB 版图(能够用自动布线和手动布线相结合);(3) 能够按要求建立元件库和封装库。 2、软件设计部分按照给定的软件设计任务完成相应的软件设计(见软件设计任务部分)。二、基本要求及说明1、PROTEL 部分(1) 电路原理图图纸尺寸按照给定的任务作相应的设置;

2、(2) 电路原理图见PROTEL 训练任务部分;(3) 按指定电路图在PROTEL 99 中绘制原理图和印制板图;(4) 按照给定要求创建原理图器件和该器件的相应的封装。根据给定的资料创建芯片 7805 及其封装形式。2、软件设计部分按软件设计要求实现相应的功能(见软件设计任务部分)三、按照要求撰写总结报告 成绩评定表评语、建议或需要说明的问题:指导教师签字: 日期:成 绩PROTEL 训 练 任 务软 件 设 计 任 务在8*8的棋盘上放8个(皇后)棋子的所有合理布局,布局的合理规则是:在棋盘上的任何一行,一列及任意一条对角线上,都不能出现两个棋子。算法的基本思想:利用试探和回溯的搜索技术求

3、解。若第k列棋子放在第I行上,不和棋盘上已有的棋子发生冲突,则继续为第k+1列的棋子寻求合适的位置。若I从1到8都不合适,则退而修改第k-1列棋子位置。直到k=8表示构成一个合理布局。试用非递归方法模拟上述过程。 PROTEL部分一、任务说明:1、PROTEL 部分(1) 电路原理图图纸尺寸按照给定的任务作相应的设置;(2) 电路原理图见PROTEL 训练任务部分;(3) 按指定电路图在PROTEL 99 中绘制原理图和印制板图;(4) 按照给定要求创建原理图器件和该器件的相应的封装。根据给定的资料创建芯片 7805 及其封装形式。二、原理图绘制说明:电路原理图的设计与绘制的流程,包括设置电路

4、图纸、放置元器件、调整元器件的布局、放置导线和添加注释等步骤。1、新建一个设计数据库文件和原理图文件,并打开原理图设计编辑器。新建原理图文件步骤:(1) 打开文件 -> 新建文件(如果当前已经有一个设计打开,则改为打开文件 -> 新建设计)。(2) 单击设计导航中的Document项,并执行文件 -> 新建命令打开New Document对话框。(3)双击New Document对话框 Document 选项卡中的Schematic Document图标,此时Protel将新建一个后缀名为.Sch的原理图文件。(如图1所示)图1 新建原理图文件(4)在设计导航中单击新建的原理

5、图文件打开原理图设计编辑器。(如图2所示)图2 原理图设计编辑器2、设置图纸环境点击设计 ->选项,打开文档选项对话框。根据要求设置为A4图纸。(如图3所示)图3 页面属性设置3、放置元件及原理图布线(1) 点击原理图管理器“浏览窗口”标签切换到原理图管理器。(2) 点击“浏览”下的下拉式l列表框,并从列表框中选择“库”项。(3) 在元件库中选择电路所需的元件,单击“放置”按钮,单击鼠标左键放置元器件,鼠标右键取消放置元器件的状态。(4) 双击元器件,改变其参数。(5) 单击画导线工具,将光标移到管脚处,单击鼠标左键进行连线。(6) 连接好整个电路图。三、印制版图绘制说明在绘制电路板之前

6、,要对电路板有一个总体的规划,具体包括电路板的物理尺寸、元器件的封装,以及各元器件的摆放位置等。印制板图的绘制主要分为以下几个步骤:1、生成网络表文件:(1) 单击要生成网络报表的原理图。(2) 选择“设计”菜单下的“创建网络表”弹出网络表对话框,设置网络表的各项参数。(3) 设置完网络创建对话框后单击OK按钮,此时将生成网络报表文件。2、制作PCB 元件 单击左侧的管理浏览器中的DOCUMENT图标,并新建一个默认名为PCBLIB1.LIB的文件。3、PCB 的设计(1)定义元器件的封装 原理图绘制完成后,正确加入网络表,系统会自动地为大多数元器件提供封装。(2)元器件布线规则的设置 这里主

7、要设置PCB板的禁线区的大小,只能在禁线区内绘制PCB版图。(3)生成并加载网络表 只有将网络表装入PCB系统后,才能进行电路板的自动布线。在设计好的PCB板上生成网络表和加载网络表,必须保证生成的网络表没有任何错误,其所有的元器件都能够加载在PCB板中。(PCB文件的建立如图8所示) 图8 新建PCB文件(4)元器件手工布局由于一般元器件自动布局都不很规则,甚至有的相互重叠,因此必须手动调整元器件的布局。(5)自动布线 设置好布线规则之后,可以利用系统提供的自动布线功能进行自动布线。(6)手工布线自动布线结束后,有可能因为元器件的布局使自动布线无法完全解决问题或产生布线冲突,此时就需要进行手

8、工布线加以调整。四、总结通过这一周的Protel课程设计,我认识了Protel软件,并且学会了如何使用这个软件,通过自己不断的练习画图,我已经能熟练掌握用Protel软件对所绘制电路进行简要分析,同时也了解了该软件的部分原理。刚开始的时候,用Protel软件设计电路对于初学者的我们来说是一个较为复杂的过程,掌握这个软件确实有一定的难度,从最开始的找元器部件就非常的困难,连线和删除等都还不熟练,封装的时候各部件的名称识别也比较困难,因此在刚开始做时就特别的浪费时间,但随着画的图越来越多,对各方面的功能也就掌握的比较熟练了。但在生成网络表时,却出现了很多的错误,由于我们对电路原理掌握的不多,因此找

9、起错误来就特别的麻烦。这时候,我们就寻求了老师的帮助,解决了困难,顺利的完成了我的第一周课设任务。我们是学习电子的,经常会接触电路板,应用这个软件,我们在电脑上进行全程设计,从原理图到PCB板,并且在电脑上可以进行检查,然后在实际中就可以作出电路板,十分方便,不会浪费资源。然后,也加强了我们的学习能力,写报告的时候,我也遇到了一些问题,也要老师没讲的,或者讲过,我们没有注意听,通过问老师,同学,并且自己看书,在电脑上不停的进行实践操作,使我更好的学习了Protel 99 SE。也加强了我们的动手操作能力。附录I 电路原理图附录II 印制板图五、参考文献1.作者:杜刚 书名:电路设计与制版Pro

10、tel应用教程 出版社:清华大学出版社 出版年2006 2.作者:张伟 书名:Protel 99 SE基础教程 出版社:人民邮电出版社 出版年2006年 3.作者:池之恒 书名:Protel DXP 电路原理图与电路板设计教程 出版社:海洋出版社 出版年:2004年 4.作者:郭燕春书名:Protel 2004电路原理图及PCB设计出版社:机械工业出版社5.作者:崔玮书名:Protel99SE电路原理图与电路板设计教程出版社:海洋出版社软件设计部分一、题目分析本次我的课程设计的题目是八皇后问题。要求是在8*8的棋盘上放8个(皇后)棋子的所有合理布局,布局的合理规则是:在棋盘上的任何一行,一列及

11、任意一条对角线上,都不能出现两个棋子。算法的基本思想:利用试探和回溯的搜索技术求解。若第k列棋子放在第I行上,不和棋盘上已有的棋子发生冲突,则继续为第k1列的棋子寻求合适的位置。若I从1到8都不合适,则退而修改第k-1列棋子位置。直到k8表示构成一个合理布局八皇后问题是一个古老而著名的问题,该问题是十九世纪著名的数学家高斯1850年提出的,并作了部分解答。高斯在棋盘上放下了八个互不攻击的皇后,他还认为可能有76种不同的放法,这就是有名的“八皇后”问题。在国际象棋中,皇后是最有权利的一个棋子;只要别的棋子在它的同一行或同一列或同一斜线(正斜线或反斜线)上时,它就能把对方棋子吃掉。所以高斯提出了一

12、个问题:在8*8的格的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后都不能处于同一列、同一行、或同一条斜线上面,问共有多少种解法。现在我们已经知道八皇后问题有92个解答。八皇后问题是一个比较有趣,也比较难求解的问题,我结合了数据结构的内容分析,运用了数组知识,数组的下标i表示棋盘上的第i列,ai的值表示皇后在第i列所放的位置。程序中首先假定a1=1,表示第一个皇后放在棋盘的第一列的第一行的位置上,然后试探第二列中皇后可能的位置,找到合适的位置后,再处理后续的各列,这样通过各列的反复试探,可以最终找出皇后的全部摆放方法。为了实现这些功能,我编写了place()函数、print()函数和

13、nqueen()函数。首先调用place()函数来判断摆放每个皇后是否合理,再调用nqueen()函数来检查此皇后棋子是否和棋盘上已有的棋子发生冲突,如果不冲突,则继续寻找下一个皇后的合适位置,如果冲突,则退而修改上一个皇后的位置。二、设计过程(程序流程图) 本程序是在主函数main的基础上运行的,由主函数main调用子函数place print nqueen来实现其全部功能。该程序采用回溯法。最后将结果输出并保存。1.主函数Main()Queen(1)结束图1 主函数流程图2place()子函数的设计:int place(int k) /判断k位置摆放皇后是否合理 int i=1; whil

14、e(i<k) if(Qi=Qk|(abs(Qi-Qk)=abs(i-k)return 0;/两个棋子如果在同一斜行或者同一列,则不成立 i+; return 1;此子函数是用来判断皇后棋子摆放的位置是否合理。首先定义列数为变量i,并赋值为1。若皇后棋子所在的列数i小于可以取得的列的最大值k,则此列存在,返回true,接着用一个表达式说明两个棋子如果在同一斜行或者同一列,则不成立,返回false,place函数流程图如下所示:返回false i+返回true定义整型变量i赋初值i=1皇后棋子在同一斜线或者在同一行上皇后的列数小于可取的最大值k开始YYNN 图2 place( )函数流程图3

15、print()子函数的设计:void print() /打印结果 for(int i=1;i<N+1;i+) printf("%d ",Qi); printf("n"); 此子函数是用来打印出每一个符合题目要求的棋子所在的行数。首先定义变量皇后棋子所在的列数,再判断此变量是否小于最大值N+1,若此命题为真,则输出皇后所在的行数,若为假,则返回。print()函数流程图如下所示:NY定义整型变量i,赋初值i=1i小于值N+1i+输出皇后棋子所在的行数开始返回 图3 print( )函数流程图4.nqueen()子函数的设计:void nqueen(i

16、nt k)/ int count=0; /解决方案数 while(k>=1) Qk+; while(Qk<=N&&!place(k) /从第一个位置开始试探摆第k个皇后 Qk+; if(Qk<=N) /第k个皇后安全时在棋盘内 if(k=N) /已经是第最后一个皇后则得到一个解决方案 count+; printf("%d ",count); print(); else k+; /继续处理下一个皇后 else Qk-=0; /第k个皇后安全时不在棋盘内,则回溯 此子函数是用来查找皇后棋子具体的位置。开始时定义自变量和列数k,判断列数是否大于等

17、于1,如果为真,则继续进行行数加1,如果为假,则返回。当棋子所在的行数小于行数的最大值并且在place函数中返回0时,则在此子函数中为真,则继续进行行数加1 ,如果为假,则回到初始时的判断。nqueen()函数流程图如下所示: NYYY开 始列数大于等于1Qk+Qk+行数小于等于最大值NK= =N将结果累加输出Qk-=0 k+返 回NNN行数小于等于最大值N且被调用的place函数也为定义解决方案数为0Y图4 nqueen( )函数流程图三、调试过程及实验结果调试分析:进行八皇后的排序后,有92种排法,我把92种结果运行出来实验结果:四、结论通过一周的软件课程设计,我对计算机软件技术基础有了更

18、深入的理解,我的课设题目是八皇后问题,为了做好课设,我不断的上网查阅资料和向老师的帮助,这对我解决问题有了很大的帮助,通过此次课设,我学会了什么叫做回溯法和试探法,还有递归与非递归的区别。当然,在程序运行过程中,我不可避免地遇到了很多问题,比如函数不能调用,功能无法实现,编译错误等等,经过老师、同学的帮助,程序终于可以正常运行了。我觉得出现错误并不可怕,重要的是我们要敢于发现错误。通过这次课设,我了解到了在编程过程中我们一定要有足够的耐心与细心。 五、参考文献1.王士元,C高级实用程序设计,清华大学出版社,19962.梁翎,C语言程序设计实用技巧与程序实例,上海科普出版社,20003.谭浩强,C程序设计,清华大学出版社,20054.潘锦平,软件系统开发技术,西安电子科技大学出版社,20005.徐宝文,李志,C程序设计语言,机械工业出版社,2004六、程序清单#include&l

温馨提示

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

评论

0/150

提交评论