数据处理实习报告

2022-07-15

在大学生涯中,毕业实习是每个大学生必然经历的阶段,这对于大学生提升实践能力和社会适应能力都非常重要,而一份优秀的实习总结能更好的提升大学生的实习收获。那么,优秀的实习总结该如何撰写呢?以下是小编整理的关于《数据处理实习报告》,供大家参考,更多范文可通过本站顶部搜索您需要的内容。

第一篇:数据处理实习报告

电子CAD实验报告与数据处理

《电子CAD技术》

实 验 报 告

物理与电子工程学院

自动化系

08自动化(2)班 方晨 08111013 实验

一、Protel 99 SE认识实验

如何修改密码?又如何增加和删除访问成员?

只有具备“Members”文件夹的“Write”权限的成员才能修改成员名称和密码,修改密码的操作步骤如下: ① 打开“Members”文件夹;

② 在设计窗口中双击需要修改密码的成员名称,或者在其上面双击鼠标右键,然后在调出的快捷菜单中选择“Properties”菜单项;

③ 在调出的对话框中根据需要对成员名称、名称描述和密码等进行修改; ④ 修改完后,单击“OK”按钮。

只有具备“Members”文件夹的“Create”权限的成员才能增加新成员,增加访问成员的操作步骤如下:

① 双击设计数据库,或者单击其前面的加号+,展开设计数据库的目录树。 ② 双击设计组文件夹“Design Team”,或者单击其前面的加号+,展开其目录树。 ③ 双击“Members”文件夹,以在设计器窗口中打开成员列表。 ④ 在右边设计窗口的空白处双击鼠标右键,然后在调出的快捷菜单中选择“New Member”菜单项。

增加访问成员还可以通过选择“File”菜单,然后在弹出的下拉菜单中选择“New member”菜单项。

⑤ 在调出的“User Properties”对话框中输入成员的名称描述(可省略)以及密码。

⑥ 单击“OK”按钮。操作完成后,新成员将出现在成员列表中。新增加的访问成员的权限由“Permissions”文件夹中的“[All members]”决定,用户可以进行修改。

只有具备“Members”文件夹的“Delete”权限的成员才能删除成员。删除成员的操作步骤如下:

① 打开“Members”文件夹。

② 删除的成员名称上单击鼠标右键,然后在调出的快捷菜单中选择“Delete”菜单项,。或者先选择要删除的成员名称,然后按下Delete 键。 ③ 在调出的“Confirm”对话框中单击“Yes”按钮即可。

实验

二、两级阻容耦合三极管放大电路原理图设计

五、思考题

为什么放置元件前应先加载相应的元件库?

答: 因为元件一般保存在元件库中,不加载相应的元件库就找不到元件。 电子元件数量庞大,如果每个元件都加载进来,对于运行程序来说压力太大了,会使软件的运行速度变得很慢,所以需要加载元件库。

实验

三、双路直流稳压电源电路原理图设计

习题4—8题

五、思考题

放置元件有哪几种方法?

四种方法:方法一,单击原件列表窗口下的“PLace”(放置)按钮,将某一原件电器图形符号拖到原理图编辑区,单击鼠标左键即可放置;方法二,点击画电路图工具栏内的图标 ;方法三,执行菜单命令“ PlacePart ”;方法四,点击元件管理器中的“ Place ”按钮或在元件管理器中双击所要放置的元件。

实验

四、原理图元件库编辑

五、思考题

如何对元件位置进行移动和旋转调整?

答;单个元件的移动: 将光标移至要移动的元件上,按住鼠标左键不放,将元件拖到合适的位置,松开鼠标左键即可。

多个元件的移动: 先选中多个元件;然后同时移动多个元件。

元件的旋转: 选中某一元件,按住鼠标左键不放,同时按空格键,每按一次元件旋转 90 ° ;或者在 按住鼠标左键不放时,同时按下 X 键或 Y 键。当按下 X 键时,元件左右翻转 180 °;当按下 Y 键时,元件上下翻转 180 °。

实验

五、三相桥式全控整流主电路原理图设计

四、思考题

元件引脚之间的连接有哪几种不同的方法? 答:有三种方法:

(1)直接连接法: 原件引脚之间直接用导线连接,即导线的始终两端都在引脚上,这种方法直观导线的连接明确,但是电路有一些复杂,画面比较杂乱。

