实验四 图的操作的实现 代码及运行截图

合集下载

实验四_香农编码

实验四_香农编码

实验名称:实验四香农编码一、实验目的:加深对香农公式的理解及其具体的实现过程。

二、实验内容与原理:内容:计算二进制香农编码三、实验步骤1.分析香农公式的算法2.将香农公式的流程转换为具体的代码四、实验数据及结果分析(可附程序运行截图)编码的结果:平均码长和编码效率:五、代码附录clear;% c = strcat(a,b)字符串连接p=[0.25 0.25 0.2 0.15 0.1 0.05];P=fliplr(sort(p));%按大到小排序Pa=[0;0];%累加和的定义----第一行为累加和,第二行为Ki %求累加和for x=1for y=1:1:5%Pa(x,y)=1;Pa(x,y+1)=P(x,y)+ Pa(x,y);endend%ceil 是取向离它最近的大整数圆整for i=2for j=1:1:6Pa(i,j)=ceil( -log2(P(1,j)) );endend%信源熵H=0;L=0;for i=1:1:6H=H-P(i)*log2(P(i));L=L+P(i)*Pa(2,i);endu=H/L;disp('平均码长:;');disp(L);disp('编码效率:');disp(u);%求各符号的编码temp=[];%临时的编码值:1:6for m=1:1:6fprintf('a(%d):',m);for n=1:1:abs(Pa(2,m))temp(m,n)=Pa(1,m)*2;if temp(m,n)>=1O(m,n)=1;Pa(1,m)=temp(m,n)-1;elseO(m,n)=0;Pa(1,m)=temp(m,n);endfprintf('%d',O(m,n));endfprintf('\n');end六、其他:实验总结、心得体会及对本实验方法、手段及过程的改进建议等。

实验起初是想把累加和及Ki和编码放在一个二维矩阵中,但具体的实现较为复杂,所以最后改为逐行存放并成功完成了实验。

华南理工大学微机与接口实验报告(四实验,题目原理流程图代码截图完整版)

华南理工大学微机与接口实验报告(四实验,题目原理流程图代码截图完整版)

微机原理实验报告班 级:2012级电子科学与技术卓工班级电子科学与技术卓工班姓 名: 黄中一黄中一 学 号: 201236460273序 号:评阅分数:评阅分数:实验一一、实验目的1、学会如何建立汇编源文件ASM2、学会调用MASM 宏汇编程序对源文件进行汇编,获得目标程序宏汇编程序对源文件进行汇编,获得目标程序 OBJ 及LST 列表文件列表文件3、学会调用LINK 连接程序汇编后的目标文件OBJ 连接成可执行的文件连接成可执行的文件EXE 4、学会使用DEBUG 调试程序把可执行文件装入内存并调试运行,用D 命令显示目标程序,用U 命令对可执行文件反汇编,用G 命令运行调试。

命令运行调试。

二、实验设备装有MASM 软件的IBM PC 机三、实验内容1、汇编程序对源程序进行编译,生成扩展名为OBJ 的目标文件;连接程序是将目标程序和库文件进行连接、定位,生成扩展名为EXE 的可执行文件;调试程序是对目标文件进行调试,验证它的正确性。

是对目标文件进行调试,验证它的正确性。

2、DEBUG 程序各种命令的使用方法程序各种命令的使用方法功能功能命令格式命令格式 使用说明使用说明显示内存单元内容显示内存单元内容D 地址地址从指定地址开始显示40H 个字节或80H 个字节个字节 修改内存单元内容修改内存单元内容 E 地址地址先显示地址和单元内容等待输入修改的内容输入修改的内容检查和修改寄检查和修改寄存器的内容存器的内容R 显示全部寄存器和标志位及下条指令单元十六进制数码和反汇编格式和反汇编格式反汇编反汇编U 地址地址从指定地址开始反汇编16个或32个字节个字节 汇编汇编 A 地址地址从指定地址直接输入语句并从指定指定汇编装入内存从指定指定汇编装入内存跟踪跟踪 T =地址=地址 从指定地址开始逐条跟踪指令运行运行 G =地址=地址无断点,执行正在调试的指令执行正在调试的指令 退出退出Q退出DEBUG 返回DOS3、实验过程①、在edit 环境,写字板,记事本等中输入源程序。

(单片机)

(单片机)

实验四一、实验题目:当K1键按下后,首先使蜂鸣器响一声,然后使LED1-LED8完成3种闪亮的花样(自己定义),每一种花样循环3次,然后周而复始。

二、keil代码:/*当K1键按下后,首先使蜂鸣器响一声,然后使LED1- LED8完成3种闪亮的花样(自己定义),每一种花样循环3次,然后周而复始。

*/#include<reg51.h>sbit P2_0=P2^0;//接蜂鸣器sbit P2_7=P2^7;sbit P1_0=P1^0;sbit P1_1=P1^1;sbit P1_2=P1^2;sbit P1_3=P1^3;sbit P1_4=P1^4;sbit P1_5=P1^5;sbit P1_6=P1^6;sbit P1_7=P1^7;void DELAY(int time)//延时{while(time--){}}void BUZ_ON(){if(P2_7==0){P2_0=1;}else{ P2_0=0;}}void F1(void){int i;char data_group_mide[5]={0x00,0x18,0x24,0x42,0x81};//向两边延伸for(i=0;i<5;i++){P1=data_group_mide[i];DELAY(20000);}P1=0x00;}void F2(void){int i;char data_group_left[8]={0xFF,0x7F,0x3F,0x0F,0x07,0x03,0x01,0x00};//向左延伸for(i=0;i<8;i++){P1=data_group_left[i];DELAY(20000);P1=0x00;}void F3(void){int i;char date_group_right[8]={0x00,0x01,0x03,0x07,0x0f,0x3f,0x7f,0xff};//向右延伸for(i=0;i<8;i++){P1=date_group_right[i];DELAY(20000);}P1=0x00;}void main(){unsigned int i; //每种花样循环三次P2_0=0;P2_7=1;BUZ_ON();P1=0x00;while(P2_7==0){for(i=0;i<3;i++)//花样1 {F1();}for(i=0;i<3;i++)//花样2 {F2();}for(i=0;i<3;i++)//花样3 {F3();}}}三、protues电路图:四、实验截图:五、实验小结:通过本次实验,我们熟悉了protues的编译环境,对以后的单片机学习有很大帮助。

