过程控制软件技术基础课程实验报告
实验项目:二叉树的建立和遍历
姓名: 戚风亮
学号: 1008180230
指导教师: 任登凤
1. 实验目的
通过自主设计实验,掌握过程控制软件的基础理论知识,本实验具体表现为二叉树的建立和遍历,为以后计算机控制的软件设计提供基础。提高逻辑思维方式,培养应用可视化编程工具开发计算机软件的能力。
2. 实验内容
本文主要介绍二叉树的建立和遍历。所使用的编程软件为matlab2010版本,主要使用其中的GUI功能,完成可视化界面操作。从更直接的角度感受二叉树的建立和遍历。
二叉树的建立和遍历包含两个方面:建立和遍历。其中建立包括输入二叉树的每一个结点的元素,以及二叉树每一个结点的随机存储地址。与此同时,更重要的是创建两个指针域:左指针域L和右指针域R,在本次实验中,采用产生随机数的方式生成随机存储地址,采用两个数组代表两个指针域。二叉树的遍历采用递归函数的方式,本实验中采用三个函数Front,Middle,Behind分别实现前序、中序以及后序的功能。
(1)界面的设计:
软件的设计界面见图1。
图1 软件的总体界面
界面中主要包括以下几个部分:
a. 深度m的输入框:此输入框在输入某个数值后将决定二叉树的深度,值得注意的是:本次实验中的设计标准为4层,即最大为4层。当输入数值大于4时,将提示出错(见图2),并要求重新输入。
图2. 出错消息提醒框
同时,当输入层数小于4时,软件将自动消去最后的那几层结点。(见图3)
图3. 软件自动按要求生成二叉树层数
b. 二叉树结点元素输入框:
二叉树结点元素输入框用于输入每个结点的元素值,同时按照二叉树的规则,每一个根结点对应至少两个子结点,即如果根结点的值为空(没有值),则它的子结点输入框不得输入,即其enabled属性为false(背景色为灰色,见图3)。当根结点输入值后,子结点输入框即可输入(见图4)。
与此同时,由于matlab的GUI中,没有向VB中的line控件,所以必须用代码加以实现,在matlab中,函数annotation可以用来画箭头,具体如下:
arr(1,1)=annotation(gcf,'arrow',[0.5 0.35],[0.8 0.75]);
其中,后面的两组数据为坐标值,arr(1,1)表示第一排的第一个箭头,在matlab中的每个图象都对应一个句柄值,这样,所有箭头都对应各自的句柄值,进而形成一个所有箭头的数组,便于管理每一个图像。
图4. 根结点输入后子结点方可输入
c. 控制按钮:生成二叉树
生成二叉树的主要功能是,将没有输入值的结点以及箭头隐藏,同时为每一个结点分配随机的存储地址(见图5),进而形成左右指针域。
图5. 最终形成的二叉树
如图5所示,在每个结点的左边有一个数字,即代表该结点在内存中的随机地址。该数字由matlab内部函数randperm产生。如:
data=randperm(5) 即产生1——5的5个随机数(各不相同),并赋值给数组data。
本次实验中,最关键的是左右指针域的建立,即左右数组的建立。为实现这个功能,创建函数[L,R,VV]=point。
其中L表示左指针域,R代表右指针域,VV代表值域。至此,二叉树已完全建立。
d. 重置按钮:将界面设置为初始状态
e. 退出按钮:退出系统
f. 前序按钮:生成二叉树的前序遍历。(中序按钮、后序按钮依次类推)
3. 软件总体结构、程序流程图
软件总体结构:
(1)软件界面总体上有三个部分:
输入界面 二叉树总体结构
控制界面 二叉树最终形成
结果界面 二叉树遍历显示
(2)软件程序总体上有以下几个方面:
a. 名为gouzao的函数:该函数输入参数为输入框的坐标(x,y),返回该输入框的特点。即只有该输入框存在值时,它对应的子结点输入框方可输入。这里所谓的存在值的相反面是“非空”,而并非“空字符串”。
b. 名为point的函数:该函数没有输入参数,但可以返回左指针域、右指针域以及值域。其调用格式为[L,R,VV]=point。
c. 名为Front、Middle、Behind的函数:这三个函数分别返回前序遍历、中序遍历、后序遍历的结果。
d. 名为Erchashu的函数:该函数为matlab的GUI中系统自动生成的m文件格式的函数。它是整个系统的中枢,整合了以上的所有函数。
程序流程图:
图6. 程序流程图
4. 实验中遇到的问题及解决方法
本次实验中主要有以下两个:
(1)在设置每个结点的回调函数时,应首先判断根结点是否为控制,所谓控制并非“‘ ’”,即无法用string=“”判断,而是利用empty判断。这样防止根结点在输入后又删除之后产生的不符合规定的结果。
(2)递归函数的建立:
在matlab中,函数的参数值无法实现按地址传递,只能按值传递,这就意味着递归函数不能像VB中那样地建立。为此,在每一次回调函数时,必须先将必要的参数寄存在一个变量中,本实验中利用句柄的“userdata”属性,将值储存在变量中,在利用时,再将变量值取出。本实验中使用了写文件方式,将数据先写入外部文件中,所以在不同机器上运行时,应注意文件所在的目录。
5. 实验的独到见解
虽然本次实验能完成所有预定功能,但毕竟二叉树是在预先定义好的情况下产生的,比如二叉树的层数最多支持四层等等,都在一定程度上影响了程序的通用性。
第二篇:实验总结报告
实验报告
专业:______ 姓名:______ 学号:______日期:______ 桌号:______________ 课程名称: 模拟电子技术基础实验 指导老师: 成绩:________________ 实验名称: 实验总结报告
一、体会与收获
在这个学期中,我们一共完成了从常用电子仪器的使用到EDA 半导体器件特性仿真等五个实验课题。具体的实验情况在实验报告中已经很清楚的反映了。在此我想谈谈我的体会与收获。
首先,我们在试验中面临着很多问题。实验仪器就是其中之一。实验室中的很多仪器:示波器、交流毫伏表,确实是由于年代久远而不能正常工作。但我发现,很多同学在实验现象没出来的情况下就借口说是实验仪器的问题。其实不然。很多情况下,仪器没有调试好,导致现象不明显或者与理论相差甚远。
在做基本运算电路设计实验时,通过老师上课精彩的讲解使我感受到了一种“新的世界观”,认识到了理论学习和实验的区别,在以后做实验的时候要对所有器械保持怀疑的心态,坚持“自己测的才是准的”原则。
通过解决每一次实验出现的问题,我在做实验的时候变得更加有耐心。在连接电路前,都会认真分析一下实验原理。然后根据实验书和老师的ppt上的步骤一步一步的来做。果然,出现错误的几率小了很多。其次,做实验要养成好的习惯。很多同学在做实验的时候态度很随便。没有注意诸如:连线之前检查导线是否导通、用万用表测电阻时不质疑短接调零、链接电路是带电操作等等。也许,在很多人看来这些都是小问题。但真正每一次都做到一丝不苟,养成良好的习惯的同学并不多。
接下来,我想说的是实验的目的。刚开始,我认为实验是一项任务,只要完成了就行。无非就是照着课本连连线、得出个已经计算好的结果就行了。但自从自己做功放后我改变了这种看法。在做功放的时候,虽然原理图都是被人提前设计好的。但是在做得时候总是会需要自己去调试、布线。有时候看似连接的很完美的电路,可能会因为某个地方的虚焊而不能工作。这种情况非常锻炼你能力。在找错误的地方的时候你自然而然的明白了电路的原理。而且,当做好一个自己独立完成的功放后,会有一种成就感。
最后,我想说实验跟课本的理论相结合,在课本中学习,在实验中检验。在实验中发现,用课本知识去分析。兴趣就在这一个个的实验中激发了。当然,我明白大学的最终目的不是让我们去做一些诸如功放之类的东西,而是锻炼我们去探索、去发现、去学习的能力。可能我们做的某项东西很简单或者没有做成功,但那并不是失败,因为你已经学习到了许多。耐心并且细心的去做每一步,坚持严谨的态度做到最后。每一个人都是成功者。
二、意见与建议
对模电实验的建议:
①老师在讲课过程中的实物演示部分,可以用幻灯片播放拍摄的操作短片,或是在大屏幕上放出实物照片进行讲解,因为用第一排的仪器或元件直接讲解的话看的不是很清楚。
②实验室里除了后面的几台,前面也时不时有示波器故障,如果没有发现示波器已故障的话会给实验带来麻烦。因此希望老师可以教几个识别示波器是否故障的方法。
1
③选题方面,从元件的认识逐渐过渡到焊电路板进行实验,内容涵盖面合理,没有更多的建议了。
感谢老师半学期来的教诲和指导!
三、课程评价
在大学二年级的第一学期,我们按课程计划,完成了模电实验课程的学习,我感到收获很大。 老师在讲解实验课程时:教学内容丰富,授课生动、详细,思路清晰,富有逻辑性、启发性,而且善于激励学生兴趣,经常产生师生互动;他理论知识功底深厚,实践经验丰富,并且能够理论联系实际,举例生动形象,对模电的理论学习有很大帮助;教学方式得当,能够因材施教,给学生一个相对自我发展的空间。
他讲课时语言幽默,平易近人,关心学生,深受同学好评;讲课过程中认真负责,严格要求,把教书育人很好地结合起来。
通过模电实验课程,增强了我的动手能力,帮助我在以后的学习生活中能够顺利解决一些难题。希望学校今后能够为学生多开类似的课程,让在校的学生得到更多的锻炼机会。
2