(2)间接连接法:导线一端起于引脚,另一端终止于原理图任意一个空白处,也就是连接的的两引脚之间的连接导线中间是断开的,它们是通过放置在导线上的网络名称来表示相互间接的连接关系。用这种方法绘制的原理图画面清晰,简练,但在分析原件引脚之间的逻辑关系是不够直观。

(3)总线连接法:为了弥补间断连接法的连接关系不够直观的不足,对于数值电路中一些具有相关性信号线,或是走向相同的连接导线,用一条较粗的线表示,这就是总线。总线在图上没有任何电气意义,它表示这些导线束的走向,具体的连接关系和间断连接方法一样需要通过网络名称来判断。

实验

六、可控硅触发电路原理图设计

思考题:什么是零件封装,它和零件有什么区别?

答:(1)零件封装是指实际零件焊接到电路板时所指示的外观和焊点位置。

(2)零件封装只是零件的外观和焊点位置,纯粹的零件封装仅仅是空间的概念,因此不同的零件可以共用同一个零件封装;另一方面,同种零件也可以有不同的封装,如RES2代表电阻,它的封装形式有AXAIL0.4 、AXAIL0.3 、AXAIL0.6等等,所以在取用焊接零件时,不仅要知道零件名称还要知道零件的封装。

(3) 零件的封装可以在设计电路图时指定,也可以在引进网络表时指定。设计电路图时,可以在零件属性对话框中的Footprint设置项内指定,也可以在引进网络表时也可以指定零件封装。

实验

七、 8031单片机存储器扩展小系统电路原理图设计

四、思考题

Bus线与Wire有何区别?

总线比导线粗一点,总线本身没有实质的电气连接意义,必须由总线接出的各个单一导线上的网络名称来完成电气意义上的连接。而由总线接出的各个单一导线上必须要放置网络名称,具有相同网络名称的导线表示实际电气意义上的连接。 导线上可以放置网络名称,也可以不放。普通导线上一般不放网络名称。

层次电路原理图

MCU.prj

LED

CPU

POWER

层次电路设计方法适用于哪些情况?说明层次电路的设计步骤。

层次电路设计方法适用于复杂的、较大的电路原理图。层次电路设计方法通常有自上而下和自下而上两种方法。

1. 自上而下的层次电路设计 步骤 :

( 1 ) 执行菜单命令“ FileNew Design ”,创建一个新的设计数据库。

( 2 ) 执行菜单命令“ FileNew ”,创建一个新的原理图文件。

( 3 ) 放置方块图及放置方块电路进出点 。

( 4 ) 在各方块图的进出点之间连线。

( 5 ) 生成原理图

2. 自下而上的层次电路设计方法步骤:

( l ) 完成电路图的绘制。

( 2 ) 激活要放置方块图的原理图。

( 3 ) 执行菜单命令“ DesignCreate Symbol From Sheet ”,系统将列出当前打开的所有原理图。选择原理图,点击“ OK ”按钮。

( 4 ) 选择原理图后,屏幕上出现选择对话框,点击“ No ”按钮。

( 5 ) 在电路图中,光标变成十字状,且带有一个方块图,系统进入放置方块图状态,移动鼠标,在合适的位置点击鼠标即可完成此方块图的放

置。在方块图中,系统将自动产生与原理图中输入输出点对应的方块图进出点。

( 6 ) 重复上述步骤,直到所有模块的电路方块图都出现在电路图中。

( 7 ) 在各模块方块图进出点之间连线,最后便可得到方块电路图。

实验

八、印制电路板的设计环境及设置

实验

九、两级阻容耦合三极管放大电路PCB图设计

(1)敷铜有什么作用,应该注意些什么?

答:敷铜的主要作用是提高电路板的抗干扰能力,如果要对线路进行包导线或补泪滴,那么敷铜应该放在最后进行。

(2)导线、飞线和网络有什么区别?

答:导线也称铜膜走线,简称导线,用于连接各个焊点,是印刷电路板最重要的部分,印刷电路板设计都是围绕如何布置导线来进行的。

与导线有关的另外一种线,常称之为飞线也称预拉线。飞线是在引入网络表后,系统根据规则生成的,用来指引布线的一种连线。

飞线与导线是有本质的区别的。飞线只是一种形式上的连线,它只是形式上表示出各个焊点间的连接关系,没有电气的连接意义。导线则是根据飞线指示的焊点间连接关系布置的,具有电气连接意义的连接线路。