实验4 选择结构程序设计

实验4 选择结构程序设计

实验四 选择结构程序设计(4学时)实验前必须做的操作.........——..新建文件夹:......首先在各自对应的计算机ncre(k:)盘上对应座位号文件夹内新建一个文件夹,文件夹的名字为“班级+学号的后两位+姓名”,如座位号为K02,航海1111班、学号后两位是02的、姓名为“张强”的同学,则其对应的文件夹名字是:航海111102张强。

然后在刚才建好的文件夹里面再建立一个文件夹,文件夹为“实验4”。

【实验目的】1、 理解C 语言表示逻辑量的方法(以0代表“假”,以非0代表“真”)。

2、 进一步巩固printf()和scanf()函数的使用方法。

3、 学会正确使用关系运算符和关系表达式、逻辑运算符和逻辑表达式。

4、 掌握if 语句三种形式的用法。

5、 掌握switch 、break 语句的用法。

6、 熟悉选择结构程序段中语句的执行过程。

7、 学会设计分支结构的程序,结合程序掌握一些基本的算法。

8、 巩固利用VC++对C 程序的查错方法,进一步提高修改程序错误的能力。

9、 学习跟踪调试程序,掌握简单的单步调试方法。

【实验内容】[实验任务一]:程序的跟踪调试和变量值的监视练习(可不上交、但必须操作、理解,掌握其方法) 程序跟踪调试实例4-1:程序跟踪调试和变量值的监视示例(请仔细按以下各步骤进行操作):输入x ,计算并输出下列分段函数 f(x) 的值(保留1位小数)。

