BX110937李建辉算法设计实验六
- 格式:docx
- 大小:110.80 KB
- 文档页数:11
实验一基尔霍夫定律的验证一.实验目的1.验证基尔霍夫定律,加深对基尔霍夫定律的理解。
2.掌握直流电流表的使用以及学会用电流插头、插座测量各支路电流的方法。
3.学习检查、分析电路简单故障的能力。
二.原理说明基尔霍夫定律:基尔霍夫电流定律和电压定律是电路的基本定律,它们分别描述结点电流和回路电压,即对电路中的任一结点而言,在设定电流的参考方向下,应有ΣI =0。
一般流出结点的电流取负号,流入结点的电流取正号;对任何一个闭合回路而言,在设定电压的参考方向下,绕行一周,应有ΣU =0,一般电压方向与绕行方向一致的电压取正号,电压方向与绕行方向相反的电压取负号。
在实验前,必须设定电路中所有电流、电压的参考方向,其中电阻上的电压方向应与电流方向一致,见图1-1所示。
图1-1三.实验设备1.直流数字电压表、直流数字电流表;2.恒压源(双路0~30V可调);3.NEEL-003A组件。
四.实验内容实验电路如图1-1所示,图中的电源U S1用恒压源I路0~+30V可调电压输出端,并将输出电压调到+6V,U S2用恒压源II路0~+30V可调电压输出端,并将输出电压调到+12V(以直流数字电压表读数为准)。
开关S1 投向U S1 侧,开关S2 投向U S2 侧,开关S3 投向R3侧。
实验前先设定三条支路的电流参考方向,如图中的I1、I2、I3所示,并熟悉线路结构,掌握各开关的操作使用方法。
1.熟悉电流插头的结构,将电流插头的红接线端插入数字电流表的红(正)接线端,电流插头的黑接线端插入数字电流表的黑(负)接线端。
2.测量支路电流将电流插头分别插入三条支路的三个电流插座中,读出各个电流值。
按规定:在结点A,电流表读数为…+‟,表示电流流入结点,读数为…-‟,表示电流流出结点,然后根据图1-1中的电流参考方向,确定各支路电流的正、负号,并记入表1-1中。
表1-1 支路电流数据3.测量元件电压用直流数字电压表分别测量两个电源及电阻元件上的电压值,将数据记入表1-2中。
深圳大学实验报告课程名称:计算机系统(3)实验项目名称:存储体系实验学院:*****专业:******************指导教师:*******报告人:**** 学号:****** 班级:************* 实验时间:2017年12月21日星期四实验报告提交时间:2017年12月21日星期四教务处制实验六并行结构实验一、实验目的学习多核机器上的pthread编程,观察SMP上多线程并发程序行为;了解并掌握消除SMP上cache ping-pong效应的方法;学习NUMA内存访存特性二、实验内容实验包括以下几个部分:1)以一个计数程序作为起点(20分),先简单并行化(30分);2)然后修正其并发执行的同步问题(30分);3)修正其并发度问题(20分)4)选做:解决其cache的ping-pong效应问题,最后形成一个比较理想的SMP并发程序(20)。
三、实验环境硬件:PC或任何一款具有cache的功能的计算机软件:Windows/Linux操作系统、C语言编译器、pthread库四、实验步骤及相关说明要求学生学习SMP上的pthread库多线程编程,按要求编写程序代码逐步完成实验操作。
1)编写一个完整程序用于统计一个数组中数值“3”出现的个数,统计核心样例代码如下:程序一核心统计代码(不含主函数、线程创建代码等)int *array; 待处理的数组int length; 数组元素的个数int count 统计结果int count3s(){int i;count=0;for(i=0;i<length;i++){if(array[i]==3){count++;}}return count;}编写完整程序,要求arrary元素足够多,256M以上,初始化为“030303…”模式。
运行后记录执行时间。
2)对上述程序完成多线程化的改造,用pthread编写多线程程序,每个线程所执行的统计代码以下列代码为模板:程序二线程化的核心统计代码(不含主函数、线程创建代码等)int *array; //待统计的数组int length; //每个线程划分到的元素个数int count; //统计出来的“M”个数int t; //线程数,取值为处理器核数void count3s_thread(int id) //id为创建线程时传入的线程号{/*compute portion of the array that this thread should work on*/int length_per_thread=length/t; //每个线程分担的元素个数int start=id*length_per_thread; //本线程负责的数组下标起点for(i=start;i<start+length_per_thread;i++) //遍历本线程负责的所有元素{if(array[i]==3){count++; //将统计结果增1}}}完成主程序设计,将数组array等分为几部分,每个部分由一个线程执行count3s_thread()统计“3”的出现次数——保存在count共享变量中,实现多线程并发统计的功能。
说明:
1.本次上机内容分两次上机完成。
2.将本文档改名为“学号_姓名_班级_Lab6.doc”,按照本说明完成以下实验内容;
3.在下下次上机(13周)时通过课程中心提交本文档。
实验内容和实验要求(上机指导P137)
1.练习题一
思考题及问题
答案:
2.练习题二运行结果截图:
思考题及问题
3.练习题三运行结果截图:
4.练习题四运行结果截图:
思考题及问题:
自测练习1.自测练习一
2.自测练习二
3.自测练习三
运行结果截图:
4.自测练习四
5.自测练习五
源程序文本:(提示:带参数的宏定义)
6.自测练习六
运行结果截图:
7.自测练习七
8.自测练习八源程序文本:。
《算法与数据结构》实验指导书实验课程类别:课程内实验实验课程性质:必修适用专业、年级:2012级计算机大类开课院、系:计算机科学与工程学院学时:18编写依据:《算法与数据结构》实验教学大纲修订时间:2014年2月《算法与数据结构》课程实验指导书(以下简称:指导书)是针对计算机学院所开设的对应课程的上机实验而编写的教学文件,供学生上机实验时使用。
上机的工作环境要求:Windows 2000或以上操作系统、VC++ 6.0或者其它高级程序设计语言。
学生应按指导教师的要求独立完成实验,并按要求撰写实验报告。
每一个实验,编程上机调试并且提交电子文档实验报告,以学号姓名作为文件名上传。
报告内容至少包含如下内容:1、学生基本情况:专业班级、学号、姓名2、实验题目、实验内容3、设计分析4、源程序代码5、测试用例(尽量覆盖所有分支)6、实验总结一.实验内容与学时分配序次实验题目实验类型基本技能训练学时一线性结构综合应用基础性(1)掌握线性结构的常用操作;(2)能够应用线性结构解决比较简单的问题。
10二非线性结构综合应用设计性(1)掌握树形、图形结构的插入、删除、查找等算法;(2)能够应用二叉树解决比较简单的问题。
4三查找技术综合应用设计性(1)熟练掌握查找的常用算法;(2)设计和应用查找算法解决简单的实际问题。
2四排序技术综合应用基础性(1)熟练掌握常用的排序方法,并掌握用高级语言实现排序算法的方法;(2)深刻理解排序的定义和各种排序方法的特点,并能加以灵活应用;(3)了解各种方法的排序过程及其依据的原则,并掌握各种排序方法的时间复杂度的分析方法。
2二.实验说明实验一、线性结构综合应用(一)顺序表的应用1、实验目的:(1)掌握用VC++上机调试线性表的基本方法;(2)掌握顺序表的存储结构以及基本运算的实现。
2、实验内容约瑟夫环问题:设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,m为任意一个正整数。
目录实验一线性表ﻩ错误!未定义书签。
(一)实验目的............................................................................................................... 错误!未定义书签。
(二) 实验内容ﻩ错误!未定义书签。
(三)实验报告ﻩ错误!未定义书签。
实验二堆栈ﻩ错误!未定义书签。
(一)实验目的 .............................................................................................................. 错误!未定义书签。
(二)实验内容 .............................................................................................................. 错误!未定义书签。
(三) 实验报告................................................................................................................. 错误!未定义书签。
实验三队列..................................................................................................................... 错误!未定义书签。
(一) 实验目的ﻩ错误!未定义书签。
(二) 实验内容................................................................................................................. 错误!未定义书签。
许昌学院计算机科学与技术学院《面向对象C++程序设计》课程实验教学手册创新源于实践《面向对象C++程序设计》课程实验教学手册姓名:任亚南学号:1101120103专业:计算机科学与技术班级:2012 级 1 班任课教师:李梅莲时间:2013 年6 月14 日综合成绩:许昌学院计算机科学与技术学院制实验手册使用及要求实验操作是教学过程中理论联系实际的重要环节,而实验报告的撰写又是知识系统化的吸收和升华过程,因此,实验报告应该体现完整性、规范性、正确性、有效性。
现将实验报告撰写的有关内容说明如下:1、预习报告必须在实验前完成。
2、实验前按实验要求手写程序或程序填空,并走查代码,有疑问处标记,上机时在C++集成开发环境下输入并调试手写程序,分析运行结果,如实填写实验过程及实验中存在的问题及解决办法。
3、实验结束后填写通过后的源程序和对实验的总结。
4、通过后的源程序可以手写也可以打印粘贴。
实验情况一览表实验一实验名称:c++基础练习实验性质:设计性学时数: 2 成绩:一、实验目的1.熟悉使用Visual C++ 或VS2005等集成开发环境编写和实现C++程序过程2.掌握C++程序的基本格式与规范3.熟悉C++基本的输入输出操作4.理解作用域运算符的概念与基本使用方法5.new和delete运算符二、实验要求实验前预习教材第1章,事先按要求填充或编写好实验程序,上机调试和运行程序,分析实验中遇到的问题。
三、实验所需器材与软件微型计算机; C++集成开发工具软件(VC++6.0、CFree、VS2005等)四、实验过程:设计源程序1:编写一个简单程序,输出“Welcome you”,并给程序加一行注释“First c++ program”。
#include <iostream>using namespace std;int main(){1) cout<<"Welcome you"<<endl;2) //first c++ program ;return 0;}实验结果设计源程序2:输入以下程序,如果有错误,请修改直到正确,分析运行结果。
电子信息学院实验报告书评语:实验态度:认真()一般()较差()实验结果:正确()部分止确()错()实验理论:掌握()熟悉()了解()生疏()操作技能:较强()一般()较差()实验报告:较好()一般()较差()成绩:指导教师:-王淮亭批阅时间:2014年05月05日1. 实验目的(1) 初步掌握动态规划算法(2)能够运用动态规划的思想解决实际问题,如矩阵连乘问题等2. 实验要求(1)n 个矩阵连乘问题。
(2) 应用顺推实现动态规划求解 n 行m 列边数值矩阵最大的路程,已知n 行m 列的边数值矩阵, 每一个点可向右或向下两个去向,试求左上角顶点到右下角顶点的所经边数值和最大的路程。
(3)求解点数值矩阵最小路径,随机产生一个n 行m 列的整数矩阵,在整数矩阵中寻找从左上角至右下角,每步可向下(D)或向右(R)或斜向右下(0)的一条数值和最小的路径。
(4) 应用递推实现动态规划求解序列的最小子段和。
(5)插入加号求最小值,在一个n 位整数a 中插入r 个加号,将它分成r+1个整数,找出一种加号的插入方法,使得这 r+1个整数的和最小。
3. 实验原理动态规划的基本思想:动态规划法的实质也是将较大问题分解为较小的同类子问题,这一点上 它与分治法和贪心法类似。
但动态规划法有自己的特点。
分治法的子问题相互独立,相同的子问题 被重复计算,动态规划法解决这种子问题重叠现象。
贪心法要求针对问题设计最优量度标准,但这 在很多情况下并不容易。
动态规划法利用最优子结构,自底向上从子问题的最优解逐步构造出整个 问题的最优解,动态规划则可以处理不具备贪心准则的问题4. 实验设备PC 机5. 实验步骤(1) 刻画最优解的结构特性; (2) 递归定义最优解值;(3) 以自底向上方式计算最优解值; (4)根据计算得到的信息构造一个最优解。
其中,第(1 )至(3)步是动态规划算法的基本步骤。
最优解值是最优解的目标函数的值6. 实验结果“行劇法加 P白白白白詞 1巨巨巨巨民旳戈买BB^f ¥胆2LX證序年入入入辎0前前前融淨■十;\和冈细朗U^\计尊机幫用亘法和齢诒计谋眸\计諒叽氢迭实那D 亡匕口熱吕注与宅畑*三.回TbJJ7 •实验体会通过这次实验加深了我对动态规划算法的理解,通过这五个实验使我熟练掌握动态规划算法, 使我对动态规划算法,分治法,贪心算法有了区别的认识,动态规划算法融合了分治法和贪心法的 优点,更好的解决问题,实验有利于加深理论的理解,非常实用。
附:源程序第一题源程序: #in elude <stdio.h> void mai n(){in t d,n ,i,j,k,t,r[1OO],m[1OO][1OO]; printf (”请输入矩阵的个数 n:");21确请4自c-&列0 整28九序yt 丁4,亦ke -2巖y 需。
子子an个2--- Press图6-1 n 个矩阵连乘问题图6-2应用顺推实现动态规划求解n 行m 列边数值矩阵最大的路程424,图6-3递推实现动态规划求解序列的最小子段和图6-4插入加号求最小值int a[50][50],l[50][50],r[50][50];char st[50][50]; t=time()%1000;sra nd(t);prin tf(" 请输入数字三角形的行数n:"); sca nf("%d",&n);for(i=1;i <n ;i++) j=ra nd();for(j=1;j<=33;j++) pri ntf(" ");pri ntf(" A \n ”);for(i=1;i<=n ;i++){for(j=1;j<=37-4*i;j++) pri ntf("");for(j=1;j<=i;j++) pri ntf(" . "); prin tf("\n\n");for(j=1;j<=36-4*i;j++) pri ntf("");for(j=1;j<=i;j++){l[i][j]=ra nd()/1000+1;pri ntf("%4d",l[i][j]);r[i][j]=ra nd()/1000+1;pri ntf("%4d",r[i][j]);} prin tf("\n");}for(j=1;j<=37-4*(n+1);j++) printf("");for(j=1;j<=n+1;j++) printf(".");printf(”底边\n\n ”);for(i=n;i>=1;i--){for(j=1;j<=i;j++)if(a[i+1][j]+l[i][j]<a[i+1][j+1]+r[i][j]){a[i][j]=a[i+1][j]+l[i][j];st[i][j]=T;}else{a[i][j]=a[i+1][j+1]+r[i][j];st[i][j]='r';}}prin tf("\n 最短路程为:%d",l[1][1]);prin tf("\n 最短路径为:顶点A ");for(j=1,i=1;i<=n ;i++)if(st[i][j]==T)prin tf("L-%d-",l[i][j]);else{pri ntf("R-%d-",r[i][j]);j++;}printf("底边。
\n");}第三道题程序:随机产生一个n行m列的整数矩阵,在整数矩阵中寻找从左上角至右下角,每步可向下(D)或向右(R)或斜向右下(0)的一条数值和最小的路径。
应用动态规划,即从右下角逐行反推至左上角。
确定n,m后,随机产生的整数二维数组a(n,m)作矩阵输出,同时赋给部分和数组b(n,m)。
这里数组b(i,j) 为点(i,j)到右下角的最小数值和,stm(i,j) 是点(i,j)向右(R)或向下(D)或向右下(0)的路标字符数组。
注意到最后一行与最后一列各数只有一个出口,于是由b(n,m)?开始向左逐个推出同行的b( n,j),(j=m-1,...,2,1); 向上逐个推出同列的b(i,m),(i=n-1,...,2,1) 。
b(i,j) 与stc(i,j)(i=n-1,...,2,1,j=m-1,...,2,1)) 的值由同一列其下面的整数b(i+1,j) 与同一行其右边的整数b(i,j+1)或其右下方的b(i+1,j+1)的值决定:首先,作赋值b(i,j)=yb+b(i+ 1, j + 1): stc(i, j) = "O".( 其中变量yb 为原b(i,j) 的值)。
然后,求b(i+1,j) 与b(i,j+1) 的最小值min。
如果b(i+1,j+1)>min , 说明前面为b(i,j) 赋值不对,作修改:b(i,j)=yb+mi n若min 为b(i+1,j), 则stc(i,j)="D", 否则stc(i,j)="R"这样反推所得b(1,1)即为所求的最小路径数字和。
为了打印最小路径,利用c数组从上而下操作:先打印a(1,1),i=1,j=1.若stc(i,j)="R" 则j增1,即j=j+1,然后打印"-R-"与右边整数a(i,j);若stc(i,j)="D" 则i增1,即i=i+1,然后打印"-D-"与下面整数a(i,j);若stc(i,j)="O" 则i,j均增1,即i=i+1,j=j+1, 然后打印"-O-" 与斜向右下整数a(i,j);《数据库原理及应用》实验报告-6依此类推,直至打印到终点a(n,m)。
第四道题程序:#i nclude <stdio.h>#i nclude <stdlib.h>#in elude <time.h>void mai n(){ int i,j,k,t ,n ,s,smi n,q[1000],a[1000];t=time(0)%1000;sra nd(t);printf(”序列中n个正负项,请确定n:");sca nf("%d",&n);printf(" 序列的%d个整数为:\n ”,n);for(i=1;i<=n ;i++){t=ra nd()%(4* n)+10;if(t%2==1) a[i]=-1*(t-1)/2;else a[i]=t/2;prin tf("%d,",a[i]);}smi n=1000;q[0]=0;for(j=1;j<=n ;j++){if(q[j-1]>=0) q[j]=a[j];else q[j]=q[j-1]+a[j];if(q[j]<smi n){smi n=q[j];k=j;}}prin tf("\n 最小子段和为:%ld\n" ,smi n);for(s=0,i=k;i>=1;i--){ s+=a[i]; if(s==smi n) break; }printf(" 最小子段从序列的第%d项到第%d项。
\n",i,k);}第五道题程序:#i nclude <stdio.h>#in elude <stri ng.h>void mai n(){ char sr[16];int n,i,j,k,u,r,b[16],t[16],c[16][16];double f[17][17],d;prin tf(" 请输入整数:");scan f("%s",sr);n=strle n( sr);printf(”请输入插入的+号个数r:");scan f("%d",&r);if(n<=r){printf(" 输入的整数位数不够或r太大!\n ");return;}printf(" 在整数%s中插入%介+号,使和最小:\n",sr,r);for(d=0,j=0;j<=n _1;j++)b[j]=sr[j]-48;for(i=1;i<=n ;i++)for(j=1;j<=r;j++)f[i][j]=1e16;for(d=0,j=1;j<=n ;j++){d=d*10+b[j-1];f[j][0]=d;}for(k=1;k<=r;k++) for(i=k+1;i<=n ;i++)《数据库原理及应用》实验报告for(j=k;j<i;j++)。