网络和导线是有所不同的,网络上还包括焊点,因此在提到网络时不仅指导线而且还包括和导线相连的焊点。

实验

十、制作元件封装

DIP12 LED8

LED

实验十

一、双路直流稳压电源电路PCB图设计

第二篇:XX测量数据处理实习心得体会

为期十天的建筑工程测量实习,不仅是我们对这学期所学知识的综合运用,更是在无形地教导我们如何做人。以下内容是品才网小编为您精心整理的测量数据处理实习心得体会,欢迎参考!

XX测量数据处理实习心得体会

一、理论是基础实践是根本

没有理论基础,我们就不能正确地分析问题,解决问题。所以我们进行测量实习前,这学期张老师经过对理论知识精细的讲解,我们踏踏实实的学习态度,致使我们很好地掌握了理论知识。对于学习建筑工程技术这一专业的学生,我们不仅要有丰富的专业理论知识,而且更应当有过硬的实践操作能力。

无人不知“实践是检查真理的唯一标准。”所以在掌握理论知识的基础上就是实践。《建筑工程测量》是这样,其它的还是如此。我们不能纸上谈兵,必须树立起理论是基础,实践是根本这一理念。只有这样我们才能真正做到学以致用,为建设中国特色社会主义而奉献自己的微薄之力。

二、明确目标制定计划

没有航向的船,永远也无法到达成功的彼岸。当然,没有目标的工作,永远也无法品尝成功的喜悦,所以我们这次测量实习首先明确了我们的目标。我们这次为期十天的测量实习的内容主要有三项,地形图测绘、建筑物放样、道路圆曲线测设。明确了目标,就应当为之拼搏。我们可不能盲目地拼搏,因为“凡事预则立,不预则废。”,所以我们在进行测量实习初就对测量实习的进程做了相关计划。终于让我们少走了许多曲折之路。比如,我们每天实习都有不同的内容和任务,那么我们准备仪器时就只带需要的仪器,而并非劳神、费力全都带到实习场地。虽然这是在实习期间的亲身体验,我们却对此受益终生。

三、树立起团结协作的团队意识

我们《建筑工程测量》实习并非单枪匹马就能完成任务,必须由大家共同努力才能完成。比如,在进行碎部点的测量时,在同一时间我们需要立尺人员立足、观测人员读取数据、记录人员记录数据、绘图人员绘制草图等。为此,我们需要让组员们树立起团结协作的意识,早日圆满完成实习任务。由此,我真的领悟到了“人心齐,泰山移。”的内涵了,正如抗日战争时期,没有国、共两党的合作,没有统一战线的形成,也许抗日战争将会持续更长时间。如果我们这次测量实习没有组员齐心协力地奋进,我们也根本不可能按时、按质、按量地完成实习任务。因此,团结协作是我们必然要做出的选择。

四、老师指导同学探讨

我们在实际操作过程中,离不开同学们的相互学习和探讨,更离不开张老师顶着烈日不畏艰辛仔细、耐心给我们的正确指导。让我们才茅塞顿开,思维也更加开阔,最终取得优异的成绩。

五、吃苦耐劳自强不息

大家都明白一点,我们学习建筑工程技术专业的学生以后的工作地方一般大多是室外露天工作,遇到风吹日晒是再所难免。正如我们这次测量实习一样,由于时间是夏季,所以天气炎热。于是我们许多时候都是利用早、晚的这一段时间工作,这就要求我们早出晚归。虽然不习惯,但这是我们必然的选择。选择吃苦耐劳,选择自强不息。终于一份耕耘,一份收获,我们组员用十天辛勤的汉水换回了实习工作的圆满结束。

一个测量工作是这样,其它的还是要求我们这样做啊!因为如此,才有新的希望。一场突如其来的特大汶川地震的降临,没有压到我们。这归功于党和国家的科学发展,更是我们拥有吃苦耐劳的品质和自强不息的精神为我们打下了坚定的信念——中国加油,中国雄起!

六、严格要求求真务实

没有规矩,不成方圆。我们在进行仪器操作时,务必按照正规的操作进行测量实习。我们实习相关内容时,也务必按照一定的程序进行。否则,我们将走许多曲折之路。这就告诉我们必须将时代性与规律性相结合,运用创造性思维思考问题,解决问题。当然,我们在严格要求的同时还应求真务实地不断进取。

七、存在问题不断完善