(需要存盘)⎪⎩⎪⎨⎧=≠=0001)(x x x x f10.0f(10.00) = 0.1【操作步骤】:(1)输入源程序,并以error4_1.c 文件名最终保存在实验4文件夹里,然后执行“编译/Build ”—>“编译/Compile ”,出现第一个编译错误是:双击该出错信息,箭头指向else 所在行,出错信息指出在else 前缺少分号。

在y = 1 / x 后面补上分号后,重新编译,新出现的第一个出错信息(警告信息):双击该错误信息,箭头指向scanf("%f", x);所在行,出错原因是x 的前面少了&。

数据结构-实验四图的的操作及应用

数据结构-实验四图的的操作及应用

实验四 图的的操作及应用实验课程名: 图的的操作及应用专业班级: 11计科(1) 学 号: 姓 名:实验时间: 2012. 12.11 实验地点: 指导教师:一、实验目的1、理解图的基本概念及术语;2、掌握图的两种存储结构(邻接矩阵和邻接表)的表示方法;3、熟练掌握图的两种遍历(深度优先搜索遍历和广度优先搜索遍历)的算法思想、步骤,并能列出在两种存储结构上按上述两种遍历算法得到的序列;4、理解最小生成树的概念,能按Prim算法构造最小生成树;领会并掌握拓扑排序、关键路径、最短路径的算法思想。

二、实验的内容和步骤1、构造图的邻接矩阵存储结构或邻接表存储结构。

代码:# include <iostream.h># include <malloc.h># include <conio.h># define INFINITY 1000# define MAX_VERTEX_NUM 20# define OK 1#define STARTS "********************************"typedef enum{DG,DN,UDG,UDN} GraphKind;typedef int EType;typedef int InfoType;typedef int VertexType;typedef struct ArcCell //define structure MGraph{ EType adj;InfoType *info;}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];typedef struct{ VertexType vexs[MAX_VERTEX_NUM];AdjMatrix arcs;int vexnum,arcnum;GraphKind kind;}MGraph;int CreatUDN(MGraph &G) //CreatUDN() sub-function{int IncInfo,i,j,k,v1,v2,w;cout<<endl<<"Please input the number of G.vexnum (eg,G.vexnum=4): ";cin>>G.vexnum; //input the number of vexcout<<"Please input the number of G.arcnum (eg,G.arcnum=4): ";cin>>G.arcnum; //input the number of arc: ";cout<<"Please input IncInfo (0 for none)cin>>IncInfo;for(i=0;i<G.vexnum;++i)for(j=0;j<G.vexnum;++j){ G.arcs[i][j].adj=INFINITY; //initial G.arcs[i][j].adj//initial G.arcs[i][j].infoG.arcs[i][j].info=NULL;}cout<<"Plese input arc(V1-->V2), For example: (V1=1,V2=3),(V1=2,V2=4)..."<<endl;for(k=0;k<G.arcnum;++k) //input arc(v1,v2){cout<<endl<<"Please input the "<<k+1<<"th arc's v1 (0<v1<G.vexnum) :";cin>>v1; //input v1cout<<"Please input the "<<k+1<<"th arc's v2 (0<v2<G.vexnum) :";cin>>v2; //input v2:";cout<<"Please input the "<<k+1<<"th arc's weightcin>>w; //input weighti=v1;j=v2;//if (v1,v2) illegal,againwhile(i<1||i>G.vexnum||j<1||j>G.vexnum){cout<<"Please input the "<<k+1<<"th arc's v1 (0<v1<G.vexnum) :";cin>>v1;cout<<"Please input the "<<k+1<<"th arc's v2 (0<v1<G.vexnum) :";cin>>v2;:";cout<<"Please input the "<<k+1<<"th arc's weightcin>>w;i=v1;j=v2;} //while endi--;j--;G.arcs[i][j].adj=G.arcs[j][i].adj=w; //weightcout<<"G.arcs["<<i+1<<"]["<<j+1<<"].adj="<<"G.arcs["<<j+1<<"]["<<i+1<<"].adj="<<w<<e ndl;if(IncInfo){ cout<<"Please input the "<<k+1<<"th arc's Info :";cin>>*G.arcs[i][j].info;}} //for endreturn (OK);} //CreatUDN() end打印邻接矩阵void Gprintf(MGraph G) //{cout<<"邻接矩阵数组为:\n";for(int i=0;i<G.vexnum;i++){for(int k=0;k<G.vexnum;k++)cout<<G.arcs[i][k].adj<<"\t";cout<<endl;}}/*邻接表*/typedef struct ArcNode //define structure ALGraph{ int adjvex;struct ArcNode *nextarc;InfoType *info;}ArcNode;typedef struct VNode{ VertexType data;ArcNode *firstarc;}VNode,AdjList[MAX_VERTEX_NUM];typedef struct{ AdjList vertices;int vexnum,arcnum;int kind;}ALGraph;int CreateDG(ALGraph &G) //CreateDG() subfunction{ int IncInfo,i,j,k,v1,v2,w;cout<<endl<<"Please input the number of G.vexnum (eg,G.vexnum=4): "; cin>>G.vexnum; //input the number of vexcout<<"Please input the number of G.arcnum (eg,G.arcnum=4): ";cin>>G.arcnum; //input the numbe of arc: ";cout<<"Please input the number of IncInfo (0 for none)cin>>IncInfo; //if no information, input 0for(i=0;i<G.vexnum;++i){ G.vertices[i].data=i; //initial G.vertices[i].data//initial G.vertices[i].firstarcG.vertices[i].firstarc=NULL;}cout<<"Plese input arc(V1-->V2), For example: (V1=1,V2=3),(V1=2,V2=4)..."<<endl; for(k=0;k<G.arcnum;++k) //input arc(v1,v2){ cout<<endl<<"Please input the "<<k+1<<"th arc's v1 (0<v1<G.vexnum): ";cin>>v1;cout<<"Please input the "<<k+1<<"th arc's v2 (0<v2<G.vexnum0: ";cin>>v2;i=v1;j=v2;while(i<1||i>G.vexnum||j<1||j>G.vexnum) //if (v1,v2) illegal{ cout<<endl<<"Please input the "<<k+1<<"th arc's v1 (0<v1<G.vexnum): ";cin>>v1;cout<<"Please input the "<<k+1<<"th arc's v2 (0<v2<G.vexnum): ";cin>>v2;i=v1;j=v2;} //while endi--;j--;ArcNode *p;p=(ArcNode *)malloc(sizeof(ArcNode)); //allocate memoryif(!p){ cout<<"Overflow!";return (0);}p->adjvex=j; //assign p->adjvexp->nextarc=G.vertices[i].firstarc;p->info=NULL;G.vertices[i].firstarc=p;if(IncInfo){ cout<<"Please input the info :";//input informationcin>>*(p->info);}} //for endreturn (OK);} //CreateDG() endint main(){MGraph MG;ALGraph AG;int a=-1;while(a!=0){cout<<STARTS<<STARTS<<endl;cout<<"1)邻接矩阵(无向网)\t"<<"2)邻接表(有向图)\t"<<"3)退出"<<endl;cout<<"选择存储方式:";cin>>a;switch(a){case 1: {CreatUDN(MG);Gprintf(MG);break;}case 2: CreateDG(AG);break;case 3: a=0;break;选择错误\n"<<endl;default:cout<<"}}return 0;}运行结果:2.按照建立一个带权有向图的操作需要,编写在邻接矩阵或邻接表存储结构下,带权有向图基本操作的实现函数(如初始化图、在图中插入一个结点、在图中插入一条边、在图中寻找序号为v的结点的第一个邻接结点、在图中寻找序号为v1结点的邻接结点v2的下一个邻接结点、图的深度优先遍历、图的广度优先遍历等)。

(打印)实验四 MATLAB 高级图形绘制

(打印)实验四 MATLAB 高级图形绘制

实验四MATLAB 高级图形绘制一、实验目的及要求:1.熟悉各种绘图函数的使用;2.掌握图形的修饰方法和标注方法;3.了解MATLAB 中图形窗口的操作。

二、实验内容:1.用图形表示连续调制波形Y=sin(t)sin(9t)及其包络线。

程序代码如下:包络线:2.x=[-2π,2π],y1=sinx、y2=cosx、y3=sin2x、y4=cos 2x①用MATLAB语言分四个区域分别绘制的曲线,并且对图形标题及横纵坐标轴进行标注。

程序:结果:②另建一个窗口,不分区,用不同颜色、线型绘出四条曲线,并标注图例注解。

程序:结果:③绘制三维曲线:⎪⎩⎪⎨⎧=≤≤==)cos()sin()200()cos()sin(t t t z t t y t x π程序:结果:3.绘制极坐标曲线ρ=asin(b+nθ),并分析参数a、b、n对曲线形状的影响。

(1)a=1;b=1;n=1(2)a=10;b=1;n=1(3)a=10;b=10;n=1 (4)a=10;b=10;n=10参数a、b、n对曲线形状的影响:由上面绘制的图形可知:a决定图形的大小,当a为整数时,图形半径大小就是a;b决定图形的旋转角度,图形的形状及大小不变;n决定图形的扇叶数,当n 为奇数时,扇叶数为n,当n为偶数时,扇叶数为2n。

三、结论本次实验用到了曲线绘图、三位曲线绘图的知识,与老师上课的内容一致,让我学的matlab绘图的知识得到了巩固,我还学会了如何使用title、subplot、plot、axis等函数。

在做实验的过程复习了hold on指令是覆盖函数继续绘图的意思。

汇编语言程序设计实验四:8086标志寄存器及中断

汇编语言程序设计实验四:8086标志寄存器及中断

汇编语⾔程序设计实验四:8086标志寄存器及中断实验任务1task1.asm源码:assume cs:code, ds:datadata segmentx dw 1020h, 2240h, 9522h, 5060h, 3359h, 6652h, 2530h, 7031hy dw 3210h, 5510h, 6066h, 5121h, 8801h, 6210h, 7119h, 3912hdata endscode segmentstart:mov ax, datamov ds, axmov si, offset xmov di, offset ycall add128mov ah, 4chint 21hadd128:push axpush cxpush sipush disub ax, axmov cx, 8s: mov ax, [si]adc ax, [di]mov [si], axinc siinc siinc diinc diloop spop dipop sipop cxpop axretcode endsend start关于add指令的调试过程截图如下:由图可知add指令使得ZF标志位由NZ变为ZR,CF标志位由NC变为CY,可知运算结果为0且在运算中由最⾼位向更⾼位产⽣了进位。

关于inc指令的调试过程截图如下:由图可知inc指令使得ZF标志位由NZ变为ZR,可知运算结果为0,⽽CF未曾改变。

line31~line34的4条inc指令,不能替换成如下代码,原因是:该题⽤adc指令进⾏⼤整数加法,期间需要⽤到CF标志位的数值,⽽上⾯已经验证过add指令会对CF标志位产⽣影响,故不能替换。

add si, 2add di, 2128位加之前数值截图:完成128位加之后数值截图(有变化):实验任务2task2.asm源码:assume cs:code, ds:datadata segmentstr db 80 dup(?)data endscode segmentmov ds, axmov si, 0s1:mov ah, 1int 21hmov [si], alcmp al, '#'je nextinc sijmp s1next:mov ah, 2mov dl, 0ahint 21hmov cx, simov si, 0s2: mov ah, 2mov dl, [si]int 21hinc siloop s2mov ah, 4chint 21hcode endsend start运⾏结果截图:line11-18:获取键盘输⼊的值并赋值给ds:[si] ,若为“#”,则跳转到next处,否则si++后再次重新进⼊本循环。

计算机组成原理实验报告(四个实验 图)

计算机组成原理实验报告(四个实验 图)

福建农林大学计算机与信息学院计算机类实验报告课程名称:计算机组成原理姓名:周孙彬系:计算机专业:计算机科学与技术年级:2012级学号:3126010050指导教师:张旭玲职称:讲师2014年06 月22日实验项目列表序号实验项目名称成绩指导教师1 算术逻辑运算单元实验张旭玲2 存储器和总线实验张旭玲3 微程序控制单元实验张旭玲4 指令部件模块实验张旭玲福建农林大学计算机与信息学院信息工程类实验报告系:计算机专业:计算机科学与技术年级: 2012级姓名:周孙彬学号: 3126010050 实验课程:实验室号:_______ 实验设备号:实验时间:指导教师签字:成绩:实验一算术逻辑运算单元实验实验目的1、掌握简单运算器的数据传输方式2、掌握74LS181的功能和应用实验要求完成不带进位位算术、逻辑运算实验。

按照实验步骤完成实验项目,了解算术逻辑运算单元的运行过程。

实验说明1、ALU单元实验构成(如图2-1-1)1、运算器由2片74LS181构成8位字长的ALU单元。

2、2片74LS374作为2个数据锁存器(DR1、DR2),8芯插座ALU-IN作为数据输入端,可通过短8芯扁平电缆,把数据输入端连接到数据总线上。

运算器的数据输出由一片74LS244(输出缓冲器)来控制,8芯插座ALU-OUT 作为数据输出端,可通过短8芯扁平电缆把数据输出端连接到数据总线上。

图2-1-1图2-1-22、ALU单元的工作原理(如图2-1-2)数据输入锁存器DR1的EDR1为低电平,并且D1CK有上升沿时,把来自数据总线的数据打入锁存器DR1。

同样使EDR2为低电平、D2CK有上升沿时把数据总线上的数据打入数据锁存器DR2。

算术逻辑运算单元的核心是由2片74LS181组成,它可以进行2个8位二进制数的算术逻辑运算,74LS181的各种工作方式可通过设置其控制信号来实现(S0、S1、S2、S3、M、CN)。

当实验者正确设置了74LS181的各个控制信号,74LS181会运算数据锁存器DR1、DR2内的数据。

实验四 PLC实现的天塔之光彩灯控制

实验四  PLC实现的天塔之光彩灯控制

实验四 PLC实现的天塔之光彩灯控制实验学时:2 实验类型:设计型一、实验目的进一步熟悉PLC指令系统,掌握PLC的简单编程,用PLC与天塔之光实验模板构成闪光彩灯控制系统。

二、实验内容:天塔之光彩灯示意图及时序图如图2-8所示:1、控制要求彩灯工作方式要求为发射型闪烁,其工作流程如下:L1亮2秒后灭,接着L2、L3、L4、L5亮2秒后灭,接着L6、L7、L8、L9亮2秒后灭,然后L1亮2秒后灭……如此循环。

根据以上要求及控制时序图编制程序,并上机调试运行。

在上述程序的基础上,可对程序和I/O分配进行简单的修改,自行设计其它的闪烁方式.2、I/O分配输入:启动按键-X0 停止按键-X1输出:L1-Y1,L2-Y2,L3-Y3,L4-Y4,L5—Y5,L6-Y6,L7-Y7,L8-Y8,L9-Y9。

3、将设计的程序输入可编程控制器利用FPWIN—GR软件将设计好的梯形图程序输入计算机,并进行PG 转换,然后下传入PLC。

4、调试并运行程序在PLC训练装置上接线并运行、调试程序。

三、实验要求根据控制时序图和I/O分配表设计天塔之光的彩灯控制程序,写出程序清单及注释,画出电气控制图并转为梯形图。

编程时应注意定时器指令的用法。

将梯形图输入计算机并下装到PLC,调试并运行程序。

四、实验装置1、TVT-90A台式可编程控制器学习机实验屏;2、RS422/RS232C适配器;3、UNIT-2天塔之光实验板;4、微型电子计算机;5、连接导线若干。

X0Y1Y2Y3Y4Y5Y6Y7Y8Y9发射型彩灯控制时序图图2-8 天塔之光彩灯示意图与时序图五、实验步骤1、启动计算机并进入“FPWIN—GR”编程界面,将梯形图输入并进行PG转换,将程序存入磁盘,以备今后调用。

2、将24V电源的“+”极分别接至数字量调试单元X和Y的“COM”端,将电源“—”极接至数字量调试单元X和Y的C端(注:如无C接线端,则该装置为内部共地连接,无需连接负极线)。

实验四图的实现及遍历

实验四图的实现及遍历

实验四图的实现及遍历题目:(1)采用邻接矩阵作为图的存储结构,完成有向图和无向图的DFS和BFS操作;(2)采用邻接链表作为图的存储结构,完成有向图和无向图的DFS和BFS操作。

班级:0421001 姓名:杨欢学号:2010211971 完成日期:2011.12.3一、需求分析掌握有向图和无向图的概念;掌握邻接矩阵和邻接链表建立图的存储结构;掌握DFS 及BFS对图的遍历操作;了解图结构在人工智能、工程等领域的广泛应用。

实验要求:1、分析、理解程序。

2、调试程序。

设计一个有向图和一个无向图,任选一种存储结构,完成有向图和无向图的DFS(深度优先遍历)和BFS(广度优先遍历)的操作。

二、概要设计1,分析理解,调试程序2 ,设计一个无向图G,如右图所示3,设计一个有向图K,如右下图所示4,分别对无向图G和有向图K进行邻接矩阵存储和邻接链表存储,再分别进行深度优先遍历和广度优先遍历。

附加程序代码邻接矩阵作为存储结构的程序示例#include"stdio.h"#include"stdlib.h"#define MaxVertexNum 100 //定义最大顶点数typedef struct{char vexs[MaxVertexNum]; //顶点表int edges[MaxVertexNum][MaxVertexNum]; //邻接矩阵,可看作边表int n,e; //图中的顶点数n和边数e}MGraph; //用邻接矩阵表示的图的类型//=========建立邻接矩阵=======void CreatMGraph(MGraph *G){int i,j,k;char a;printf("Input VertexNum(n) and EdgesNum(e): ");scanf("%d,%d",&G->n,&G->e); //输入顶点数和边数scanf("%c",&a);printf("Input Vertex string:");for(i=0;i<G->n;i++){scanf("%c",&a);G->vexs[i]=a; //读入顶点信息,建立顶点表}for(i=0;i<G->n;i++)for(j=0;j<G->n;j++)G->edges[i][j]=0; //初始化邻接矩阵printf("Input edges,Creat Adjacency Matrix\n");for(k=0;k<G->e;k++) { //读入e条边,建立邻接矩阵scanf("%d%d",&i,&j); //输入边(Vi,Vj)的顶点序号G->edges[i][j]=1;G->edges[j][i]=1; //若为无向图,矩阵为对称矩阵;若建立有向图,去掉该条语句 }}//=========定义标志向量,为全局变量=======typedef enum{FALSE,TRUE} Boolean;Boolean visited[MaxVertexNum];//========DFS:深度优先遍历的递归算法======void DFSM(MGraph *G,int i){ //以Vi为出发点对邻接矩阵表示的图G进行DFS搜索,邻接矩阵是0,1矩阵int j;printf("%c",G->vexs[i]); //访问顶点Vivisited[i]=TRUE; //置已访问标志for(j=0;j<G->n;j++) //依次搜索Vi的邻接点if(G->edges[i][j]==1 && ! visited[j])DFSM(G,j); //(Vi,Vj)∈E,且Vj未访问过,故Vj为新出发点}void DFS(MGraph *G){int i;for(i=0;i<G->n;i++)visited[i]=FALSE; //标志向量初始化for(i=0;i<G->n;i++)if(!visited[i]) //Vi未访问过DFSM(G,i); //以Vi为源点开始DFS搜索}//===========BFS:广度优先遍历=======void BFS(MGraph *G,int k){ //以Vk为源点对用邻接矩阵表示的图G进行广度优先搜索int i,j,f=0,r=0;int cq[MaxVertexNum]; //定义队列for(i=0;i<G->n;i++)visited[i]=FALSE; //标志向量初始化for(i=0;i<G->n;i++)cq[i]=-1; //队列初始化printf("%c",G->vexs[k]); //访问源点Vkvisited[k]=TRUE;cq[r]=k; //Vk已访问,将其入队。

java_实验四

java_实验四

武汉工程大学计算机科学与工程学院实验报告[4]一、实验目的1)了解Java.awt包及Swing的新增特性。

