云南大学 软件学院 大学物理实验6
大学物理实验6 简谐振动的合成
云南大学软件学院 实验报告课程: 大学物理实验 学期: 任课教师: 班级: = 学号: == 序号: = 姓名: = 成绩:实验6 简谐振动的合成内容一 同方向同频率简谐振动的合成两个简谐振动的方程为使用matlab 编写程序,求x1,x2,合振动的波形,讨论相位差对合成振动的影响。
相位差至少讨论4中情况(1.为0°;2.为180°;3.小于180°;4.大于180°),要求所有波形画在同一个figure 中。
()()⎩⎨⎧+=+=222111cos cos ϕωϕωt A x t A x内容二 相互垂直方向同频率简谐振动的合成两个简谐振动的方程为使用matlab 编写程序,求x,y,合振动的波形,讨论相位差对合成振动的影响。
相位差至少讨论4中情况(1.为0°;2.为180°;3.小于180°;4.大于180°),要求所有波形画在同一个figure 中。
()()⎩⎨⎧+=+=y y x x t A y t A x ϕωϕωcos cos内容三相互垂直方向不同频率简谐振动的合成(李萨如图形) 使用matlab编写程序,画李萨如图形,要求:1.至少4种频率比2.至少8种相位差3.所有图形画在同一个figure中,添加标注。
如:cleart = 0:0.01:4;Ax = 1;Ay = 3;w1 = 1; w2 = 1./2;w3 = 2./3;w4 = 3./4;w5 = 2./5;m0 = 0;m1 = 0;m2 = pi./4;m3 = pi./2;m4 = 3.*pi./4;m5 = pi;m6 = 5.*pi./4; m7 =3.*pi./2;m8 = 7.*pi./4; x0 = Ax.*cos(2.*pi*t+m0);y11 = Ay.*cos(2.*w1.*pi*t+m1);y12 = Ay.*cos(2.*w1.*pi*t+m2);y13 = Ay.*cos(2.*w1.*pi*t+m3);y14 = Ay.*cos(2.*w1.*pi*t+m4);y15 = Ay.*cos(2.*w1.*pi*t+m5);y16 = Ay.*cos(2.*w1.*pi*t+m6);y17 = Ay.*cos(2.*w1.*pi*t+m7);y18 = Ay.*cos(2.*w1.*pi*t+m8);y21 = Ay.*cos(2.*w2.*pi*t+m1);y22 = Ay.*cos(2.*w2.*pi*t+m2);y23 = Ay.*cos(2.*w2.*pi*t+m3);y24 = Ay.*cos(2.*w2.*pi*t+m4);y25 = Ay.*cos(2.*w2.*pi*t+m5);y26 = Ay.*cos(2.*w2.*pi*t+m6);y27 = Ay.*cos(2.*w2.*pi*t+m7);y28 = Ay.*cos(2.*w2.*pi*t+m8);y31 = Ay.*cos(2.*w3.*pi*t+m1);y32 = Ay.*cos(2.*w3.*pi*t+m2);y33 = Ay.*cos(2.*w3.*pi*t+m3);y34 = Ay.*cos(2.*w3.*pi*t+m4);y35 = Ay.*cos(2.*w3.*pi*t+m5);y36 = Ay.*cos(2.*w3.*pi*t+m6);y37 = Ay.*cos(2.*w3.*pi*t+m7);y38 = Ay.*cos(2.*w3.*pi*t+m8);y41 = Ay.*cos(2.*w4.*pi*t+m1);y42 = Ay.*cos(2.*w4.*pi*t+m2);y43 = Ay.*cos(2.*w4.*pi*t+m3);y44 = Ay.*cos(2.*w4.*pi*t+m4);y45 = Ay.*cos(2.*w4.*pi*t+m5);y46 = Ay.*cos(2.*w4.*pi*t+m6);y47 = Ay.*cos(2.*w4.*pi*t+m7);y48 = Ay.*cos(2.*w4.*pi*t+m8);y51 = Ay.*cos(2.*w5.*pi*t+m1);y52 = Ay.*cos(2.*w5.*pi*t+m2);y53 = Ay.*cos(2.*w5.*pi*t+m3);y54 = Ay.*cos(2.*w5.*pi*t+m4);y55 = Ay.*cos(2.*w5.*pi*t+m5);y56 = Ay.*cos(2.*w5.*pi*t+m6);y57 = Ay.*cos(2.*w5.*pi*t+m7);y58 = Ay.*cos(2.*w5.*pi*t+m8);subplot(5,8,1);plot(x0,y11);Axis([-4 4 -4 4]);text(-16,0,'ω =1');text(-2,7,'0');text(-16,7,'相位差');subplot(5,8,2);plot(x0,y12);Axis([-4 4 -4 4]);text(-2,7,'π/4'); subplot(5,8,3);plot(x0,y13);Axis([-4 4 -4 4]);text(-2,7,'π/2'); subplot(5,8,4);plot(x0,y14);Axis([-4 4 -4 4]);text(-2,7,'3π/4'); subplot(5,8,5);plot(x0,y15);Axis([-4 4 -4 4]);text(-2,7,'π');subplot(5,8,6);plot(x0,y16);Axis([-4 4 -4 4]);text(-2,7,'5π/4'); subplot(5,8,7);plot(x0,y17);Axis([-4 4 -4 4]);text(-2,7,'3π/2'); subplot(5,8,8);plot(x0,y18);Axis([-4 4 -4 4]);text(-2,7,'7π/4'); subplot(5,8,9);plot(x0,y21);Axis([-4 4 -4 4]);text(-16,0,'ω = 1/2'); subplot(5,8,10);plot(x0,y22);Axis([-4 4 -4 4]);subplot(5,8,11);plot(x0,y23);Axis([-4 4 -4 4]);subplot(5,8,12);plot(x0,y24);Axis([-4 4 -4 4]);subplot(5,8,13);plot(x0,y25);Axis([-4 4 -4 4]);subplot(5,8,14);plot(x0,y26);Axis([-4 4 -4 4]);subplot(5,8,15);plot(x0,y27);Axis([-4 4 -4 4]);subplot(5,8,16);plot(x0,y28);Axis([-4 4 -4 4]);subplot(5,8,17);plot(x0,y31);Axis([-4 4 -4 4]);text(-16,0,'ω = 2/3'); subplot(5,8,18);plot(x0,y32);Axis([-4 4 -4 4]);subplot(5,8,19);plot(x0,y33);Axis([-4 4 -4 4]);subplot(5,8,20);plot(x0,y34);Axis([-4 4 -4 4]);subplot(5,8,21);plot(x0,y35);Axis([-4 4 -4 4]);subplot(5,8,22);plot(x0,y36);Axis([-4 4 -4 4]);subplot(5,8,23);plot(x0,y37);Axis([-4 4 -4 4]);subplot(5,8,24);plot(x0,y38);Axis([-4 4 -4 4]);subplot(5,8,25);plot(x0,y41);Axis([-4 4 -4 4]);text(-16,0,'ω = 3/4'); subplot(5,8,26);plot(x0,y42);Axis([-4 4 -4 4]);subplot(5,8,27);plot(x0,y43);Axis([-4 4 -4 4]);subplot(5,8,28);plot(x0,y44);Axis([-4 4 -4 4]);subplot(5,8,29);plot(x0,y45);Axis([-4 4 -4 4]);subplot(5,8,30);plot(x0,y46);Axis([-4 4 -4 4]);subplot(5,8,31);plot(x0,y47);Axis([-4 4 -4 4]);subplot(5,8,32);plot(x0,y48);Axis([-4 4 -4 4]);subplot(5,8,33);plot(x0,y51);Axis([-4 4 -4 4]);text(-16,0,'ω = 2/5'); subplot(5,8,34);plot(x0,y52);Axis([-4 4 -4 4]);subplot(5,8,35);plot(x0,y53);Axis([-4 4 -4 4]);subplot(5,8,36);plot(x0,y54);Axis([-4 4 -4 4]);subplot(5,8,37);plot(x0,y55);Axis([-4 4 -4 4]);subplot(5,8,38);plot(x0,y56);Axis([-4 4 -4 4]);subplot(5,8,39);plot(x0,y57);Axis([-4 4 -4 4]);subplot(5,8,40);plot(x0,y58);Axis([-4 4 -4 4]);。
云南大学软件学院Java实验六
云南大学软件学院实验报告姓名:王定欢学号:20141120188专业:软件工程日期:2016-10-27 成绩:JAVA实验六一、实验目的:熟悉类的继承以及子类、抽象类的使用。
会使用子类、抽象类,会使用相关构造方法。
二、实验要求:Part1:Write a program called CollegeCourse that computes the cost of taking a college course. Include a constructor that requires a course ID number.Add a subclass Lab to compute a lab fee for a course that uses a lab. Write a program UseCourse to use the classes. Save the programs as CollegeCourse, Lab, and UseCourse. Put them all in a package called b6.For example, the output could be:The cost of your course is $180.0there is a $25.00 lab fee.The cost of your course is $205.0Part2:Create an abstract Auto(汽车) class with fields for the car make and price. Include get and set methods for these fields; the setPrice() method is abstract.Create two subclasses for individual automobile makers (for example, Ford and Chevy) and include appropriate setPrice() methods in each subclass. Finally, write a program that uses the Auto class and subclasses to display information about different cars.Sample Output:A new Ford costs $20000.0A new Chevy costs $22000.0三、实验内容:Part1、CollegeCourse.javapackage b6;public class CollegeCourse {public static String Id = "a123456";public double computCost(){d ouble cost = 180.0;return cost;}}Lab.javapackage b6;public class Lab extends CollegeCourse{public double LabFee(){double labFee = 25.0;return labFee;}}UseCourse.javapackage b6;public class UseCourse{public static void main(String[] args){CollegeCourse cost = new CollegeCourse();Lab labFee = new Lab();System.out.println("Your course Id is:"+CollegeCourse.Id);System.out.println("The cost of your course is:"+putCost());System.out.println("There is a $"+bFee()+" labFee");System.out.println("The cost of your courseis:"+(putCost()+bFee()));}}实验结果:Your course Id is:a123456The cost of your course is:180.0There is a $25.0 labFeeThe cost of your course is:205.0Part2、Auto.javapackage Auto;abstract class Auto {public String carMake;public double price;public void setMake(String carMake){ this.carMake = carMake;}public String getMake(){return carMake;}abstract void setPrice(double price);abstract double getPrice();}Chevy.javapackage Auto;//抽象类不能实例化对象public class Chevy extends Auto{//重写父类方法void setPrice(double price) {// TODO Auto-generated method stubthis.price = price;}double getPrice() {// TODO Auto-generated method stubreturn price;}}Ford.javapackage Auto;public class Ford extends Auto{//抽象类不能实例化对象,不能声明为抽象类@Override//重写父类方法void setPrice(double price) {// TODO Auto-generated method stubthis.price = price;}double getPrice() {// TODO Auto-generated method stubreturn price;}}AutoTest.javapackage Auto;public class AutoTest {public static void main(String[] args) {// TODO Auto-generated method stubFord f = new Ford();Chevy c = new Chevy();f.setPrice(20000);c.setPrice(22000);System.out.println("A new Ford costs:"+f.getPrice());System.out.println("A new Chevy costs:"+c.getPrice());}}实验结果:Part3、附加题:Shape.javapackage Shape;public abstract class Shape {public Shape(){}public abstract double computePerimeter();public abstract double computeArea();public abstract String getType();}class Circle extends Shape{private double radius;public Circle(double radius){//super();this.radius = radius;}public double computePerimeter(){return Math.pow(radius, 2);}public double computeArea(){return Math.pow(radius, 2)*Math.PI;}public String getType(){return"Circle";}}class Rectangle extends Shape{private double length;private double wide;public Rectangle(double length,double wide){super();this.length = length;this.wide = wide;}public double computePerimeter(){return (length+wide)*2;}public double computeArea(){return length*wide;}public String getType(){return"Rectangle";}}class Triangle extends Shape{private double b1,b2,b3;public Triangle(double b1,double b2,double b3){ super();this.b1 = b1;this.b2 = b2;this.b3 = b3;}public double computePerimeter(){return b1+b2+b3;}public double computeArea(){double s = (b1+b2+b3)/2;return Math.sqrt(s*(s-b1)*(s-b2)*(s-b3));}public String getType(){return"Rectangle";}}ShapeInfo.javapackage Shape;public class ShapeInfo {public void printShapeInfo(Shape s){System.out.println("图像类型:"+s.getType());System.out.println("周长:"+putePerimeter());System.out.println("面积:"+puteArea());}}Test.javapackage Shape;public class Test {public static void main(String[] args) {// TODO Auto-generated method stubShape cir = new Circle(4);Shape rec = new Rectangle(5,8);Shape tri = new Triangle(6,6,6);Shape[] shape = new Shape[3];shape[0] = cir;shape[1] = rec;shape[2] = tri;ShapeInfo info = new ShapeInfo();for(Shape s : shape){i nfo.printShapeInfo(s);}}}实验结果:四、实验总结:通过本次实验,认识到了继承、父类、子类之间的关系,同时还学会了如何灵活运用抽象类,继承抽象类的子类必须对基类中的所有抽象方法进行重写,抽象类不能被实例化。
云南大学实验六运算器实验指导书剖析
EL-JY-II计算机组成原理实验系统简介一、系统组成:EL-JY-II系统由两大部分组成:1、基板:本部分是8位机和16位机的公共部分,包括以下几个部分:1)数据输入和输出电路2)显示及监控电路3)脉冲源及时序电路4)数据和地址总线5)8255扩展实验电路6)单片机控制电路和键盘操作部分7)与PC机通讯的接口电路8)主存储器电路9)微代码输入及显示电路9)电源电路10)CPLD实验板(选件)11)自由实验区(面包板)2.CPU板:本板分为8位机和16位机两种,除数据总线和地址总线分别为8位和16位以外,都包括以下几个部分:1)微程序控制器2)运算器3)寄存器堆4)程序计数器5)指令寄存器6)指令译码电路7)地址寄存器8)数据和控制总线二、系统布局:系统布局分别见图1和图2。
三、使用说明及要求1.本系统分为三种实验操作方式:方式一:开关控制操作方式;方式二:键盘控制操作方式;方式三:PC机联机操作方式。
2.本系统采用正逻辑,即“1”代表高电平,“0”代表低电平;3.指示灯亮表示相应信号为高电平,熄灭表示相应信号为低电平;4.实验连线时应按如下方法:对于横排座,应使排线插头上的箭头面向自己插在横排座上;对于竖排座,应使排线插头上的箭头面向左边插在竖排座上;5.为保证实验的成功,每次实验之前均应认真阅读实验指导书,接线要按要求,确保正确无误且接触良好;6.应严格按照实验指导书的实验步骤和先后顺序进行实验,否则有可能造成实验不成功甚至损坏芯片。
方式一:开关控制操作方式:1.在各种控制信号中,有的是低电平有效,有的是高电平有效,请注意区别,具体可参见各个实验指导。
2.总线是计算机信息传输的公共通路。
为保证总线信息的正确无误,总线上每次只能有一个控制信号有效,如果同时有两个或两个以上同时有效,会产生总线竞争而造成错误甚至损坏芯片。
故每次开始实验操作时均要先使置所有控制开关电路的控制信号为“1”,高电平,对应的指示灯亮。
云南大学软件学院计算机网络原理实验五和六-17年金老师班
实验五、六传输层协议分析实验报告序号:姓名:学号:2016 成绩1.实验目的:理解TCP报文首部格式和字段的作用,TCP连接的建立和释放过程,TCP数据传输过程中编号与确认的过程;分析UDP协议报文格式。
2.实验环境:连网环境,可以是局域网,也可以是连入Internet的单机。
3.实验步骤:(1)启动Etherel协议分析软件,并开始抓包。
(2)启动某个基于TCP的应用程序,例如连接某个FTP站点,或通过浏览器访问某个网页。
(3)等出现浏览的网页后停止数据包的捕获。
(4)出现协议分析界面,将filter 一栏填入tcp,则只显示TCP协议信息,通过此信息,可以看到TCP连接的三次握手过程和协商的初始的序列号,数据传输过程以及拆除连接的相应信息。
4.实验分析,回答下列问题实验五 TCP协议分析打开捕获文件,通过捕获的数据包分析TCP建立连接的三次握手的过程,并将TCP建立连接过程中的三个报文填写下来。
字段名称第一条报文第二条报文第三条报文报文序号 1 2 3Sequence Number 0 0 1 Acknowedgement Numbber 0 1 1ACK 0 1 1SYN 1 1 0(1)TCP建立连接时的三个报文,其报文首部与其他TCP报文有什么不同?都使用了SYN 协议。
TCP 建立连接时的三个报文的首部都具有Options 字段,且其Sequence 和Acknowedgement Numbber为0或者1。
SYN是发送标志位,ACK是确认标志位。
(2)报文首部的OPTION字段的作用是什么?值为多少?表明本端所能接收的最大长度的报文段。
值为12bytes。
(3)分析TCP数据传输阶段的前8个报文,将报文信息填入到表中数据传送阶段第一个报文的序号字段值是否等于连接建立时第三个报文的序号?相等(4)捕获一个拆除TCP连接的数据包,附上捕获截图,主要要包含拆除连接的数据包部分,分析TCP释放连接的过程,选择TCP释放连接过程当中的四个报文,将报文信息填在下表。
云南大学软件学院报告
课程:数据结构实验学期:2014-2015学年第一学期任课教师:专业:信息安全学号:姓名:成绩:实验5 图基础实验一、实验目的1.掌握图的存储结构及其遍历。
二、实验软硬件环境(CPU、OS、IDE):三、实验任务(要求写出核心代码,并对运行结果截图)1)使用邻接矩阵和邻接表储表示分别实现如下给定的图1、图2、图3所示图的物理存储结构。
2)在1)所建立的图形存储结构上分别实现深度优先搜索遍历和广度优先搜索遍历,并给出遍历结果(序列)。
图3 有向图实验代码:#include<stdio.h>#include<stdlib.h>#define MAXVEX 20#define OK 1#define ERROR 0#define OVERFLOW -1#define INFINITY 65535#define QueueSize 20 //队列中最大元素个数typedef int QElemType; //队列的元素的类型typedef int VertexType;typedef int EdgeType;typedef enum{False,True}Boolean; //Boolean是布尔类型,其值是ture或false Boolean visited[MAXVEX]; //访问标志的数组。
typedef struct{VertexType vexs[MAXVEX];EdgeType arc[MAXVEX][MAXVEX];int numVertexes,numEdges;} MGraph; //邻接矩阵。
typedef struct EdgeNode //边表结点。
{int adjvex;struct EdgeNode *next;}EdgeNode;typedef struct VertexNode //顶点表结点。
{int data;EdgeNode *firstedge;}VertexNode,AdjList[MAXVEX];typedef struct{AdjList adjlist;int numVertexes,numEdges; //图中当前顶点数边数。
云南大学软件学院数据结构实验六实验报告——赫夫曼编码译码器
云南大学软件学院数据结构实验报告(本实验项目方案受“教育部人才培养模式创新实验区(X3108005)”项目资助)实验难度: A □ B □ C □学期:任课教师:实验题目: 实验五树及其应用小组长:联系电话:电子邮件:完成提交时间:年月日云南大学软件学院2010学年秋季学期《数据结构实验》成绩考核表学号:姓名:本人承担角色:课题分析,算法设计,程序编写,后期调试,完成实验报告综合得分:(满分100分)指导教师:年月日(注:此表在难度为C时使用,每个成员一份。
)云南大学软件学院2010学年秋季学期《数据结构实验》成绩考核表学号:姓名:本人承担角色:课题分析,算法设计,后期调试,完成实验报告综合得分:(满分100分)指导教师:年月日(注:此表在难度为C时使用,每个成员一份。
)(下面的内容由学生填写,格式统一为,字体: 楷体, 行距: 固定行距18,字号: 小四,个人报告按下面每一项的百分比打分。
难度A满分70分,难度B满分90分)一、【实验构思(Conceive)】(10%)(本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计、算法等相关知识)1.数据结构算法的知识:●树的定义。
●树的节点和边的表示。
●树的存储结构。
●树的分类:二叉树—》Heffman树。
●树的遍历:前序遍历,中序遍历,后序遍历。
2.面向对象的程序设计相关知识:●C#基本语法知识。
●类的定义,实例化。
●对象的生成调用。
●变量的传递。
二、【实验设计(Design)】(20%)(本部分应包括:抽象数据类型的功能规格说明、主程序模块、各子程序模块的伪码说明,主程序模块与各子程序模块间的调用关系)本实验创建了四个类Form类//用于窗口的初始化,控制各控件的属性和动作Data类//用于本程序所需的频度表数组的生成以及调用HuffmanTree类//用于构造Huffman树以及控制树的各项操作HuffmanTreeNode类//用于构造Huffman树的节点抽象数据类型的功能规格说明:窗口初始化:private void Form1_Load(object sender, EventArgs e)转换模式:private void button1_Click(object sender, EventArgs e)private void button1_Click(object sender, EventArgs e)开始按钮:private void button3_Click(object sender, EventArgs e)声明全局数组:public member[] allMembers = new member[27];定义结构体数组:public struct member{public char ch;//保存频度字符public int frequentness;//保存频度}Data的构造函数(创建Huffman树)public Data()Data类中的寻找当前最大项函数:public int FindMax()Data类中的寻找当前第二大项函数:public int FindSecondMax()Data类中的计算当前有效项的数目的函数:public int Count() HuffmanTreeNode类中创建节点的构造函数:public HuffmanTreeNode (char ch2 ,int frequentness2)HuffmanTree类中定义的节点类型:public HuffmanTreeNode root,p,r; HuffmanTree类中实例化一个Data类来构造频度表:public DatafrequentnessTable; HuffmanTree类中的构造函数,创建一棵Huffman树:public HuffmanTree() HuffmanTree类中的成员函数,对于指定的字符实行中序遍历,遍历完之后逆向回溯得到该字符的Huffman编码:public int SearchTree()HuffmanTree类中的两个节点变量,用于判断左右子树:public int SearchTree()主程序模块伪代码说明:创建新的字母频度表:frequentnessTable = new Data();创建栈来倒装输出赫夫曼编码:Stack<char> HuffmanCode = Stack<char>;退出程序:this.Close()子程序伪代码说明(HuffmanTree):构建Huffman树:public HuffmanTreeNode root,p,r;核心程序段(生成Huffman编码):while (r == root){r = p.parent;if (p == r.left)HuffmanCode.Push('1');//栈中存1elseHuffmanCode.Push('0');//栈中存0p = p.parent;}返回栈中元素个数:public int count { get{ return list.Count; } }主程序模块与各子程序模块间的调用关系:Class Form1调用Class Data初始化程序所要的各项数据。
云南大学软件学院数据结构实验报告六
云南大学软件学院数据结构实验报告(本实验项目方案受“教育部人才培养模式创新实验区(X3108005)”项目资助)实验难度:A□ B □ C ■序号学号姓名成绩12指导教师:(签名)学期:2012秋季学期任课教师:实验题目: 图及其应用小组长:联系电话:电子邮件:完成提交时间:2012年12月 20日云南大学软件学院2012学年秋季学期《数据结构实验》成绩考核表学号:姓名:本人承担角色:小组长综合得分:(满分100分)指导教师:年月日学号:姓名:本人承担角色:组员综合得分:(满分100分)指导教师:年月日(注:此表在难度为C时使用,每个成员一份。
)一、【实验构思(Conceive)】(10%)(本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计、算法等相关知识)本实验要求设计一个校园导游系统,要求通过图这一数据结构计算两点之间的最短距离,实现校园导航功能。
首先要收集校园景点信息和景点之间的距离信息,然后利用图存储校园景点信息和景点之间的距离信息,最后使用Dijkstra算法计算最短路径。
离散数学相关知识:正确合理使用与或非之间的关系,进行程序分支判断,保证程序正常进行,以及图的使用。
二、【实验设计(Design)】(20%)本次实验使用C进行编写,自定义函数2个:void init_graph(graph *g)//图的初始化函数void shortest_path(graph *g,int s, int t,int n)//求最短路径的算法主函数为功能选择界面三、【实现描述(Implement)】(30%)主函数显示开始界面,选择相应的功能求最短路径。
人性化设计:1.在输入出现错误时例如功能选择错误时,程序会给出友好的提示;2. 界面友好,容易上手。
四、【代码】(10%)#include<iostream>#include<stdio.h>#include<stdlib.h>#include<windows.h>#define INFINITY 9999 //最大距离#define MAX_NODES 30 //最大结点数int dist[MAX_NODES][MAX_NODES]; //dist[i][j]表示i、j连线的权重int path[MAX_NODES];using namespace std;typedef struct VertexType{char* sight; //景点名称//char* info; //景点描述}VertexType; //定义顶点的类型typedef struct{int vexnum;VertexType vex[MAX_NODES];}graph;void init_graph(graph *g){int a,x,y=0;g->vexnum = 27;g->vex[0].sight="云大西二门";g->vex[1].sight="百家道";g->vex[2].sight="文典广场";g->vex[3].sight="云大会堂";g->vex[4].sight="中山邦翰楼";g->vex[5].sight="仰止楼";g->vex[6].sight="桦苑";g->vex[7].sight="楠苑";g->vex[8].sight="格物楼";g->vex[9].sight="楠苑体育场";g->vex[10].sight="知味堂";g->vex[11].sight="楠苑超市";g->vex[12].sight="综合服务楼";g->vex[13].sight="楸苑";g->vex[14].sight="力行楼";g->vex[15].sight="软件楼";g->vex[16].sight="校医院";g->vex[17].sight="明远楼";g->vex[18].sight="至公大道";g->vex[19].sight="行政办公楼";g->vex[20].sight="云大北门";g->vex[21].sight="文汇楼";g->vex[22].sight="余味堂";g->vex[23].sight="梓苑超市";g->vex[24].sight="梓苑";g->vex[25].sight="钟楼";g->vex[26].sight="校车乘车点";for(x=0;x<g->vexnum;x++)for(y=0;y<g->vexnum;y++)dist[x][y]=INFINITY;//下边是可直接到达的景点间的距离,由于两个景点间距离是互相的,所以要对图中对称的边同时赋值 dist[0][1]=dist[1][0]=10;dist[1][2]=dist[2][1]=20;dist[2][3]=dist[3][2]=20;dist[1][4]=dist[4][1]=50;dist[4][5]=dist[5][4]=200;dist[4][6]=dist[6][4]=130;dist[5][7]=dist[7][5]=600;dist[5][8]=dist[8][5]=800;dist[5][9]=dist[9][5]=600;dist[7][8]=dist[8][7]=100;dist[7][9]=dist[9][7]=600;dist[7][10]=dist[10][7]=150;dist[7][11]=dist[11][7]=110;dist[7][12]=dist[12][7]=100;dist[8][12]=dist[12][8]=80;dist[9][11]=dist[11][9]=700;dist[10][11]=dist[11][10]=5;dist[10][12]=dist[12][10]=50;dist[10][13]=dist[13][10]=150;dist[12][13]=dist[13][12]=100;dist[12][26]=dist[26][12]=20;dist[13][14]=dist[14][13]=200;dist[13][15]=dist[15][13]=250;dist[13][16]=dist[16][13]=700;dist[13][26]=dist[26][13]=100;dist[14][15]=dist[15][14]=20;dist[14][16]=dist[16][14]=500;dist[14][17]=dist[17][14]=1500;dist[16][17]=dist[17][16]=1300;dist[17][18]=dist[18][17]=50;dist[17][25]=dist[25][17]=300;dist[18][19]=dist[19][18]=30;dist[19][20]=dist[20][19]=100;dist[20][21]=dist[21][20]=950;dist[20][22]=dist[22][20]=900;dist[21][22]=dist[22][21]=150;dist[21][24]=dist[24][21]=110;dist[21][25]=dist[25][21]=750;dist[22][23]=dist[23][22]=40;dist[22][24]=dist[24][22]=120;dist[23][24]=dist[24][23]=60;dist[24][1]=dist[1][24]=300;}void shortest_path(graph *g,int s, int t,int n){struct state{int predecessor; //前驱节点int length; //到起始点的距离int label;}state[MAX_NODES];int i,k,min,mypath[MAX_NODES];struct state * p;for(p=&state[0]; p<&state[n]; p++){p->predecessor = -1;p->length = INFINITY;p->label = 0;}state[t].length = 0;state[t].label = 1;k = t; //当前工作结点do{for(i=0; i<n; i++){if(dist[k][i]!=0 && state[i].label==0){if(state[k].length+dist[k][i]<state[i].length){state[i].length = state[k].length+dist[k][i]; state[i].predecessor = k;}}}k=0;min=INFINITY;for(i=0; i<n; i++){if(state[i].label==0 && state[i].length<min){k=i;min=state[i].length;}}state[k].label = 1;}while(k!=s);i=0;k=s;do{path[i] = k;k = state[k].predecessor;mypath[i]=path[i];i++;}while(k>=0);for(i--;i>0;i--){printf("%s->",g->vex[mypath[i]].sight);}printf("%s\n",g->vex[mypath[i]].sight);printf("\n距离为%d m\n",min);}int main(){int m,s,e,c;graph g;g.vexnum = 27;init_graph(&g);printf("\n===========================================================\n");printf("\n 呈贡云南大学校园导游 \n");printf("\n\n");//打印景点列表for(m=0;m<g.vexnum;m++){printf("\t%2d:%s\t\t",m,g.vex[m].sight);if(++m<27&&m!=7)printf("\t%2d:%s\t\n",m,g.vex[m].sight);else if(m==7)printf("\t %d:%s\t\n",m,g.vex[m].sight);elseprintf("\n");}printf("\n===========================================================\n");printf("\n\t■■■■■■■■■■■■■■■■■\n");printf("\t■ ■\n");printf("\t■ 1、查询景点路径■\n");printf("\t■ ■\n");printf("\t■ 0、退出■\n");printf("\t■ ■\n");printf("\t■■■■■■■■■■■■■■■■■\n");while(1){printf("\n===========================================================\n");printf("\n请输入您的选择:");scanf("%d",&c);while(!(c==0||c==1)){printf("\n输入非法,请重新选择:\n");scanf("%d",&c);}switch(c){case 0:exit(0);case 1:printf("\n输入出发点与结束点:");scanf("%d %d",&s,&e);while(s<0||s>26||e<0||e>26||s==e){printf("\n输入非法,请重新选择:");scanf("%d %d",&s,&e);}printf("\n从“ %s ”到“ %s ”的最短路径为\n\n",g.vex[s].sight,g.vex[e].sight); shortest_path(&g,e,s,g.vexnum);break;}//switch}//whilereturn 0;}。
大学物理实验报告
大学物理实验指导书云南大学软件学院目录1.课程基本信息 (2)2.课程简介 (2)3.教学目的与基本要求 (2)4.考核方式和成绩评定办法 (3)5.参考文献 (3)6.实验指导 (4)6.1测量及误差分析 (4)6.2质点运动学 (9)6.3质点动力学 (11)6.4静电场 (13)6.5磁场 (18)6.6电量测量.................................. 错误!未定义书签。
6.7波的叠加.................................. 错误!未定义书签。
6.8示波器.................................... 错误!未定义书签。
6.9传感器.................................... 错误!未定义书签。
6.10光的干涉与衍射.......................... 错误!未定义书签。
1. 课程基本信息名称:大学物理实验/College Physics Lab课程性质:学科基础总学时/学分: 32/12. 课程简介本实验课程根据教育部《非物理类理工学科大学物理实验课程教学基本要求》并结合软件学院人才培养目标开展教学。
本实验课程内容包括:•测量误差的基础知识、用计算机处理实验数据的基本方法,以及基本物理量的测量方法,并加强数字化测量技术的应用。
•结合软件学院的专业特点,通过计算机模拟和实际操作掌握误差分析方法、质点运动学、质点动力学、振动与波、电场、磁场、光的干涉与衍射等基本原理。
•学习常用物理实验方法,实验室常用仪器的性能,常用实验操作技术及仪器正确调节,学习简单的计算机模拟。
3. 教学目的与基本要求本实验课培养学生初步掌握实验科学的思想和方法,提高其分析能力和创新能力;培养理论联系实际的科学作风,认真严谨的科学态度,积极主动的探索精神,团结协作的职业素养。
使之加深对物理学基本概念、基本理论的理解,掌握运用物理学基本原理分析和解决问题的科学方法。
大学物理实验8-实验报告
云南大学软件学院实验报告
课程:大学物理实验学期:2014-2015学年第一学期任课教师:朱艳萍专业:学号:姓名:成绩:
实验8 光的干涉
一、实验目的
1.了解迈克耳逊干涉仪的结构,掌握调节方法;
2、观察光的干涉条纹。
二、实验步骤(用截图来表示)
1、调整干涉仪,为实验做好准备。
2、测量He-Ne激光的波长。
波长经计算得:631nm
3、测量钠光波长、波长差及相干长度。
缓慢转动微动手轮,移动M1,中心每生出或吞进n个条纹,几下移动的距离,用公式2h/n求出波长调节过程中发现钠光条纹的清晰度会产生变化。
4、测量透明薄片的折射率。
换用白光光源。
在d=0的附近可看到白色的干涉花纹:中央是直线黑纹,即中央花纹;两旁是对称分布的彩色花纹。
D稍大时,显不出条纹,当视场中出现中央花纹后,在M1与G1之间放入折射率为n,厚度为l的透明薄片,则此时光程差要比原来增大2l(n-1),中央花纹既移出视场范围,如果将M1向G1前移动d,使d=l(n-1) ,则中央花纹重新出现,测出d,则可由d=l(n-1)求出折射率n.。
云南大学软件学院大学物理实验报告六
云南大学软件学院 实验报告课程: 大学物理实验 学期: 2012-2013学年 第一学期 任课教师: 张德海 专业: 数字媒体技术 学号: 20111120248 姓名: 赵云涛 成绩:实验6 示波器一、 实验目的1.学会使用信号发生器。
2.学会用示波器观察波形以及测量电压、周期和频率。
二、 实验内容1.观察信号发生器波形2.测量正弦波电压在示波器上调节出大小适中、稳定的正弦波形,选择其中一个完整的波形,先测算出正弦波电压峰—峰值U p-p ,即:U p-p =(垂直距离DIV )×(档位V/DIV )×(探头衰减率)= 20.0v然后求出正弦波电压有效值U 为2U 71.0U p p -⨯== 7.1v3.测量正弦波周期和频率在示波器上调节出大小适中、稳定的正弦波形,选择其中一个完整的波形,先测算出正弦波的周期T ,即T =(水平距离DIV )×(档位t/DIV )= 150.0s然后求出正弦波的频率T f 1= = 0.0067 Hz 。
4.观察李萨如图形(1)将示波器的显示模式切换为A/B ,A 通道接到如图电路的位置1,调节信号发生器输出电压的频率为50Hz ;信号发生器2的输出端接到示波器B 通道,分别调节输出正弦波的频率为50Hz 、75Hz 、100Hz 、150Hz ,观察并记录各种李萨如图形。
(2)将示波器的显示模式切换为A/B ,A 通道接到如图电路的位置2,调节信号发生器输出电压的频率为50Hz ;信号发生器2的输出端接到示波器B 通道,分别调节输出正弦波的频率为50Hz 、75Hz 、100Hz 、150Hz ,观察并记录各种李萨如图形。
思考题1. 信号的幅值对李萨如图形有影响么?答:会影响到,李萨如图的形状会随两个信号的幅值以及位相不同而变化。
2. 要获得稳定的李萨如图形,两个信号的频率应符合什么样的关系?答:李萨如图上的每一个点都可以用以下的公式进行表示:X=A1sin(ω1t+ψ1) ,Y=A2sin(ω2t+ψ2) 。
云南大学数据库系统与设计实验6
云南大学软件学院实验报告姓名:赵宇学号:2010112018班级:2010级软件工程日期: 2013/5/24 成绩:实验六 Physical Database Design II一实验任务对给出的实体建立关系数据模型,对建立的关系模型转化为DBMS中的数据库,对数据库中的数据的更新做约束,实现该数据库的业务要求,最后是对SQL 语句的考察,通过SQL语句对数据库中的数据进行查询。
二实验环境SQL Server 2005 、Power Designer三实验结果记录1.已知StayHome 数据库各实体之间的关系如下图所示:表中数据参考文件”StayHomeData.xls”,其中数据供参考,不足的属性或关联关系,请自己添加,并加说明。
需要添加一个表,演员和电影是多对多的关系,需要通过第三个表来实现对3NF,同时对于员工表应该添加电话属性和性别属性,这样会更加方便对员工的管理。
2.使用数据库建模工具,给出StayHome 数据库的ER 模型图、LDM 图和PDM图。
ER图:PlayslnisPartOfbelongBranchbranchNo streetcitystate zipCode mgrStaffNo <pi>Characters (20Variable charaCharacters (20Characters (6)Characters (20Characters (20Identifier_1 ...<pi>StaffstaffNonamepositionsalaryphonegenderbranchNo1<pi>Characters (2Variable charCharacters (5MoneyIntegerCharacters (6Characters (2 Identifier_1...<pi>VideoForRentvideoNO available catalogNo1 branchNo1<Undefined><Undefined>Characters (2Characters (2ActoractorNoactorNameactorGenderactorDescribe<pi>Characters (2Variable charCharacters (2TextIdentifier_1...<pi>VideocatalogNo1titlecategorydailyRentalprice<pi>Characters (2Variable charCharacters (2MoneyMoneyIdentifier_1...<pi>MembermemberNOfnamelnameaddressgender<pi>Characters (2Characters (1Characters (1Characters (5Characters (6Identifier_1...<pi>RegistrationbranchNo1menberNo1staffNo1dateJoinedCharacters (2Characters (2Characters (2Date RentalAgreementrentalNodateOutdateReturnmenberNo1videoNo2<pi>Characters (DateDateCharacters (Characters (Identifier_1...<pi>DirectordirectorNodirectorNamedirectorGenderdirectorDescribe<pi>Characters (20Variable chara<Undefined><Undefined>Identifier_1...<pi>LDM图:PlayslnisisPartOfbelong3(D)belong2BranchbranchNostreetcitystatezipCodemgrStaffNo<pi>Characters (20Variable charaCharacters (20Characters (6)Characters (20Characters (20Identifier_1...<pi>StaffstaffNobranchNoSta_staffNonamepositionsalaryphonegenderbranchNo1...<pi><fi2><fi1>CharactersCharactersCharactersVariable cCharactersMoneyIntegerCharactersCharactersVideoForRentvideoNOavailablecatalogNo1 branchNo branchNo1<fi1><fi2><Undef<UndefCharacCharacCharacActoractorNoactorNameactorGenderactorDescribe<pi>Characters (2Variable charCharacters (2TextIdentifier_1...<pi>VideocatalogNo1titlecategorydailyRentalprice<pi>Characters (2Variable charCharacters (2MoneyMoneyIdentifier_1...<pi>MembermemberNOfnamelnameaddressgender<pi>Characters (2Characters (1Characters (1Characters (5Characters (6Identifier_1...<pi>RegistrationmemberNObranchNostaffNobranchNo1menberNo1staffNo1...<fi1><fi2><fi3>CharactCharactCharactCharactCharactCharact RentalAgreementrentalNomemberNOdateOutdateReturnmenberNo1videoNo2<pi><fi2>CharactersCharactersDateDateCharactersCharactersDirectordirectorNocatalogNo1directorNamedirectorGenderdirectorDescribe<pi><fi>Characters (20Characters (20Variable chara<Undefined><Undefined>DirectscatalogNo1actorNo<pi,fi2><pi,fi1>Characters (20)Characters (20)<M><M>Identifier_1...<pi>PDM图:BranchbranchNo street city state zipCode mgrStaffNo ...char(20)varchar(50)char(20)char(6)char(20)char(20)<pk>StaffstaffNo branchNo Sta_staffNo nameposition salary phone gender branchNo1...char(20)char(20)char(20)varchar(20)char(50)numeric(8,2)integer char(6)char(20)<pk><fk1><fk2>VideoForRentvideoNO available catalogNo1branchNo branchNo1...<Undefined><Undefined>char(20)char(20)char(20)<fk1><fk2>ActoractorNo actorName actorGender actorDescribe ...char(20)varchar(50)char(20)long varchar<pk>VideocatalogNo1title category dailyRental price ...char(20)varchar(50)char(20)numeric(8,2)numeric(8,2)<pk>MembermemberNO fname lname address gender ...char(20)char(10)char(10)char(50)char(6)<pk>RegistrationmemberNO branchNo staffNo branchNo1menberNo1staffNo1dateJoined ...char(20)char(20)char(20)char(20)char(20)char(20)date<fk1><fk2><fk3>RentalAgreementrentalNo memberNO dateOut dateReturn menberNo1videoNo2...char(20)char(20)date datechar(20)char(20)<pk><fk2>DirectordirectorNo catalogNo1directorName directorGender directorDescribe ...char(20)char(20)varchar(20)<Undefined><Undefined><pk><fk>DirectscatalogNo1actorNochar(20)char(20)<pk,fk2><pk,fk1>3. 创建StayHome 数据库、数据表、导入数据。
云南大学实验六数据库完整性报告
云南大学软件学院实验报告课程:数据库原理与实用技术实验任课教师:刘宇、张璇姓名:学号:专业:信息安全成绩:实验6 数据库完整性实验6-1 完整性约束1、创建规则(用图形或者语句方法创建)(1)创建入学日期规则“Enter_University_date_rule”,假定该学校于1923年4月30日创建。
要求:入学日期必须大于等于学校创建日期,并且小于等于当前日期测试:(2)创建学生年龄规则“Age_rule”。
要求:学生年龄必须在15~30岁之间测试:(3)创建学生性别规则“Sex_rule”。
要求:性别只能为“男”或“女”测试:《数据库原理与实用技术》实验3 / 21(4)创建学生成绩规则“Score_rule ”。
要求:学生成绩只能在0~100之间(5)用图形方法查看学生成绩规则“Score_rule ”,截图为:双击:成绩:(6)用语句方法查看学生成绩规则“Score_rule ”,语句为:2、删除规则Enter_University_date_rule3、创建默认(用图形或者语句方法创建)(1)创建默认时间“Time_default”为当前系统时间(2)创建默认入学年龄“Age_default”为18岁(3)用图形方法查看默认入学年龄“Age_default”,截图为:《数据库原理与实用技术》实验5 /21(4)用语句方法查看默认入学年龄“Age_default ”,语句为:4、删除默认入学年龄“Age_default ”5、创建声明式默认:在创建表的过程中创建声明式默认 (1)创建表“default_example ”,表中包含字段pid 、name 、sex 、age 。
要求设定sex 的默认值为“男”、age 的默认值为18。
编号 姓名 性别 年龄 101 苏晴 女 201马拯山20执行结果为:输入数据:获取数据结果为:(2)在表中增加新的默认,将编号默认为100。
插入一条记录,执行结果为:6、在“学生管理数据库”各个数据表中建立相应的主键、外键、惟一值、以及check约束,要求:学生的年龄必须是两位数,其中第一位是1或2:学生表如下:《数据库原理与实用技术》实验授课表如下课程表如下:7/ 21成绩表如下:删除check 约束:学生表的:《数据库原理与实用技术》实验9/21授课表的:课程表的:成绩表的:7、完成教科书456页如下习题:[7.1]a:实验6-2 触发器《数据库原理与实用技术》实验11 / 211、使用触发器(1)创建一个触发器trig_update ,返回对“学生表”进行更新操作后,被更新的记录条数(2)执行触发器(3)修改触发器trig_update ,除返回被更新的记录条数外,再返回学生的所有基本信息2、使用触发器的两个特殊表:插入表(inserted)和删除表(deleted)。
大学物理实验报告数据处理及误差分析
进入实验室,首先要了解实验规则及注意事项,其次就是熟悉仪器和安装调整仪器(例如,千分尺调零、天平调水平和平衡、光路调同轴等高等)。
准备就绪后开始测量。测量的原始数据(一定不要加工、修改)应忠实地、整齐地记录在预先设计好的实验数据表格里,数据的有效位数应由仪器的精度或分度值加以确定。数据之间要留有间隙,以便补充。发现是错误的数据用铅笔划掉,不要毁掉,因为常常在核对以后发现它并没有错,不要忘记记录有关的实验环境条件(如环境温度、湿度等),仪器的精度,规格及测量量的单位。实验原始数据的优劣,决定着实验的成败,读数时务必要认真仔细。运算的错误可以修改,原始数据则不能擅自改动。全部数据必须经老师检查、签名,否则本次实验无效。两人同作一个实验时,要既分工又协作,以便共同完成实验。实验完毕后,应切断电源,整理好仪器,并将桌面收拾整洁方能离开实验室。
v.append(math.sqrt(float(y[i])*g/math.sin(2.0*float(x[i])*math.pi/180.0)))v_sum+=v[i] v0=v_sum/10.0 print v0
4.选择速度B、C、D、E重复上述实验。B
C
6.实验小结
(1)对实验结果进行误差分析。
误差处理
物理实验的任务,不仅仅是定性地观察物理现象,也需要对物理量进行定量测量,并找出各物理量之间的内在联系。
由于测量原理的局限性或近似性、测量方法的不完善、测量仪器的精度限制、测量环境的不理想以及测量者的实验技能等诸多因素的影响,所有测量都只能做到相对准确。随着科学技术的不断发展,人们的实验知识、手段、经验和技巧不断提高,测量误差被控制得越来越小,但是绝对不可能使误差降为零。因此,作为一个测量结果,不仅应该给出被测对象的量值和单位,而且还必须对量值的可靠性做出评价,一个没有误差评定的测量结果是没有价值的。
云南大学--软件学院--大学物理实验2
课程:大学物理实验学期:2009-2010学年第一学期任课教师:
班级:学号:序号: 姓名:成绩:
实验2质点运动学
一、实验内容1
1.证明公式: ,有关各个变量的定义见实验内容。
2.设定并记录发现目标距离、目标飞行高度、目标飞行速度;
发现目标距离
目标飞行高度
目标飞行速度
10000
11.45
11.44
11.43
11.42
11.423
水平误差
(米)Biblioteka 154.6137.4120.2
114.2
68.7
25.3
16.2
7.1
-2.0
1.0
观察角2= 16.820(度)
实验
1
2
3
4
5
6
7
8
9
10
发射角
(度)
33.5
33.3
32.9
32.7
32.3
32
31.9
31.5
31.4
31
水平误差
(米)
1000
500
3.根据程序显示的不同观察角,选定10个不同的拦截发射角,记录各个拦截发射角对应的拦截弹头与目标的水平误差;并分析拦截发射角等于多少,水平误差最小?记录2个不同观测角的情况。
观察角1= 5.834度)
实验
1
2
3
4
5
6
7
8
9
10
发射角
(度)
11.6
11.58
11.56
11.555
11.5
177.0
156.1
112.3
88.6
云南大学软件学院大学物理实验报告四
云南大学软件学院实验报告
课程:大学物理实验学期:2012-2013学年第一学期任课教师:张德海
专业:数字媒体技术学号:20111120242 姓名:赵云涛成绩:
实验4 静电场
一、实验目的
通过研究同心球壳电场及电势分布熟悉电场和电势的特性
二、实验原理
任何带电物体周围都会产生电场。
点电荷系中任一点处的场强等于各个点电荷单独存在时在该点各自产生的场强的矢量和,这就是电场场强的叠加原理。
三、实验任务
1.选取相关参数,截图如下:
2、得到电场分布图和电势分布图:。
云南大学软件学院信息安全工程实验6剖析
云南大学软件学院实验报告课程:信息安全工程实验任课教师:林英姓名:学号:专业:成绩:实验6.防火墙实验一、实验目的:通过实验理解入防火墙的功能和工作原理,学习NAT转换原理,熟悉NAT在一般网络环境中的应用、Linux系统中iptables防火墙以及Windows防火墙的配置和使用。
二、实验原理NAT转换实验:网络地址转换(NAT,Network Address Translation)是Internet 工程任务组(IETF,Internet Engineering Task Force)的一个标准,是把内部私有IP地址转换成合法网络IP地址的技术,允许一个整体机构以一个公用IP地址出现在Internet上。
IPtables防火墙配置实验:IPtables是复杂的,它集成到linux内核中。
用户通过IPtables,可以对进出你的计算机的数据包进行过滤。
通过IPtables命令设置你的规则,来把守你的计算机网络──哪些数据允许通过,哪些不能通过,哪些通过的数据进行记录(log)。
Windows防火墙实验:Windows防火墙是一个基于主机的状态防火墙,它丢弃所有未请求的传入流量,即那些既没有对应于为响应计算机的某个请求而发送的流量(请求的流量),也没有对应于已指定为允许的未请求的流量(异常流量)。
Windows防火墙提供某种程度的保护,避免那些依赖未请求的传入流量来攻击网络上的计算机的恶意用户和程序。
三、实验步骤NAT转换实验一、连接防火墙服务器,开始实验启动实验客户端,选择“防火墙”中的“NAT转换实验”,点击“连接”。
连接成功后,会提示连接成功,主界面会显示连接IP信息及防火墙规则操作画面。
二、添加静态路由打开本地主机cmd命令行,输入route add 172.21.0.0 mask 255.255.0.0 172.20.2.1,添加路由。
三、验证网络连通性输入ping 172.21.3.76,如图所示。
云南大学软件学院数据结构实验6
云南大学软件学院数据结构实验6预览说明:预览图片所展示的格式为文档的源格式展示,下载源文件没有水印,内容可编辑和复制实验难度:A □ B □ C □学期:2017秋季学期任课教师:实验题目:组员及组长:承担工作:联系电话:电子邮件:完成提交时间:年月日一、【实验构思(Conceive)】(10%)(本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计等相关知识,对问题进行概要性地分析)1.基本思路:用无向网表示校区内的各建筑的平面图,图中顶点表示主要建筑,存放建筑的编号、名称、简介等信息,图中的边表示建筑间的道路,存放路径长度等信息,将导游图看作一张带权无向图,顶点表示校园的各个建筑,边表示各建筑之间的道路,边上的权值表示距离;根据用户的输入信息用迪杰斯特拉算法计算出任意两个地点之间的最短路径,并用二维数组来存储相关的信息,输出给用户;同时用数组存储各个地点的相关信息,当用户输入要了解的地点名称是,调用相关函数输出该地点的相关信息给用户。
2、在程序中运用到了图的相关知识以及迪杰斯特拉算法和哈密尔顿图的遍历等,无向图的相关知识和相关操作,还有图的存储及相关的数据结构。
二、【实验设计(Design)】(20%)(本部分应包括:抽象数据类型的定义和基本操作说明,程序包含的模块以及各模块间的调用关系,关键算法伪码描述及程序流程图等,如有界面则需包括界面设计,功能说明等)主程序模块:该模块包含一个main函数,在main函数中调用其他函数和子程序。
int main(){int v0, v1;int i, num;char flag;Create(NUM, 11);do{flag = Menu();switch (flag){case'1':system("cls");//清空屏幕的当前内容List();//输出景点列表printf("\请选择起点景点(0~26):");scanf("%d", &v0);printf("\请选择终点景点(0~26):");scanf("%d", &v1);ShortPath(v0);//求出最短路径Output(v0, v1);//输出结果printf("\请按任意键继续...\");getchar();//利用getchar()函数让程序运行到上一行时,等待下下一个按键时才返回getchar();break;system("cls");List();printf("\请输入您要查找的景点编号:"); scanf("%d", &num);for (i = 0; i<="" p="">{if (num == g.vex[i].number){printf("\你要查找的景点信息如下:"); printf("\%s:", g.vex[i].sight);printf("%s\\", g.vex[i].description); printf("\按任意键返回...");getchar();getchar();break;}}if (i == NUM){printf("\没有找到!");printf("\按任意键返回...");getchar();getchar();}break;case'e':exit(0);}} while (flag != '0');}流程图:子程序模块包括:地点列表函数、输出函数、哈密尔顿图的遍历函数、迪杰斯特拉算法判断最短路径函数、创建图的函数。
云南大学软件学院计算机网络原理实验六实验报告3
实验六、传输层可靠传输协议GBN编程实验报告序号:姓名:学号:成绩指导老师:一、实验目的:1、通过编写实现一个简单可靠的数据传输协议GBN的发送和接收代码,模拟可靠数据传输2、理解TCP协议可靠传输的差错检测、重传、累计确认、定时器的可靠传输策略。
二、实验指导:参考教材。
动画演示:三、实验要求:编程实现一个GBN传输协议的发送方和接收方两程序,采用编程语言不限,要求能将发送――接收流程以及处理方法表现出来.1.实验流程图如下:N2.实验截图与代码如下: 截图: 传送下一个数据包结束代码及注释:一、GBN.h#pragma once#include <stdio.h>//基础功能模块的数据结构声明#define BIDIRECTIONAL 1 /* change to 1 if you're doing extra credit andwrite a routine called B_output *//* a "msg" is the data unit passed from layer 5 (teachers code) to layer4 (students' code). It contains the data (characters) to be delivered tolayer 5 via the students transport level protocol entities. */struct msg{ char data[20];};/* a packet is the data unit passed from layer 4 (students code) to layer3 (teachers code). Note the pre-defined packet structure, which allstudents must follow. */struct pkt{int seqnum;int acknum;int checksum;char payload[20];};#define WINDOWSIZE 8#define MAXBUFSIZE 50#define RTT 15.0#define NOTUSED 0#define NACK -1#define TRUE 1#define FALSE 0#define A 0#define B 1//网络仿真部分数据结构声明***********************************************************struct event{float evtime; /* event time */int evtype; /* event type code */int eventity; /* entity where event occurs */struct pkt *pktptr; /* ptr to packet (if any) assoc w/ this event */ struct event *prev;struct event *next;};/* possible events: */#define TIMER_INTERRUPT 0#define FROM_LAYER5 1#define FROM_LAYER3 2#define OFF 0#define ON 1//基础功能模块的函数声明******************************************************************* void ComputeChecksum(struct pkt *packet);//计算校验和int CheckCorrupted(struct pkt packet);//检查数据是否出错void A_output( struct msg message);//A端向外发送数据void A_input(struct pkt packet);//A端接收数据void A_timerinterrupt();//A计时器超时void A_init();//A端初始化void B_output(struct msg message);void B_input(struct pkt packet);void B_timerinterrupt();void B_init();//网络仿真部分的函数声明**************************************************void init(); //初始化仿真器float jimsrand();//随机数发生器[0,1]//处理事件列表部分的函数声明*********************************************void generate_next_arrival();//产生下一个到达的分组void insertevent(struct event *p);//向事件列表中插入一条新的事件void printevlist();//打印事件列表//******************************************************************** //**********************计时器模块*********************************** void stoptimer(int);//停止计时器void starttimer(int,float);//启动计时器//******************************************************************** *//**************************网络各层之间传送模块***********************void tolayer3(int AorB,struct pkt packet);//向第3层发送信息void tolayer5(int AorB,char datasent[20]);//向第5层发送信息二、GBN.c#include "GBN.h"#include <stdio.h>#include <string.h>#include <stdlib.h>extern int TRACE = 1; /* for my debugging */为我的调试extern int nsim = 0; /* number of messages from 5 to 4 so far */目前为止信息的数字是从5到4extern int nsimmax = 0; /* number of msgs to generate, then stop */如果信息产生的数字为0,然后就停止extern float time = 0.000;float lossprob; /* probability that a packet is dropped */数据包可能会丢失float corruptprob; /* probability that one bit is packet is flipped*/这一点的数据包可能会被弹出去float lambda; /* arrival rate of messages from layer 5 */ 第五层到达的信息的次序int ntolayer3; /* number sent into layer 3 */被传送到第三层的数据static int nlost = 0; /* number lost in media */在媒介中数据丢失static int ncorrupt = 0; /* number co rrupted by media*/被媒介毁坏的数据static int expectedseqnum = 0; /* expected se quence number at receiver side */在接收者这边接收到预期的序列数据static int nextseqnum; /* next sequence number to use in sender side */下一个序列数据使用在发送者这边static int base; /* t he head of sender window */发送者的头窗口struct pkt winbuf[WINDOWSIZE]; /* window packets buffer */数据包缓冲区窗口static int winfront,winrear; /* front and rear points of wind ow buffer */窗口缓冲区的前方点和后方点static int pktnum; /* packet number of window buffer */窗口缓冲区的数据包个数struct msg buffer[MAXBUFSIZE]; /* sender message buffer */发送消息缓冲区int buffront,bufrear; /* front and rear pointers of buffer */缓冲区的前指针与后指针static int msgnum; /* message number of buffer */信息数量的缓冲int packet_lost =0;int packet_corrupt=0;int packet_sent =0;extern int packet_correct=0;extern int packet_resent =0;int packet_timeout=0;extern struct event *evlist = NULL; /* the event list *///计算校验和void ComputeChecksum( struct pkt *packet){int checksum;int i;checksum = packet->seqnum;checksum = checksum + packet->acknum;for ( i=0; i<20; i++ )checksum = checksum + (int)(packet->payload[i]);checksum = 0-checksum;packet->checksum = checksum;}//检查是否出错int CheckCorrupted(struct pkt packet){int checksum;int i;checksum = packet.seqnum;checksum = checksum + packet.acknum;for ( i=0; i<20; i++ )checksum = checksum + (int)(packet.payload[i]);if ( (packet.checksum+checksum) == 0 )return (FALSE);elsereturn (TRUE);}//A端向外发送数据/* called from layer 5, passed the data to be sent to other side */ void A_output(struct msg message){int i;struct pkt sendpkt;/* if window is not full */if ( nextseqnum < base+WINDOWSIZE ){printf("----A: New message arrives, send window is not full, send new messge to layer3!\n");/* create packet */sendpkt.seqnum = nextseqnum;sendpkt.acknum = NOTUSED;for ( i=0; i<20 ; i++ )sendpkt.payload[i] = message.data[i];/* computer checksum */ComputeChecksum (&sendpkt);/* send out packet */tolayer3 (A, sendpkt);/* copy the packet to window packet buffer */winrear = (winrear+1)%WINDOWSIZE;pktnum ++;winbuf[winrear] = sendpkt;for (i=0; i<20; i++)winbuf[winrear].payload[i]= sendpkt.payload[i];/* update state variables */nextseqnum = nextseqnum+1;starttimer(A,RTT);B_input(sendpkt);A_input(sendpkt);}/* if window is full */else{printf("----A: New message arrives, send window is full,");/* if buffer full, give up and exit*/if ( msgnum == MAXBUFSIZE){printf (" Error: Sender buffer is full! \n");exit (1);}/* otherwise, buffer the message */else{printf("buffer new message!\n");bufrear = (bufrear+1) % MAXBUFSIZE;for (i=0; i<20; i++)buffer[bufrear].data[i] = message.data[i];msgnum ++;}}}//B端向外发送数据/* called from layer 5, passed the data to be sent to other side */ void B_output(struct msg message){int i;struct pkt sendpkt;/* if window is not full */if ( nextseqnum < base+WINDOWSIZE ){printf("----A: New message arrives, send window is not full, send new messge to layer3!\n");/* create packet */sendpkt.seqnum = nextseqnum;sendpkt.acknum = NOTUSED;for ( i=0; i<20 ; i++ )sendpkt.payload[i] = message.data[i];/* computer checksum */ComputeChecksum (&sendpkt);/* send out packet */tolayer3 (A, sendpkt);A_input(sendpkt);/* copy the packet to window packet buffer */winrear = (winrear+1)%WINDOWSIZE;pktnum ++;winbuf[winrear] = sendpkt;for (i=0; i<20; i++)winbuf[winrear].payload[i]= sendpkt.payload[i];/* if it is the first packet in window, start timeout */ //if ( base == nextseqnum )//{//starttimer(A,RTT);//printf("----A: start a new timer!\n");// }/* update state variables */nextseqnum = nextseqnum+1;}/* if window is full */else{printf("----A: New message arrives, send window is full,");/* if buffer full, give up and exit*/if ( msgnum == MAXBUFSIZE){printf (" Error: Sender buffer is full! \n");exit (1);}/* otherwise, buffer the message */else{printf("buffer new message!\n");bufrear = (bufrear+1) % MAXBUFSIZE;for (i=0; i<20; i++)buffer[bufrear].data[i] = message.data[i];msgnum ++;}}}//A端接收数据void A_input(struct pkt packet){struct pkt sendpkt;int i;/* if received packet is not corrupted and ACK is received */if ( (CheckCorrupted(packet) == FALSE) && (packet.acknum != NACK) ) {printf("----A: ACK %d is correctly received,",packet.acknum);packet_correct++;/* delete the acked packets from window buffer */winfront = (winfront+(packet.acknum+1-base)) % WINDOWSIZE; pktnum = pktnum - (packet.acknum+1-base);/* move window base */base = packet.acknum+1;stoptimer(A);if ( base < nextseqnum){//starttimer(A,RTT);printf ("\n\n\nsend new packets!");}/* if buffer is not empty, send new packets */while ( (msgnum!=0) && (nextseqnum<base+WINDOWSIZE) ) {/* create packet */sendpkt.seqnum = nextseqnum;sendpkt.acknum = NOTUSED;buffront = (buffront+1) % MAXBUFSIZE;for ( i=0; i<20 ; i++ )sendpkt.payload[i] = buffer[buffront].data[i];/* computer checksum */ComputeChecksum (&sendpkt);/* if it is the first packet in window, start timeout */if ( base == nextseqnum ){//starttimer(A,RTT);printf ("send new packets!\n");}/* send out packet */tolayer3 (A, sendpkt);/* copy the packet to window packet buffer */winrear = (winrear+1)%WINDOWSIZE;winbuf[winrear] = sendpkt;pktnum ++;/* update state variables */nextseqnum = nextseqnum+1;/* delete message from buffer */msgnum --;}}elseprintf ("----A: NACK is received, do nothing!\n");}//B端接收数据*****************************************************一定要调用这个/* Note that with simplex transfer from a-to-B, there is no B_output() */ /* called from layer 3, when a packet arrives for layer 4 at B*/void B_input(struct pkt packet){struct pkt sendpkt;int i;/* if not corrupted and received packet is in order */if ( (CheckCorrupted(packet) == FALSE) && (packet.seqnum == expectedseqnum)){printf("\n----B: packet %d is correctly received, send ACK!\n",packet.seqnum);/* send an ACK for the received packet *//* create packet */sendpkt.seqnum = NOTUSED;sendpkt.acknum = expectedseqnum;for ( i=0; i<20 ; i++ )sendpkt.payload[i] = '0';/* computer checksum */ComputeChecksum (&sendpkt);/* send out packet *///tolayer3 (B, sendpkt);/* update state variables */expectedseqnum = expectedseqnum+1;printf("----B:expectedseqnum = %d\n",expectedseqnum);/* deliver received packet to layer 5 *///tolayer5(B,packet.payload);}/* otherwise, discard the packet and send a NACK */else{printf("----B: packet %d is corrupted or not I expects, send NACK!\n",packet.seqnum);/* create packet */sendpkt.seqnum = NOTUSED;sendpkt.acknum = NACK;for ( i=0; i<20 ; i++ )sendpkt.payload[i] = '0';/* computer checksum */ComputeChecksum (&sendpkt);/* send out packet */tolayer3 (B, sendpkt);}}//A计时器超时/* called when A's timer goes off */void A_timerinterrupt(){int i;printf("----A: time out,resend packets!\n");/* start timer */starttimer(A,RTT);/* resend all packets not acked */for ( i=1; i<=pktnum; i++ ){packet_resent++;tolayer3(A,winbuf[(winfront+i)%WINDOWSIZE]);}}//B计时器超时/* called when B's timer goes off */void B_timerinterrupt(){int i;printf("----B: time out,resend packets!\n");/* start timer */starttimer(B,RTT);/* resend all packets not acked */for ( i=1; i<=pktnum; i++ ){packet_resent++;tolayer3(B,winbuf[(winfront+i)%WINDOWSIZE]);}}//A端初始化/* entity A routines are called. You can use it to do any initialization */void A_init()base = 0;nextseqnum = 0;buffront = 0;bufrear = 0;msgnum = 0;winfront = 0;winrear = 0;pktnum = 0;}//B端初始化/* entity B routines are called. You can use it to do any initialization */void B_init(){expectedseqnum = 0;}//初始化仿真器void init() /* initialize the simulator */{int i;float sum, avg;float jimsrand();FILE *fp;fp = fopen ("parameter.txt","r");printf("----- Stop and Wait Network Simulator Version 1.1 -------- \n\n");printf("Enter the number of messages to simulate: ");//fscanf(fp,"%d",&nsimmax);scanf("%d",&nsimmax);printf("\nEnter packet loss probability [enter 0.0 for no loss]: "); //fscanf(fp, "%f",&lossprob);scanf("%f",&lossprob);printf("\nEnter packet corruption probability [0.0 for no corruption]: "); //fscanf(fp,"%f",&corruptprob);scanf("%f",&corruptprob);printf("\nEnter average time between messages from sender's layer5 [ > 0.0]: ");//fscanf(fp,"%f",&lambda);scanf("%f",&lambda);printf("\nEnter TRACE: ");//fscanf(fp,"%d",&TRACE);scanf("%d",&TRACE);printf("\n\n");srand(9999); /* init random number generator */sum = 0.0; /* test random number generator for students */for (i=0; i<1000; i++)sum=sum+jimsrand(); /* jimsrand() should be uniform in [0,1] */avg = sum/1000.0;/*if(avg < 0.25 || avg > 0.75){printf("It is likely that random number generation on your machine\n" ); printf("is different from what this emulator expects. Please take\n"); printf("a look at the routine jimsrand() in the emulator code. Sorry. \n");exit(0);}*/printf("%f",avg);ntolayer3 = 0;nlost = 0;ncorrupt = 0;time=0.0; /* initialize time to 0.0 */generate_next_arrival(); /* initialize event list */}//随机数发生器float jimsrand(){double mmm = 2147483647; /* largest int - MACHINE DEPENDENT */float x; /* individual students may need to change mmm */x = rand()/mmm; /* x should be uniform in [0,1] */return(x);}//**************************************************************************************//*******************************事件处理部分*******************************************void generate_next_arrival(){double x,log(),ceil();struct event *evptr;float ttime;int tempint;//if (TRACE>2)//printf("-----------------GENERATE NEXT ARRIVAL: creating new arrival\n");x = lambda*jimsrand()*2; /* x is uniform on [0,2*lambda] *//* having mean of lambda */evptr = (struct event *)malloc(sizeof(struct event));evptr->evtime = time + x;evptr->evtype = FROM_LAYER5;if (jimsrand()<0.5){evptr->eventity = A;}evptr->eventity = B;insertevent(evptr);}//向事件列表中插入一条新的事件void insertevent(struct event *p){struct event *q,*qold;if (TRACE>2){//printf(" INSERTEVENT: time is %lf\n",time);//printf(" INSERTEVENT: future time will be %lf\n",p->evtime);}q = evlist; /* q points to front of list in which p struct inserted */if (q==NULL)/* list is empty */{evlist=p;p->next=NULL;p->prev=NULL;}else{for (qold = q; q !=NULL && p->evtime > q->evtime; q=q->next) qold=q;if (q==NULL)/* end of list */{qold->next = p;p->prev = qold;p->next = NULL;}else if (q==evlist)/* front of list */p->next=evlist;p->prev=NULL;p->next->prev=p;evlist = p;}else /* middle of list */{p->next=q;p->prev=q->prev;q->prev->next=p;q->prev=p;}}}//打印事件列表void printevlist(){struct event *q;int i;printf("--------------\nEvent List Follows:\n");for(q = evlist; q!=NULL; q=q->next){printf("Event time: %f, type: %d entity: %d\n",q->evtime,q->evtype,q->eventity);}printf("--------------\n");}//启动计时器void starttimer(int AorB,float increment){struct event *q;struct event *evptr;if (TRACE>2)printf("\n----A: START TIMER: starting timer at %f\n",time);/* be nice: check to see if timer is already started, if so, then warn *//* for (q=evlist; q!=NULL && q->next!=NULL; q = q->next) */for (q=evlist; q!=NULL ; q = q->next)if ( (q->evtype==TIMER_INTERRUPT && q->eventity==AorB) ){//printf("Warning: attempt to start a timer that is already started\n");return;}/* create future event for when timer goes off */evptr = (struct event *)malloc(sizeof(struct event));evptr->evtime = time + increment;evptr->evtype = TIMER_INTERRUPT;evptr->eventity = AorB;insertevent(evptr);}//停止计时器/* called by students routine to cancel a previously-started timer */ void stoptimer(int AorB) /* A or B is trying to stop timer */{struct event *q,*qold;if (TRACE>2)printf("\n----A: STOP TIMER: stopping timer\n");/* for (q=evlist; q!=NULL && q->next!=NULL; q = q->next) */for (q=evlist; q!=NULL ; q = q->next)if ( (q->evtype==TIMER_INTERRUPT && q->eventity==AorB) )/* remove this event */{if (q->next==NULL && q->prev==NULL)evlist=NULL; /* remove first and only event on listelse if (q->next==NULL) /* end of list - there is one in front */ q->prev->next = NULL;else if (q==evlist) /* front of list - there must be event after */{q->next->prev=NULL;evlist = q->next;}else /* middle of list */{q->next->prev = q->prev;q->prev->next = q->next;}free(q);return;}//printf("Warning: unable to cancel your timer. It wasn't running.\n");}//向第三层发送信息/************************** TOLAYER3 ***************/void tolayer3(int AorB,struct pkt packet){struct pkt *mypktptr;struct event *evptr,*q;float lastime, x, jimsrand();int i;ntolayer3++;/* simulate losses: */if (jimsrand() < lossprob){nlost++;if (TRACE>0)printf(" TOLAYER3: packet being lost\n");return;}/* make a copy of the packet student just gave me since he/she may decide *//* to do something with the packet after we return back to him/her */ mypktptr = (struct pkt *)malloc(sizeof(struct pkt));mypktptr->seqnum = packet.seqnum;mypktptr->acknum = packet.acknum;mypktptr->checksum = packet.checksum;for (i=0; i<20; i++)mypktptr->payload[i] = packet.payload[i];if (TRACE>2){printf(" TOLAYER3: seq: %d, ack %d, check: %d ", mypktptr->seqnum,mypktptr->acknum, mypktptr->checksum);for (i=0; i<20; i++)printf("%c",mypktptr->payload[i]);printf("");}/* create future event for arrival of packet at the other side */evptr = (struct event *)malloc(sizeof(struct event));evptr->evtype = FROM_LAYER3; /* packet will pop out from layer3 */ evptr->eventity = (AorB) % 2; /* event occurs at other entity */evptr->pktptr = mypktptr; /* save ptr to my copy of packet *//* finally, compute the arrival time of packet at the other end. medium can not reorder, so make sure packet arrives between 1 and 10 time units after the latest arrival time of packetscurrently in the medium on their way to the destination */lastime = time;/* for (q=evlist; q!=NULL && q->next!=NULL; q = q->next) */for (q=evlist; q!=NULL ; q = q->next)if ( (q->evtype==FROM_LAYER3 && q->eventity==evptr->eventity) ) lastime = q->evtime;evptr->evtime = lastime + 1 + 9*jimsrand();/* simulate corruption: */if (jimsrand() < corruptprob){ncorrupt++;if ( (x = jimsrand()) < .75)mypktptr->payload[0]='Z'; /* corrupt payload */else if (x < .875)mypktptr->seqnum = 999999;elsemypktptr->acknum = 999999;if (TRACE>0)printf(" TOLAYER3: packet being corrupted\n");}//if (TRACE>2)//printf(" TOLAYER3: scheduling arrival on other side\n");insertevent(evptr);}//向第五层发送信息/************************** TOLAYER5 ***************/void tolayer5(int AorB,char datasent[20]){int i;if (TRACE>2){printf(" TOLAYER5: data received: ");for (i=0; i<20; i++)printf("%c",datasent[i]);printf("\n");}}三、GBN-CS.c#include "GBN.h"#include <stdio.h>#include <string.h>#include <stdlib.h>extern int TRACE ; /* for my debugging */extern int nsim ; /* number of messages from 5 to 4 so far */extern int nsimmax; /* number of msgs to generate, then stop */extern float time;extern int packet_correct;extern int packet_resent;extern struct event *evlist;int main(){struct event *eventptr;struct msg msg2give;struct pkt pkt2give;int i,j;char c;init();A_init();B_init();while (1){eventptr = evlist; /* get next event to simulate */ if (eventptr==NULL)goto terminate;evlist = evlist->next; /* remove this event from event list */if (evlist!=NULL)evlist->prev=NULL;if (TRACE >= 2){printf("\nEVENT time: %f,",eventptr->evtime);printf(" type: %d",eventptr->evtype);if (eventptr->evtype==0)printf(", timerinterrupt ");else if (eventptr->evtype==1)printf(", fromlayer5 ");elseprintf(", fromlayer3 ");printf(" entity: %d\n",eventptr->eventity);}time = eventptr->evtime; /* update time to next event time*/if (nsim==nsimmax)break; /* all done with simulation */if (eventptr->evtype == FROM_LAYER5 ){generate_next_arrival(); /* set up future arrival *//* fill in msg to give with string of same letter */j = nsim % 26;for (i=0; i<20; i++)msg2give.data[i] = 97 + j;if (TRACE>2){printf(" MAINLOOP: data given to student: ");for (i=0; i<20; i++)printf("%c", msg2give.data[i]);printf("\n");}nsim++;if (eventptr->eventity == A){A_output(msg2give);}else{B_output(msg2give);}}else if (eventptr->evtype == FROM_LAYER3){pkt2give.seqnum = eventptr->pktptr->seqnum;pkt2give.acknum = eventptr->pktptr->acknum;pkt2give.checksum = eventptr->pktptr->checksum;for (i=0; i<20; i++)pkt2give.payload[i] = eventptr->pktptr->payload[i];if (eventptr->eventity == A) /* deliver packet by calling */ A_input(pkt2give); /* appropriate entity */elseB_input(pkt2give);free(eventptr->pktptr); /* free the memory for packet */ }else if (eventptr->evtype == TIMER_INTERRUPT){if (eventptr->eventity == A)A_timerinterrupt();elseB_timerinterrupt();}else{printf("INTERNAL PANIC: unknown event type \n");}free(eventptr);}terminate:printf(" Simulator terminated at time %f\n after sending %d msgs from layer5\n",time,nsim);printf(" correctly sent pkts: %d \n", packet_correct);printf(" resent pkts: %d \n", packet_resent);system("pause");}附源代码及注释四. 实验小结通过本次试验了解了编程实现简单可靠的数据传输GBN协议,模拟了可靠数据传输理解了TCP协议可靠传输的差错检测、重传、累计确认、定时器的可靠传输策略。
物理实验误差分析
物理实验误差分析物理实验误差分析篇一:大学物理实验1误差分析云南大学软件学院实验报告课程:大学物理实验学期:2014-2015学年第一学期任课教师:专业:学号:姓名:成绩:实验1 误差分析一、实验目的1. 测量数据的误差分析及其处理。
二、实验内容1.推导出满足测量要求的表达式,即v0?f(?)的表达式;V0=sqrt((x*g)/sin(2*θ))2.选择初速度A,从[10,80]的角度范围内选定十个不同的发射角,测量对应的射程,记入下表中:3.根据上表计算出字母A对应的发射初速,注意数据结果的误差表示。
将上表数据保存为A.txt,利用以下Python程序计算A对应的发射初速度,结果为100.1 import math g=9.8 v_sum=0 v=[]my_file=open(A.txt,r)my_info=my_file.readline()[:-1] x=my_info[:].split('\t') my_info=my_file.readline()[:-1] y=my_info[:].split('\t') for i in range(0,10):v.append(math.sqrt(float(y[i])*g/math.sin(2.0*float(x[i])*math.pi/1 80.0))) v_sum+=v[i] v0=v_sum/10.0 print v04.选择速度B、C、D、E重复上述实验。
BC6.实验小结(1) 对实验结果进行误差分析。
将B表中的数据保存为B.txt,利用以下Python程序对B组数据进行误差分析,结果为-2.84217094304e-13 import math g=9.8 v_sum=0 v1=0 v=[]my_file=open(B.txt,r)my_info=my_file.readline()[:-1] x=my_info[:].split('\t') my_info=my_file.readline()[:-1] y=my_info[:].split('\t') for i in range(0,10):v.append(math.sqrt(float(y[i])*g/math.sin(2.0*float(x[i])*math.pi/1 80.0))) v_sum+=v[i] v0=v_sum/10.0for i in range(0,10):v1+=v[i]-v0 v1/10.0 print v1(2) 举例说明“精密度”、“正确度”“精确度”的概念。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
云南大学软件学院 实验报告
课程: 学期: 2012-2013学年 第一学期 任课教师: 张德海 专业: 学号: 姓名: 成绩:
实验6 示波器
一、实验目的
1.了解示波器的主要结构和显示波形的基本原理。
2.学会使用信号发生器。
3.学会用示波器观察波形以及测量电压、周期和频率。
二、实验内容
1.观察信号发生器波形 2.测量正弦波电压
在示波器上调节出大小适中、稳定的正弦波形,选择其中一个完整的波形,先测算出正弦波电压峰—峰值U p-p ,即:
U p-p =(垂直距离DIV )×(档位V/DIV )×(探头衰减率)= 10V 然后求出正弦波电压有效值U 为
2U 71.0U p
p -⨯=
= 3.55V
3.测量正弦波周期和频率
在示波器上调节出大小适中、稳定的正弦波形,选择其中一个完整的波形,先测算出正弦波的周期T ,即
T =(水平距离DIV )×(档位t/DIV )= 1s
然后求出正弦波的频率T f 1=
= 1Hz 。
4.利用李萨如图形测量频率
设将未知频率f y 的电压U y 和已知频率f x 的电压U x
(均为正弦电压),分别送到示波器的Y 轴和X 轴,则由于两个电压的频率、振幅和相位的不同,在荧光屏上将显示各种不同波形,一般得不到稳定的图形,但当两电压的频率成简单整数比时,将出现稳定的封闭曲线,称为李萨如图形。
根据这个图形可以确定两电压的频率比,从而确定待测频率的大小。
图4-15-8列出各种不同的频率比在不同相位差时的李萨如图形,不难得出: 所以未知频率
但应指出水平、垂直直线不应通过图形的交叉点。
测量方法如下:
(1)将一台信号发生器的输出端接到示波器Y 轴输入端上,并调节信号发生器输出电压的频率为50Hz ,作为待测信号频率。
把另一信号发生器的输出端接到示波器X 轴输入端上作为标准信号频率。
(2)分别调节与X 轴相连的信号发生器输出正弦波的频率f x 约为25Hz 、50Hz 、100Hz 、150Hz 、200Hz 等。
观察各种李萨如图形,微调f x 使其图形稳定时,记录f x 的确切值,再分别读出水平线和垂直线与图形的交点数。
由此求出各频率比及被测频率f y ,记录于下表中。
思考题
1. 示波器为什么能显示被测信号的波形?
如果只在竖直偏转板上加一交变的正弦电压,则电子束的亮点将随电压的变化在竖直方向来回运动,如果电压频率较高,则看到的是一条竖直亮线,如图4-15-2所示。
要能显示波形,必须同时在水平偏转板上加一扫描电压,使电子束的亮点沿水平方向拉开。
这种扫描电压的特点是电压随时间成线性关系增加到最大值,最后突然回到最小,此后再重复地变化。
这种扫描电压即前面所说的“锯齿波电压”,如图4-15-3所示。
当只有锯齿波电压加在水平偏转板上时,如果频率足够高,则荧光屏上只显示一条
水平亮线。
如果在竖直偏转板上(简称Y 轴)加正弦电压,同时在水平偏转板上(简称X 轴)加锯齿波电压,电子受竖直、水平两个方向的力的作用,电子的运动就是两相互垂直的运动的合成。
当锯齿波电压比正弦电压变化周期稍大时,在荧光屏上将能显示出完整周期的所加正弦电压的波形图。
如图4-15-4所示。
2. 荧光屏上无光点出现,有几种可能的原因?怎样调节才能使光点出现?
可能的原因有:电源没有打开、亮度太小或没有、光点的位置偏离了显示屏。
首先检查电源开关是否打开,(看电源指示灯是否亮)然后将亮度旋钮调至较大,(顺时针方向调节)将X轴、Y轴输入端接地,调节水平位移和竖直位移,直至亮点出现在显示屏上。
3. 荧光屏上波形移动,可能是什么原因引起的? 扫描不同步。
由波形显示原理知:原因是其扫描电压的周期与被测信号的周期不相等或不成整数倍,以致每次扫描开始时波形曲线上的起点均不一样所造成的。
要想使显示屏上的图形稳定,必须使扫描电压的周期与被测信号的周期之间满足Tx/Ty=n(n=1,2,3,…),n是屏上显示完整波形的个数。