我们这些天的实习取得可喜可贺的成绩,但还是存在一些问题。因为我们是团队工作,所以在组织协调人员任务时还有少许不足。有些仪器操作生疏,测量误差大等问题。有问题不可怕,可怕的是不去解决问题。那么,解决问题,首先就要熟练牢固地掌握理论知识,用理论指导实践。其次是保持良好的心态,在不断总结中前进,达到熟能生巧,为我所用的目的。最后要树立起失败乃成功之母的观念,不耻下问,虚心学习。

为期十天的建筑工程测量实习,不仅是我们对这学期所学知识的综合运用,更是在无形地教导我们如何做人。我坚信学会做人更重于学会做事。这次实习将时刻铭记心底,将我的心得运用于今后的人生道路上。

XX测量数据处理实习心得体会

通过实际的测量实习,让我学到了很多实实在在的东西,比如对实验仪器的操作更加熟练,学会了地形图的绘制课堂上无法做到的东西,很大程度上提高了动手和动脑的能力,同时也拓展了与同学的交际、合作的能力。一次测量实习要完整的做完,单单靠一个人的力量和构思是远远不够的,只有小组的合作和团结才能让实习快速而高效的完成。从这十天的测量中,更重要的是让我明白了几个重要的人生的道理:

一、人与人之间的协作是相当重要的,如果要是互相配合的话,就会如同一盘散沙一样溃不成军,尤其是在配合如此重要的测量学中;

二、令人难忘的三周的测量实习终于结束了,我学会了很多东西,懂得了很多道理

在这些天的实习过程中,我的收获的确不小,不仅熟练的掌握了经纬仪和水准仪的使用,精确的测量距离,以及导线控制测量,还测量出了学校后花园的地形图。实际测量中,我虽然熟练了对仪器的操作,但同时也在暴露出了自己的缺陷和差距,尤其是对经纬仪的整平方面我还有很大的欠缺。通过实习中的不断练习,大大缩小了这方面的差距。

这次总实习给了我一次全面的、系统的实践锻炼的机会,巩固了所学的理论知识,增强了我的实际操作能力,我进一步从实践中认识到实习在工程测量这门课程中的重要性。我以后在工作中光有理论知识是不够的,还要能把理论运用到实践中去才行。

老师对我们的要求是:

(1)必须以认真、严谨的态度和高度负责的精神,完成全部实习环节。所有测量记录、计算数据、和设计图表都必须达到一定的规范要求;(2)我们必须接触、掌握小地区控制测量、沉降观测等的全部过程;(3)实习中要求我们随时笔记,同时要注意锻炼独立思考和处理问题的能力。(4)实习中要服从安排,严守纪律和作息时间,团结互助,尊重群众,爱护群众财物。注意自身和仪器设备的安全。

第一天我们首先熟悉仪器,我在有一个多学期没有碰过仪器的情况下,看到仪器确实有点陌生,但是通过看书和老师的指导很快就回忆起了大部分的理论知识。最初我们选择综合楼的沉降观测,依照要求,先在周围选几个控制点,再在综合楼上选择沉降观测点,然后就行动起来,每个人都很积极,跑来跑去,分工合作,等到快下课的时候就基本完成了。接下来的一个大任务就是小地区控制测量,这个任务一直到最后都还在测,整理数据,绘图等。开始一直都以为测量实在是太简单了,不就是到外面去玩玩吗,谁知道实践后才懂得辛苦。有时候忙了一个下午把任务完成后觉得蛮有成就感的,但是回寝室后和同学互相讨论起来,才知道我们错得太多了,白白忙了一下午,需要重测。这是我们的失误,原因是根本就没有分析透试验的要求。这是个教训,我们在此之后时刻想着“细心”两个字,在以后的每次读数中都反复读几遍,也就很少出错了。在实习前都要预习下次要做的内容,所以在接下来的测量中差错逐渐减少,当然速度相应也就快了,“细心”是我们提前完成任务的主要条件。

在实习过程中,技能的提高是一个方面,另外更重要的方面是我们领悟到了相互配合的重要,我们组共7个人,我们在开始的时候进度比别人慢,还走了许多冤枉路。经过调整分工后,效率明显提高,而且每人也都达到了练习,这可谓是成功的第二大因素。合作,在时时刻刻都是不可少的。在许多的工程中,不管是三峡大坝和青藏铁路那样的大工程,还是小民房那样的小工程,任你有再大的本事也无法完成,合作是必须的。