2)了解Java系统图形用户界面的基本工作原理和界面设计的步骤。

3)了解图形用户界面的事件响应机制。

4)了解图形用户界面各种常用的基本组件的使用方法及其事件响应。

5)掌握Java常用组件的应用6)掌握图形用户界面各种布局策略的设计与使用二、实验要求1)创建一个简单的图形用户界面。

2)使用Java类库中提供的组件,并添加到图形用户界面中。

3)通过Java事件处理机制,实现与用户的交互信息。

4)练习使用布局管理器5)使用Java类库中提供的组件,并添加到图形用户界面中6)通过Java事件处理机制,实现与用户的交互信息三、实验内容对一个优秀的应用程序来说,良好的图形用户界面是必不可少的。

因为只有通过图形界面,用户才能够与程序友好的交互。

缺少良好的图形用户界面,将会给用户理解和应用程序带来很多不便。

创建一个完整的图形用户界面的应用程序大致流程如下:1)引用需要的包和类。

2)设置一个顶层的容器。

3)根据需要为容器设置布局管理器或使用默认布局管理器。

4)将组件添加到容器内,位置自行设计。

5)为响应事件的组件编写事件处理代码。

下面我们先建立一个简单的图形用户界面,然后通过合适的布局管理器,将各种常用组件添加到图形用户界面中,实现与用户的交互信息。