通过实习,达到了理论联系实际,进一步理解和掌握基础知识,全面培养了自己的综合运用本专业理论知识和实践动手能力,以及独立判断的处理问题和工程测量的实践能力,为将来从事此方面的工作奠定了基础。

这次实习虽然圆满的完成了任务,但在实习中遇到的问题是决不能忽略的,这问题正是我们寻找的,我们所需要的,我们的口号就是在实践中不断发现问题,不断解决问题,这样才能巩固我们所学的知识,为今后走向工作岗位打下坚定的基础。

第三篇:数据结构实习报告

数据结构第六次作业p134

——11411203张玉

24.

template

void SeqQueue::EnQueue(const T& x){//插入函数

if(IsFull()==true){

maxSize=2*maxSize;

elements[rear]=x;

rear=(rear+1)%maxSize;

}

elements[rear]=x;

rear=(rear+1)%maxSize;

};

template

bool SeqQueue::DeQueue(const T& x){//删除函数if(IsEmpty()==true) return false;

if(rear<=maxSize/4){

maxSize=maxSize/2;

x=elements[front];

front=(front+1)%maxSize;

}

x=elements[front];

front=(front+1)%maxSize;

return true;

};

29.

// 利用优先级队列实现栈和队列

#include

template class PQueue;//前视的类定义

template class Stack;

template class Queue;//优先级队列结点类的定义 template

class PQueueNode

{

friend class PQueue;//PQueue类作为友元类定义friend class Stack;

friend class Queue;

public:

PQueueNode(T &value, int newpriority, PQueueNode priority(newpriority), link(next) {}//构造函数 * next):data(value),

virtual T GetData() { return data; }//取得结点数据

virtual int GetPriority() { return priority; }//取得结点优先级

virtual PQueueNode * GetLink() { return link; }//取得下一结点地址

virtual void SetData(T& value) { data = value; }//修改结点数据

virtual void SetPriority(int newpriority) { priority = newpriority; } //修改结点优先级

virtual void SetLink(PQueueNode * next) { link = next; }//修改指向下一结点的指针 private:

T data;//数据

int priority;//优先级

PQueueNode *link;//链指针

};

//优先级队列的类定义

template

class PQueue

{

friend class Stack;

friend class Queue;

public:

PQueue():front(NULL), rear(NULL) {}//构造函数

virtual ~PQueue() { MakeEmpty(); }//析构函数

virtual void Insert(T &value, int newpriority);//插入新元素value到队尾 virtual T Remove();//删除队头元素并返回 virtual T Get();//读取队头元素的值 virtual void MakeEmpty();//置空队列

virtual int IsEmpty() { return front == NULL; }//判队列空否private:

PQueueNode *front, *rear;//队头指针, 队尾指针

};template

void PQueue::MakeEmpty()

{

//将优先级队列置空

PQueueNode *q;

while(front != NULL)//链不空时, 删去链中所有结点

{

//循链逐个删除

q = front;

front = front->link;

delete q;

}

rear = NULL;//队尾指针置空

}template

void PQueue::Insert(T &value, int newpriority)

{

//插入函数

PQueueNode *q = new PQueueNode(value, newpriority, NULL);if(IsEmpty())

front = rear = q;//队列空时新结点为第一个结点

else

{

PQueueNode *p = front, *pr = NULL;//寻找q的插入位置

while(p != NULL && p->priority >= newpriority) //队列中按优先级从大到小链接{

pr = p;

p = p->link;

}

if(pr == NULL)

{

//插入在队头位置

q->link = front;

front = q;

}

else

{

q->link = p;

pr->link = q;//插入在队列中部或尾部

if(pr == rear)

rear = q;

}

}

}

//删除队头元素并返回

template

T PQueue::Remove()

{

if(IsEmpty())

return NULL; PQueueNode *q = front;

front = front->link; //将队头结点从链中摘下

T &retvalue = q->data;

delete q;

if(front == NULL)

rear = NULL; return retvalue;

}

//读取队头元素的值

template

T PQueue::Get()

if(IsEmpty())

return NULL;

else

return front->data;

}

//(1) 栈的定义与实现

template

class Stack:public PQueue

{

//栈类定义

public:

Stack():PQueue() {} //构造函数

void Insert(T & value); //插入新元素value到队尾

};template

void Stack::Insert(T & value)