1. 创建简单的图形用户界面(1)创建简单的 Frame 框架在 AWT 库中,对应于框架的类是 Frame,在 Swing 库中,相应的类是 JFrame。

JFrame 类扩展了 Frame 类。

大部分 ATWT 组件在 Swing 中都有等价的组件,它们在表示形式上差一个“J”。

框架是一个容器,可以在这个容器中放入其他一些图形用户界面组件,如按钮、菜单等,从而组成一个功能完善的程序。

下面的例子是建立一个 Frame 框架,通过这个例子学习如何创建一个简单的图形用户界面。

实验四:控制冒险与分支预测

实验四:控制冒险与分支预测

深圳大学实验报告课程名称:计算机系统(3)实验项目名称:处理器结构实验二学院:********专业:*******************指导教师:*******报告人:****学号:*****班级:*************实验时间:2017年12月6日星期三实验报告提交时间:2017年12月21日星期四教务处制注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。

一、试验目的——控制冒险与分支预测了解控制冒险分支预测的概念了解多种分支预测的方法,动态分支预测更要深入了解理解什么是BTB(Branch Target Buffer),并且学会用BTB来优化所给程序利用BTB的特点,设计并了解在哪种状态下BTB无效了解循环展开,并于BTB功能进行对比对WinMIPS64的各个窗口和操作更加熟悉二、实验内容按照下面的实验步骤及说明,完成相关操作记录实验过程的截图:首先,给出一段矩阵乘法的代码,通过开启BTB功能对其进行优化,并且观察流水线的细节,解释BTB在其中所起的作用;其次,自行设计一段使得即使开启了BTB也无效的代码。