{

//插入函数

PQueueNode *q = new PQueueNode(value, 0, NULL); if(IsEmpty())front = rear = q;//栈空时新结点为第一个结点

else

{

//插入在前端

q->link = front;

front = q;

}

}// -------------------------- Queue //(2) 队列的定义与实现

template

class Queue:public PQueue

{

//队列类定义

public:

Queue():PQueue() {}//构造函数

void Insert(T & value);//插入新元素value到队尾

};template

void Queue::Insert(T & value)

{

//插入函数

PQueueNode *q = new PQueueNode(value, 0, NULL);

if(IsEmpty())

front = rear = q;//队列空时新结点为第一个结点

else

rear = rear->link = q;//插入在队尾位置

void main() {

Stack aStack;Queue aQueue;

int n = 1;

aStack.Insert(n);aQueue.Insert(n); }

第四篇:数据结构实习报告

班级:13软件二班

姓名:殷健 学号:1345536225

子集和数问题

1:问题描述

子集和数问题1:子集和问题的为〈W,c〉。其中,W={w1,w2,...,wn}是一个正整数的集合,子集和数问题判定是否存在W的一个子集W1,使得∑W1=c∑W(0

2:问题分析

程序中设计了函数void computeSumofSub(int s,int k,int r),其意义是从第k项开始,如果s(已经决策的和数)和w[k](当前元素)之和为和数,就把结果输出来,否则如果s与,w[k],w[k+1]之和小于和数,则调用computeSumofsub(s+w[k],k+1,r-w[k]),意为选择此结点的左分支,再判断s和后面所有元素之和是否不小于M(所有的加起来都小,必定无解),并且s+w[k+1]<=M(由于输入的数据要求是从小到大且无重复元素,所以若s+w[k+1])>M,也是无解),若条件符合即调用computeSumofSub(s,k+1,r-w[k]),即选择当前结点的右分支。

算法展示:

#include using namespace std; #include #include #define M 50 class SumOfSub{ private: int w[M];

int m; int x[M]; public: SumOfSub(int a[], int b, int n){

for(int i=0;i=m&&s+w[k+1]<= m){ x[k] = 0; computeSumOfSub(s, k+1, r-w[k]); } }

}; void main(){ int sum=0; int w[M]; srand((unsigned)time(NULL));

for(int i=0;i

} cout<<"随机数组为:"; cout<

cout<<"符合条件的子集为:"; for(int i=0; i<=k; i++){ } cout<

} cout<<"数组元素总和为:"<>m; sum=m*sum; cout<

复杂性分析: 对于不同的输入结果,算法的执行次数有所不同,最好情况是n,最坏情况是n*2^n。尽管差异很大,但当n很大时,对某些输入而言,回溯法仍可在短时间内求解。 其它说明: 按书中所讲的约束条件,程序中所有变量都是整型,输入的各元素要从小到大输入,而且不能有重复的元素。若是想要无序输入,可以程序中加入程序1.c的归并排序算法,对输入的数组排序即可。

拓展一

问题描述: 子集和数问题拓展一:子集和问题的为〈W,c,p〉。其中,W={w1,w2,...,wn}是一个正整数的集合,子集和数问题判定是否存在W的一个子集W1,使得∑W1=c∑W(0

问题分析:

增加一个数组p,使得p的每个元素与w对应元素关系为pi=Wi+10;最后结果W子集中元素个数越多,则p和最大,但也可以将每个符合条件子集对应P集合的元素和计算出做个比较,然后输出最大的再对应原W子集。

算法演示

#include using namespace std; #include #include #define M 50 class SumOfSub{ private: int w[M];int p[M];int m; int x[M];

int N[M];int max;int j; public: SumOfSub(int a[], int b, int n){

max=0;j=0;

for(int i=0;i

w[i]=a[i];

p[i]=a[i]+10;

}

m = b;

x[0]=n; } void computeSumOfSub(int s, int k, int r){ x[k] = 1; if(s+w[k] == m){ printResult(k); cout<<">

} else if(s+w[k]+w[k+1] <= m){ computeSumOfSub(s+w[k],k+1,r-w[k]); } if(s+r-w[k]>=m&&s+w[k+1]<= m){ x[k] = 0; computeSumOfSub(s, k+1, r-w[k]); } } void printResult(int k){

int S=0;int i;

cout<<"符合条件的子集为:";

for(i=0; i<=k; i++){ if(x[i] == 1){

S=S+p[i];

cout<

}

cout<<"p和为:"<

cout<

if(S>max){

max=S;

int J=0;

for(i=0;i<=k;i++){

if(x[i]==1){

N[J]=w[i];

J++;

}

}

j=J;

} } void special(){

cout<

for(int i=0;i

cout<

}

cout<

for(int i=0;i

w[i]=rand();

if(w[i]==0){

w[i]=rand();

}

sum=sum+w[i]; } cout<<"随机数组为:"; for(i=0;i

cout<<<<">>m; sum=m*sum; cout<<">

r += w[i]; } sumOfSub.computeSumOfSub(0, 0, r);

sumOfSub.special(); } 运行结果

复杂性分析

对于不同的输入结果,算法的执行次数有所不同,最好情况是n,最坏情况是n*2^n。尽管差异很大,但当n很大时,对某些输入而言,回溯法仍可在短时间内求解。

拓展二

问题描述

子集和数问题拓展一:子集和问题的为〈W,c,P〉。其中,W={w1,w2,...,wn}是一个正整数的集合,子集和数问题判定是否存在W的一个子集W1,使得∑W1=c∑W(0

问题分析

增加一个数组随机数组P,每个符合条件子集对应P集合的元素和计算出做个比较,然后输出最大的再对应原W子集。

算法演示

#include <<<"><<"> using namespace std; #include #include #define M 50 class SumOfSub{ private: int w[M];int p[M];int m;

int x[M];int N[M];int max;int j; public: SumOfSub(int a[], int b, int n){

max=0;

j=0;

cout<<"随机数组p为:";

for(int i=0;i

w[i]=a[i];

p[i]=rand();

cout<

}

cout<

m = b;

x[0]=n; } void computeSumOfSub(int s, int k, int r){ x[k] = 1; if(s+w[k] == m){ printResult(k); cout<<" ";

} else if(s+w[k]+w[k+1] <= m){ computeSumOfSub(s+w[k],k+1,r-w[k]); } if(s+r-w[k]>=m&&s+w[k+1]<= m){ x[k] = 0; computeSumOfSub(s, k+1, r-w[k]); } } void printResult(int k){

int S=0;int i;

cout<<"符合条件的子集为:";

for(i=0; i<=k; i++){ if(x[i] == 1){

S=S+p[i];

cout<

}

cout<<"p和为:"<

cout<

if(S>max){

max=S;

int J=0;

for(i=0;i<=k;i++){

if(x[i]==1){

N[J]=w[i];

J++;

}

}

j=J;

} } void special(){

cout<

for(int i=0;i

cout<

}

cout<

for(int i=0;i

w[i]=rand();

if(w[i]==0){

w[i]=rand();

}

sum=sum+w[i]; } cout<<"随机数组w为:"; for(i=0;i

cout<<<"><<"><>m; sum=m*sum; cout<<">

r += w[i]; } sumOfSub.computeSumOfSub(0, 0, r);

sumOfSub.special(); }

运行结果

复杂性分析

对于不同的输入结果,算法的执行次数有所不同,最好情况是n,最坏情况是n*2^n。尽管差异很大,但当n很大时,对某些输入而言,回溯法仍可在短时间内求解。

第五篇:数据结构实习报告

一、需求分析

1、 程序所实现的功能;

2、 程序的输入,包含输入的数据格式和说明;

3、 程序的输出,程序输出的形式;

4、 测试数据,如果程序输入的数据量比较大,需要给出测试数据;

5、 合作人及其分工

二、设计说明

1、 主要的数据结构设计说明;

2、 程序的主要流程图;

3、 程序的主要模块,要求对主要流程图中出现的模块进行说明

4、 程序的主要函数及其伪代码说明 (不需要完整的代码) ;

5、 合作人设计分工

三、上机结果及体会

1、 合作人编码分工

2、 实际完成的情况说明(完成的功能,支持的数据类型等);

3、 程序的性能分析,包括时空分析;

4、 上机过程中出现的问题及其解决方案;

5、 程序中可以改进的地方说明;

6、 程序中可以扩充的功能及设计实现假想;说明:

1、 如果程序比较大,可以将设计说明分为概要设计和详细设计两部分。概要设计主要负责程序的流程、模块、抽象数据类型设计;详细设计负责程序的数据类型定义和主要函数的说明。

2、 设计说明中,不需要写出代码或者模块的详细代码,只需要写出主要函数的伪代码说明。

上一篇:十九大活动新闻稿下一篇:说话也是一种学问

本站热搜