第三,使用循环展开的方法,观察流水因分支停顿的次数减少的现象,并对比采用BTB结构时流水因分支而停顿的次数。

(选做:在x86系统上编写C语言的矩阵乘法代码,用perf观察分支预测失败次数,分析其次数是否与你所学知识吻合。

再编写前面第二部使用的令分支预测失败的代码,验证x86是否能正确预测,并尝试做解释)三、实验环境硬件:桌面PC软件:Windows四、实验步骤及说明背景知识在遇到跳转语句的时候,我们往往需要等到MEM阶段才能确定这条指令是否跳转(通过硬件的优化,可以极大的缩短分支的延迟,将分支执行提前到ID阶段,这样就能够将分支预测错误代价减小到只有一条指令),这种为了确保预取正确指令而导致的延迟叫控制冒险(分支冒险)。

为了降低控制冒险所带来的性能损失,一般采用分支预测技术。

操作系统实验四存储管理

操作系统实验四存储管理

宁德师范学院计算机系
实验报告
(2014—2015学年第二学期)
课程名称操作系统
实验名称实验四存储管理
专业计算机科学与技术(非师)年级2012级
学号B2012102147 姓名王秋指导教师王远帆
实验日期2015-05-20
图1 word运行情况
“内存使用”列显示了该应用程序的一个实例正在使用的内存数量。

启动应用程序的另一个实例并观察它的内存需求。

请描述使用第二个实例占用的内存与使用第一个实例时的内存对比情况:第二个实例占用内存22772K,比第一个实例占用的内存大很多
2、教师批改学生实验报告应在学生提交实验报告10日内。

计算机图形学实验四

计算机图形学实验四

太原工业学院实验报告memDCmemDC.FillSolidRect(rect,pDC->GetBkColor());//按原来背景填充客户区,否则是黑色memDC.SetMapMode(MM_ANISOTROPIC);//memDC自定义坐标系memDC.SetWindowExt(rect.Width(),rect.Height());memDC.SetViewportExt(rect.Width(),-rect.Height());memDC.SetViewportOrg(rect.Width()/2,rect.Height()/2);rect.OffsetRect(-rect.Width()/2,-rect.Height()/2);DrawObject(&memDC);//向memDC绘制图形pDC->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&memDC,-rect.Width()/2,-rect.Height()/2,SRCCOPY);//将内存memDC中的位图拷贝到显示pDC中memDC.SelectObject(pOldBitmap);//恢复位图NewBitmap.DeleteObject();//删除位图S}(2)定义点表、面表、透视变换及其参数的初始化:void CTestView::ReadPoint()//点表{//顶点的三维坐标(x,y,z),立方体边长为2adouble a=150;P[0].x=-a;P[0].y=-a;P[0].z=-a;P[1].x=+a;P[1].y=-a;P[1].z=-a;P[2].x=+a;P[2].y=+a;P[2].z=-a;P[3].x=-a;P[3].y=+a;P[3].z=-a;P[4].x=-a;P[4].y=-a;P[4].z=+a;P[5].x=+a;P[5].y=-a;P[5].z=+a;P[6].x=+a;P[6].y=+a;P[6].z=+a;P[7].x=-a;P[7].y=+a;P[7].z=+a;}void CTestView::ReadFace()//面表{//面的顶点数和面的顶点索引F[0].SetNum(4);F[0].vI[0]=4;F[0].vI[1]=5;F[0].vI[2]=6;F[0].vI[3]=7;//前面F[1].SetNum(4);F[1].vI[0]=0;F[1].vI[1]=3;F[1].vI[2]=2;F[1].vI[3]=1;//后面F[2].SetNum(4);F[2].vI[0]=0;F[2].vI[1]=4;F[2].vI[2]=7;F[2].vI[3]=3;//左面F[3].SetNum(4);F[3].vI[0]=1;F[3].vI[1]=2;F[3].vI[2]=6;F[3].vI[3]=5;//右面F[4].SetNum(4);F[4].vI[0]=2;F[4].vI[1]=3;F[4].vI[2]=7;F[4].vI[3]=6;//顶面F[5].SetNum(4);F[5].vI[0]=0;F[5].vI[1]=1;F[5].vI[2]=5;F[5].vI[3]=4;//底面}void CTestView::InitParameter()//透视变换参数初始化{k[1]=sin(PI*Theta/180);k[2]=sin(PI*Phi/180);k[3]=cos(PI*Theta/180);k[4]=cos(PI*Phi/180);k[5]=k[2]*k[3];k[6]=k[2]*k[1];k[7]=k[4]*k[3];k[8]=k[4]*k[1];}void CTestView::PerProject(CP3 P)//透视变换{CP3 ViewP;ViewP.x=k[3]*P.x-k[1]*P.z;//观察坐标系三维坐标ViewP.y=-k[8]*P.x+k[2]*P.y-k[7]*P.z;ViewP.z=-k[6]*P.x-k[4]*P.y-k[5]*P.z+R;ScreenP.x=d*ViewP.x/ViewP.z;//屏幕坐标系二维坐标ScreenP.y=d*ViewP.y/ViewP.z;}(3)绘制立方体线框:void CTestView::DrawObject(CDC* pDC)//绘制立方体线框{CP2 t;CLine *line=new CLine;for(int nFace=0;nFace<6;nFace++)//面循环{for(int nPoint=0;nPoint<F[nFace].vN;nPoint++)//顶点循环{PerProject(P[F[nFace].vI[nPoint]]);if(0==nPoint){line->MoveTo(pDC,ScreenP);t=ScreenP;}elseline->LineTo(pDC,ScreenP);}line->LineTo(pDC,t);//闭合多边形}delete line;}(4)一点、两点、三点透视:void CTestView::OnOnepoint(){// TODO: 在此添加命令处理程序代码AfxGetMainWnd()->SetWindowText(CString("一点透视"));KillTimer(1);bPlay=FALSE;Phi=90;Theta=0;InitParameter();Invalidate(FALSE);}void CTestView::OnTwopoint(){// TODO: 在此添加命令处理程序代码AfxGetMainWnd()->SetWindowText(CString("二点透视"));KillTimer(1);bPlay=FALSE;Phi=90;Theta=30;InitParameter();Invalidate(FALSE);}void CTestView::OnThreepoint(){// TODO: 在此添加命令处理程序代码AfxGetMainWnd()->SetWindowText(CString("三点透视"));KillTimer(1);bPlay=FALSE;Theta=45;Phi=45;InitParameter();Invalidate(FALSE);}运行结果:一点透视:两点透视:三点透视:实验拓展:使用图标按钮旋转立方体的透视投影图。

厦门理工学院C语言 实验4_循环结构

厦门理工学院C语言  实验4_循环结构

《高级语言程序设计》实验报告实验序号:4 实验项目:循环结构1.#include <stdio.h>void main(){int a=0,b=0,c=0; // a->男, b->女, c->小孩,变量初始化为0while(a<=36){b=0;while(b<=36){c=36-a-b;if(c>=0){if((36==a*4+b*3+c/2)&&(0==c%2)) //小孩个数需要为偶数才成立printf("男人:%d 女人:%d 小孩:%d\n",a,b,c);}b++;}a++;}}2.#include "stdio.h"int main(){int i=0,count=0;while (count<10){if (i%3==2 && i%5==4 && i%7==3){printf("%d ",i);count++;}i++;}}3.#include<stdio.h>#include<math.h>main(){long int x;int i=0;printf("input:");scanf("%ld",&x);do{x=x/10;i++;}while(x>0);printf("the nubmer is:%d\n",i);}4.#include<stdio.h>main(){int i,x=3,y=0;for(i=1;i<=10;i++){x=(x-0.5)*2;y+=x;}printf("x=%d\n,y=%d\n",x,y);}5.#include "stdio.h"void main(){int i,a,b,c;int count=0;for(i=100;i<1000;i++){if(i%2==0){a=i%10;b=(i/10)%10;c=i/100;if((a==b && b!=c)||(a==c && b!=c)||(b==c && a!=c)){count++;printf("%d\t",i);}}}printf("\nT otally: %d\n",count);}6.#include<stdio.h>main(){float sum,term,a,b,c;int i;sum=0;a=2;b=1;i=1;while(i<=20){term=a/b;sum=sum+term;c=a+b;b=a;a=c;i++;}printf("数列前20项之和为%.2f\n",sum); }7.#include<stdio.h>int main(){int i,j;for (i=1;i<=7;++i){for(j=1;j<=(i<4?4-i:i-4);++j){printf(" ");}for(j=1;j<=(i<4?i*2-1:15-2*i);++j){printf("*");}for(j=1;j<=(i<4?4-i:i-4);++j){printf(" ");}printf("\n");}}8. #include<stdio.h>void main(){for(int i=0;i<=10;i++){for(int j=0;j<=5;j++){if(i*1+j*2==10)printf("10元可兑换成%d张1元和%d张2元\n",i,j);}}}。

完整word版,J2EE 实验4

完整word版,J2EE 实验4

淮海工学院计算机工程学院实验报告书课程名:《J2EE环境与程序设计》题目:使用Spring快速实现Web开发班级:G计算机131班学号:2013150225姓名:贲新宇评语:成绩:指导教师:批阅时间:年月日一.目的与要求掌握Spring框架的基本使用方法,能够完成Java对象及对象之间的依赖注入定义,实现对象与对象间控制反转。

掌握使用Spring将Struts、Spring、Hibernate三个框架在WEB应用中的集成。

二.实验内容基于Spring框架完成对象的实例化及依赖注入。

实现Struts、Spring、Hibernate 框架在WEB应用的集成应用。

完成基于SSH的WEB应用程序中的用户注册、登录验证模块,用户信息存储在关系数据库中,数据库可选sqlserver或mysql。

三.实验步骤1.准备实验环境:安装Mysql及管理端,安装eclipse环境。

2.设计并创建存储用户信息的数据表users。

并在Mysql中创建该表。

3.设计并创建用户类User,及其Hibernate映射文件User.hbm.xml:4.设计并创建用户存取类UserDAO,由该类通过Hibernate框架实现用户信息的存取。

5.设计并创建用户服务类UserService,由该类实现登录验证。

6.根据模块需要实现的功能,设计相关的用户界面(JSP视图)。

7.设计基于Struts框架的Action类。

实现相应功能的处理(注册、登录、用户列表)。

8.编写Spring的applicationContext.xml文件,装配Action、Service、DAO、sesstionFactory、dataSource。

9.编写struts.xml,声明action。

10.测试。

四.实验结果1.注册用户和登录用户的相应的代码段,以及登录成功的显示。

如图1所示:图12.用户注册成功的数据库的显示结果。

如图2所示:图23.当把注册用户的代码注释掉的时候,程序运行的结果仍然是成功登录的显示结果。

数值计算(数值分析)实验4-分段三次埃尔米特(hermite)插值【c程序实现+流程图】

数值计算(数值分析)实验4-分段三次埃尔米特(hermite)插值【c程序实现+流程图】

实验四分段三次埃尔米特插值(一)实验目的掌握分段三次埃尔米特插值算法。

(二)实验项目内容1.写出计算步骤和流程图。

2.对每种算法分别用C或c#程序实现。

3.调试程序。

可用以下数据进行调试。

已知函数y=1/(1+x2)在区间[0,3]上取等距插值节点,求区间[0,3]上的分段三次埃尔米特插值函数,并利用它求出f(1.5)的近似值(0.3075)。

x0 1 2iy 1 0.5 0.2 iy 0 -0.5 -0.16 i(三)主要仪器设备微机(四)实验室名称公共计算机实验室(五)实验报告撰写实验四分段三次埃尔米特插值实验报告一、流程图二、 程序代码#include<stdio.h>#include<math.h>float f0(float x) N Y开始输入i x ,i y ,xy=0, j=0t=1i j ix x t t x x -=- i=0,…j-1,j+1,…n i y y ty =+j=n? 输出y结束j=j+1{return((x-1)*(x-1)*(2*x+1));}float f1(float x){return(x*x*(-2*x+3));}float g0(float x){return(x*(x-1)*(x-1));}float g1(float x){return(x*x*(x-1));}void main(){float x0,x1,x,y0,y1,yy0,yy1,h,p;printf("输入x0,x1,x,y0,y1和yy0,yy1的取值");scanf("%f%f%f%f%f%f%f",&x0,&x1,&x,&y0,&y1,&yy0,&yy1); h=x1-x0;p=y0*f0((x-x0)/h)+y1*f1((x-x0)/h)+h*yy0*g0((x-x0)/h)+h*yy1*g1((x-x0)/h);printf("%f\n",p);}三、运行结果【截图】。

实验4 选择结构程序设计

实验4 选择结构程序设计

实验4 选择结构程序设计一、实验目的:1、掌握if语句的用法,能够根据要求熟练使用单分支、双分支、多分支(嵌套)结构;2、掌握switch语句的格式、功能及注意事项;3、、熟悉条件运算符和条件表达式的基本用法;4、初步学习随机函数rand()的使用。

二、实验内容1、(基础题)编写一个程序:输入一个正整数,判断其是奇数还是偶数。

运行界面如下所示:(提示:判断奇偶性是指能否被2整除,可考虑用%运算符取余数)2、(基础题以下程序的功能是:输入学生四门课程的成绩,然后根据要求构建相应的逻辑表达式,之后计算这些表达式的值并输出。

请根据程序相关提示填写所缺代码,再运行该程序予以验证。

#include<stdio.h>int main(){double s1,s2,s3,s4;printf("请输入学生的4门课程成绩:");scanf("_______________________",_____________________);printf("\ns1=%f, s2=%f, s3=%f, s4=%f\n\n",s1,s2,s3,s4);printf("四门课程的平均成绩大于等于80? %s\n\n",___________________?"是":"否");printf("四门课程中每门的成绩均大于等于80? %s\n\n",_________________?"是":"否");printf("四门课程中至少有两门的成绩大于等于80? %s\n\n",___________?"是":"否");return 0;}程序运行界面如下图所示:3、对于下列函数:编写程序,要求输入x的值,输出y值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
scanf("%c",&v1);
getchar(); /*输入弧头弧尾*/
printf("请输入边尾:");
scanf("%c",&v2);
getchar();
i=locatevex(G,v1);
j=locatevex(G,v2);
G.arcs[i][j]=1;G.arcs[j][i]=1;}
}
int WXDisplay(MGraph *G)//无向图
{
int i,j;
printf("邻接矩阵如下图:\n");
for(i=0;i<G->vexnum ;i++)
{
for(j=0;j<G->vexnum ;j++)
printf("%6d",G->arcs[i][j]);
printf("\n");
}
return 0;
} /*无向图建好*/
char Firstadjvex(MGraph G,char v) /*返回v的第一个邻接点函数,若无则返回null*/
getchar();
}/*vexs[]输入完成*/
for(i=0;i<G.vexnum;i++)
for(j=0;j<G.vexnum;j++)
G.arcs[i][j]=INFINITY; /*邻接矩阵初始化,值均为INFINITY*/
for(k=0;k<G.arcnum;k++){
printf("请输入边头:");
}
void DFSTraverse(MGraph &G) /*图的递归遍历*/
{int v;char w;
for(v=0;v<G.vexnum;v++)
G.visited[v]=0; /*访问标志数组初始化,0代表未被访问*/
for(v=0;v<G.vexnum;v++)
if(!G.visited[v])
图的操作的实现代码及运行截图
#include <stdio.h>
#define MAX_VERTEX 20
#define INFINITY 32767
typedef struct{
char vexs[ MAX_VERTEX ];
int vexnum,arcnum;
int arcs[ MAX_VERTEX ][ MAX_VERTEX ];
} /*locatevex函数,返回v在图G中的位置*/
void createMGraph(MGraph &G) /*建造一个无向图*/
{ int i,j,k;
char v1,v2;
printf("请输入结点个数:");
scanf("%d",&G.vexnum);
getchar();
printf("\n");
int visited[ MAX_VERTEX ];
}MGraph;/*图的节点数组,节点数,边数,邻接矩阵*/
int locatevex(MGraph &G,char v ) /*locatevex函数,返回v在图G中的位置*/
{ int i;
for(i=0;v!=G.vexs[i];i++);
return i;
DFS(G,v);
}
void main(){
MGraph G;
createMGraph(G);
WXDisplay(&G);
printf("\n");
printf("深度遍历为:");
DFSTraverse(G);
printf("\n");
};
scanf("%d",&G.arcnum);
getchar();
printf("\n");
printf("请输入节点:\n");
for(i=0;i<G.vexnum;i++)
{ printf("vexs[%d]: ",i);
scanf("%c",&G.vexs[i]);
{int i,j;i=locatevex(G,v);
for(j=0;G.arcs[i][j]==0;j++)
if(j==G.vexnum-1) return NULL ;
return G.vexs[j];}
char Nextadjvex(MGraph G,char v,char w) /*返回v相对于w的邻接点,若无则返回null*/
G.visited[v]=1;
printf("%c",G.vexs[v]);
for(w=Firstadjvex(G,G.vexs[v]);w!=NULL;w=Nextadjvex(G,G.vexs[v],w))
if(!G.visited[locatevex(G,w)])
DFS(G,locatevex(G,w));
{int i,j;
i=locatevex(G,v);
j=locatevex(G,w);
for(j++;G.arcs[i][j]==0;j++)
if(j==G.vexnum) return NULL;
return G.vexs[j];
}
void DFS(MGraph &G,int v )
{ char w;
相关文档
最新文档