最新范文 方案 计划 总结 报告 体会 事迹 讲话 倡议书 反思 制度 入党

分支与循环程序设计实验-报告

日期:2021-06-01  类别:最新范文  编辑:一流范文网  【下载本文Word版

分支与循环程序设计实验-报告 本文关键词:程序设计,分支,循环,实验,报告

分支与循环程序设计实验-报告 本文简介:《微机实验》报告实验名称分支与循环程序设计实验指导教师罗志祥专业班级光电1406姓名段昳晖学号U2014*****联系电话137********1、任务要求1.设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写完整程序。2.利用51系列单片机设计一个

分支与循环程序设计实验-报告 本文内容:

《微机实验》报告

实验名称

分支与循环程序设计实验

指导教师

罗志祥

专业班级

光电1406

姓名

段昳晖

学号

U2014*****

联系电话

137********

1、

任务要求

1.

设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写完整程序。

2.

利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。P3.0为低电平时开始计时,为高电平时停止计时。设计1s延时子程序(延时误差小于10us,晶振频率12MHz)。

2、

设计思路

1.

设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写完整程序。

将外部单元1000H中的X,通过分支判断,分别执行不同的语句,三条语句分别为标记为L1、L2、L3,先比较X与64的大小关系,再判断X与10的大小关系,主要利用比较转移指令CJNE,以及执行CJNE指令后的进位位CY,进一步比较大小,分别跳转至对应语句。将结果存于外部单元的1001H以及1002H。

2.

利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。P3.0为低电平时开始计时,为高电平时停止计时。设计1s延时子程序(延时误差小于10us,晶振频率12MHz)。

主程序设计三层循环,分别对应时、分、秒,最内层安放一秒延时程序。利用R0、R1、R2计数,R3保存分钟数、R4保存小时数,最内层循环60次,中循环循环1次,中循环60秒,外循环循环1次,外循环循环24次,清零。其中对端口显示的秒数、分钟数、时间数,进行二进制修正。

利用循环来设计延时程序,合理计算语句长度,以及循环次数。

程序运行时修正P3.0的值,可以实现暂停计数和继续的功能。

提高部分(选做):

1)

实现4位十进制加、减1计数,千位、百位由P1口输出;十位、个位由P2口输出。利用P3.7状态选择加、减计数方式。

2)

利用P3口低四位状态控制开始和停止计数,控制方式自定。

初始化P1、P2,,计数循环中插入一秒延时程序。R1存千百位、R2存个十位,P3.7=0时,进行加1计数,取出R2中的数存于A,对A

加1,同时进行十进制修正,存于P2,达到99,则进位对千百位进行加1。P3.7=1时,进行减一操作,取出R1中的数存于A,对A减1,同时进行十进制修正,存于P1,达到0,则对P2,对R2进行减一。

计数循环前判断P3.0的值,当P3.0=1时,开始计数,P3.0=0时,原地循环,停止计数,直到P3.0=1,可以实现随时停止与开始。

3、

资源分配

1.

设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写完整程序。

X存于片外1000H

Y存于片外1001H、1002H

其中,求平方时,低位存于1001H,,高位存于1002H

除二时,商存于1001H,,余数存于1002H

2.

利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。P3.0为低电平时开始计时,为高电平时停止计时。设计1s延时子程序(延时误差小于10us,晶振频率12MHz)。

P0输出小时数

P1输出分钟数

P2输出秒数

R0小时循环计数

R1分钟循环计数

R2秒循环计数

R3保存分钟数

R4保存小时数

提高部分(选做):

1)实现4位十进制加、减1计数,千位、百位由P1口输出;十位、个位由P2口输出。利用P3.7状态选择加、减计数方式。

2)利用P3口低四位状态控制开始和停止计数,控制方式自定。

P1输出千百位

P2输出个十位

P3.0

计数开始与停止控制

P3.7

加1减1计数切换

R1存千百位

R2存个十位

4、

流程图

1.

设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写完整程序。

2.

利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。P3.0为低电平时开始计时,为高电平时停止计时。设计1s延时子程序(延时误差小于10us,晶振频率12MHz)。

提高部分(选做):

1)实现4位十进制加、减1计数,千位、百位由P1口输出;十位、个位由P2口输出。利用P3.7状态选择加、减计数方式。

2)利用P3口低四位状态控制开始和停止计数,控制方式自定。

5、

源代码

(含文件头说明、语句行注释)

1.

设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写完整程序。

File

name:

task1.asm

Description:

对8bits符号数X,对于不同的X进行不同的运算操作

Date:

2016.10.13

Designed

by:

Source

used:

1000H:

存X的值

1001H、1002H:

存Y的值

1001H:平方运算所得低位;除法运算所得商

1002H:平方运算所得高位;除法运算所得余数

ORG

0000H

LJMP

MAIN

ORG

0100H

MAIN:

MOV

DPTR,#1000H

;X存于1000H

MOV

A,#-1

;给X赋值

MOV

B,#0

MOVX

@DPTR,A

;正负判断

JB

ACC.7,L3

;X0

CJNE

A,#64,L2

;A!=64,L2

SJMP

L1

L1:

MOV

B,A

;X>=64

MUL

AB

SJMP

STORE

;低位存于1001H,?高位存于1002H

L2:

JNC

L1

;X>64,L1

CJNE

A,#10,L4

;A!=10,L4

SJMP

L3

;X=10,L3

L4:

JC

L3

;X10

SJMP

STORE

;商存于1001H,余数存于1002H

L3:

CPL

A

;X<=10

STORE:

INC

DPTR

;结果存于1001H

MOVX

@DPTR,A

INC

DPTR

MOV

A,B

MOVX

@DPTR,A

SJMP

$

END

2.

利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。P3.0为低电平时开始计时,为高电平时停止计时。设计1s延时子程序(延时误差小于10us,晶振频率12MHz)。

3.

File

name:

task2.asm

Description:

24小时制电子时钟

Date:

2016.10.13

Designed

by:

DYH

Source

used:

P0:输出小时数

P1:输出分钟数

P2:输出秒数

R0:小时循环计数

R1:分钟循环计数

R2:秒循环计数

R3:保存分钟数

R4:保存小时数

ORG

0000H

LJMP

MAIN

ORG

0100H

MAIN:

MOV

SP,#40H

MOV

P0,#0

MOV

P1,#0

MOV

P2,#0

MOV

R3,#0

;保存小时

MOV

R4,#0

;保存分钟

;设定循环

MOV

R0,#24

;小时

外循环·24

MOV

R1,#59

;分钟

中循环·60

MOV

R2,#59

;秒

内循环·60

CLR

A

LOOP:

JNB

P3.0,$

;p3.0=0,结束计数

LCALL

DELAY

;延时1s

ADD

A,#1

DA

A

MOV

P2,A

DJNZ

R2,LOOP

MOV

A,R3

;分钟开始计数

将分钟赋给A

ADD

A,#1

;分钟+1

DA

A

MOV

R3,A

MOV

P1,A

CLR

A

;秒清零

MOV

R2,#59

;重置内循环·

DJNZ

R1,LOOP

;R1!=0,中循环

MOV

R3,#0

;分钟清零,小时计数

MOV

A,R4

ADD

A,#1

DA

A

MOV

R4,A

MOV

P0,A

MOV

R2,#59

;重置中循环

MOV

R1,#59

;重置外循环

DJNZ

R0,LOOP

DONE:

SJMP

$

DELAY:

MOV

R7,#11

;n==((201*5+5)*90+9)*11+2=1000001

DELAY3:

MOV

R6,#90

;t=1.000001s

DELAY2:

MOV

R5,#201

DELAY1:

NOP

NOP

NOP

DJNZ

R5,DELAY1

NOP

NOP

DJNZ

R6,DELAY2

NOP

NOP

NOP

NOP

NOP

NOP

DJNZ

R7,DELAY3

RET

END

提高部分(选做):

1)实现4位十进制加、减1计数,千位、百位由P1口输出;十位、个位由P2口输出。利用P3.7状态选择加、减计数方式。

2)利用P3口低四位状态控制开始和停止计数,控制方式自定。

Description:

实现4位十进制加、减1计数

Date:

2016.10.13

Designed

by:

DYH

Source

used:

P1输出千百位

P2输出个十位

P3.0

计数开始与停止控制

P3.7

加1减1计数切换

R1存千百位

R2存个十位

ORG

0000H

MOV

P1,#0

;输出千百位

MOV

P2,#0

;输出个十位

MOV

R1,#0

;存千百位

MOV

R2,#0

;存个十位

LJMP

MAIN

ORG

0100H

MAIN:

JB

P3.0,$

;计数开始与停止控制

JNB

P3.7,ADD1

;加1减1,模式选择

SUB1:

MOV

P1,#99

MOV

P2,#99

MOV

R1,#99

LOOP2:

MOV

R2,#99

LOOP1:

JB

P3.0,$

JNB

P3.7,LOOP3

MOV

A,R2

LCALL

DELAY

DEC

A

MOV

R2,A

MOV

P2,R2

CJNE

R2,#0H,LOOP1

MOV

A,R1

DEC

A

MOV

R1,A

MOV

P1,R1

CJNE

R1,#0H,LOOP2

SJMP

$

ADD1:

MOV

P1,#0

MOV

P2,#0

MOV

R1,#0

LOOP4:

MOV

R2,#0

LOOP3:

JB

P3.0,$

JB

P3.7,LOOP1

MOV

A,R2

LCALL

DELAY

INC

A

MOV

R2,A

MOV

P2,R2

CJNE

R2,#99H,LOOP3

MOV

A,R1

INC

A

MOV

R1,A

MOV

P1,R1

CJNE

R1,#99H,LOOP4

MOV

R1,#0

SJMP

$

DELAY:

MOV

R7,#11

;n==((201*5+5)*90+9)*11+2=1000001

DELAY3:

MOV

R6,#90

;t=1.000001s

DELAY2:

MOV

R5,#201

DELAY1:

NOP

NOP

NOP

DJNZ

R5,DELAY1

NOP

NOP

DJNZ

R6,DELAY2

NOP

NOP

NOP

NOP

NOP

NOP

DJNZ

R7,DELAY3

RET

END

6、

程序测试方法与结果

1.

设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写完整程序。

(1)

X=-30=E2H

Y=1DH

(2)

.X=5=05H,Y=FAH

(3)

.X=10=0AH,Y=F5H

(4)

X=25=19h

Y=0CH(商)

01H(余数)

(5)

.X=64=40H

Y=1000H

2.

利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。P3.0为低电平时开始计时,为高电平时停止计时。设计1s延时子程序(延时误差小于10us,晶振频率12MHz)。

(1)

P3.0=0,停止计数

(2)

分钟进位前

(3)

分钟进位后

(4)

小时进位前

(5)

小时进位后

提高部分(选做):

1)实现4位十进制加、减1计数,千位、百位由P1口输出;十位、个位由P2口输出。利用P3.7状态选择加、减计数方式。

2)利用P3口低四位状态控制开始和停止计数,控制方式自定。

(1)

P3.0=1,停止计数

(2)

P3.0=1,中途停止计数

(3)

P3.0=0,从暂停点继续计数

(4)

P3.7=0,加1计数前后

(5)

P3.7=1,减1计数前后

思考题

1.

实现多分支结构程序的主要方法有哪些?举例说明。

2.

在编程上,十进制加1计数器与十六进制加1计数器的区别是什么?怎样用十进制加法指令实现减1计数?

十进制加1计数器,逢10进1,计数模为10,十六进制加1计数器逢16进1,计数模为16,加上1的补码,再通过DA,进行BCD修正

本人承诺:

本报告内容真实,无伪造数据,无抄袭他人成果。本人完全了解学校相关规定,如若违反,愿意承担其后果。

签字:

2016

10

25

其它说明:

1.标题:黑体,小四号

2.

正文:宋体,五号,1.5倍行距

3.流程图使用

SmartDraw7

或Visio软件绘制

4.不要加封面

29

篇2:分支程序设计实验实验报告

分支程序设计实验实验报告 本文关键词:实验,程序设计,分支,报告

分支程序设计实验实验报告 本文简介:实验二分支程序设计实验实验报告实验名称:分支程序设计实验指导教师罗志祥专业班级光信1006姓名张博学号U201013339联系方式13554098548一、任务要求:熟练掌握KeilC环境下汇编语言程序的调试方法,加深对汇编语言指令、机器码、寻址方式等基本内容的理解,掌握分支程序和简单程序的设计与调

分支程序设计实验实验报告 本文内容:

实验二

分支程序设计实验实验报告

实验名称:分支程序设计实验

指导教师

罗志祥

专业班级

光信1006

姓名

张博

学号U201013339

联系方式

13554098548

一、任务要求:

熟练掌握KeilC环境下汇编语言程序的调试方法,加深对汇编语言指令、机器码、寻址方式等基本内容的理解,掌握分支程序和简单程序的设计与调试方法,了解并行IO口的使用。

1.

设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写程序。

2.

利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。P3.0为低电平时开始计时,为高电平时停止计时。

提高部分(选做):

a.

实现4位十进制加、减1计数,千位、百位由P1口输出;十位、个位由P2口输出。利用P3.7状态选择加、减计数方式。

b.

利用P3口低四位状态控制开始和停止计数,控制方式自定。

二、设计思路:

1.分支函数程序设计:首先将X赋给累加器A,与40比较大小,将大于或等于40的执行乘方操作;小于40的再与20做比较,大于20的执行取除法操作,小于或等于20的执行取反操作。最后将计算结果Y存于片外的RAM上。

2.电子时钟程序设计思路:首先用循环程序的嵌套实现一个1s的延时,同时让记秒的端口P2同步加一,到60后清零;再让此循环执行60次实现1min的延时,同时让P1同步加一,到60后清零;再让分钟的循环执行24次,实现1hour的延时,同时让P0同步加一。至此循环,即可实现24小时的时钟功能。(注:本计算机的晶振频率为12MHz)

3.4位十进制加、减1计数程序思路:低位的个位和十位赋给一个寄存器,而将高位即百位千位赋给另外一个寄存器,通过循环程序使低位数循环100次即向高位进位或借位,高位循环100次后即回归初始状态,同时设计两个子函数分别执行加一、减一操作。其中,用P3的第7位的状态实现对计数与否的控制。

三、资源分配:

1.分支函数程序:A:累加器C:位操作B:做乘方的寄存器DPTR:片外寻址指针2000H、2001H、2002H:片外存储空间

2.电子时钟程序:A:累加器C:位操作P0、P1、P2:分别电子时钟的时、分、秒输出R0、R1、R2:分别时分秒计数用存储器

R3、R4、R5:完成1s延时的相关数据存储

3.四位十进制加、减1计数程序:A:累加器C:位操作P0:低位输出口

P1:高位输出口

R0:高位寄存器

R1:低位寄存器

R7

R6:分别临时储存低位和高位的寄存器

四、流程图:

1.

分支函数程序流程图

2.电子时钟程序流程图

3.四进制加、减1计数程序流程图

各图形如下:

开始

取数

比较X与40的大小

大于或等于40

比较X与20的大小

小于或等于20

大于20

求平均值

执行取反运算

执行平方运算

存结果于Y

结束

电子时钟:

开始

R0,R1,R2置零

P0,P1,P2置零

R2<-0

R1<-0

R0<-0

空操作延时1秒

R0加1,输出P2

R0=60?

NO

YES

R1+1,输出P1

R1=60?

NO

YES

R2+1,输出P0

R2=24?

NO

YES

清零

结束

开始

加减计数器流程图:

P0,P1,P2<-0

P3.7=0?

执行—1计数

执行+1计数

YES

R0=0?

高两位R1-1,转换为十进制,输出P0

R0<-99

R0=0?

R1<-99

低位R0—1,转换为十进制,输出P1

P0,P1<-99

P0,P1<-0

R1<-0

R0<-0

低两位R0+1,转换为十进制,输出P1

R0=99?

NO

NO

YES

YES

高两位R1+1,转换为十进制,输出P0

R0=99?

YES

YES

NO

NO

清零

结束

五、源代码:

1)

ORG

0000H

MOV

A,#50H

MOV

DPTR,#2000H

MOVX

@DPTR,A

;将数存入片外RAM

MOV

DPTR,#2000H

MOVX

A,@DPTR

;从片外RAM中取数X

MOV

R7,A

CLR

C

MOV

R0,#40H

;对X的值进行比较

SUBB

A,R0

JNC

MUTI

MOV

R1,#20H

CLR

C

MOV

A,R1

SUBB

A,R7

JC

DIVI

MOV

A,R7

CPL

A

;对X进行取反

MOV

DPTR,#2001H

MOVX

@DPTR,A

;存入片外RAM

LJMP

STOP

DIVI:MOV

B,#2H

;除法子程序

MOV

A,R7

DIV

AB

MOV

DPTR,#2001H

MOVX

@DPTR,A

LJMP

STOP

MUTI:MOV

A,R7

;平方子程序

MOV

B,A

MUL

AB

MOV

DPTR,#2001H

;低位存入片外RAM中2001H

MOVX

@DPTR,A

INC

DPTR

MOV

A,B

MOVX

@DPTR,A

;高位存入片外RAM中2002H

STOP:SJMP

$

END

2)

ORG

0000H

MOV

R0,#0;R0,R1,R2置0

MOV

R1,#0

MOV

R2,#0

MOV

P0,#0;P0,P1,P2置0

MOV

P1,#0

MOV

P2,#0

INPUT:JNB

P3.0,STEP

START:

ACALL

DELAY

INC

R0;秒钟计数

MOV

A,R0

ACALL

OUTPUT;转化为bcd码

MOV

P2,A

CJNE

R0,#60,START;60进制判断进1

MOV

R0,#0;

MOV

P2,#0;

INC

R1;分钟计数

MOV

A,R1

ACALL

OUTPUT;转化为bcd码

MOV

P1,A

CJNE

R1,#60,START;60进制判断

MOV

R1,#0;

MOV

P1,#0;

INC

R2;时钟计数

MOV

A,R2;

ACALL

OUTPUT;计算bcd码

MOV

P0,A

CJNE

R2,#24,START;判断是不是溢出了

MOV

R2,#0;溢出清0

MOV

P0,#0;输出清0

SJMP

INPUT;跳出循环

DELAY:MOV

R3,#19H;循环次数

LOOP:MOV

R4,#28H

LOOP1:MOV

R5,#0FAH;循环次数

LOOP2:NOP

NOP

DJNZ

R5,LOOP2

DJNZ

R4,LOOP1

DJNZ

R3,LOOP

SJMP

START

RET

OUTPUT:MOV

B,#0AH;

DIV

AB

SWAP

A

ORL

A,B

RET

DONE:SJMP

$

STEP:SJMP

STEP

END

3)

ORG

0000H

MOV

P0,#0H

MOV

P1,#0H

MOV

P2,#0H

JUDGE:CLR

C

MOV

C,P3.7

JNC

ADDDONE

SUBDDONE:MOV

P0,#99H

MOV

P1,#99H

MOV

R0,#63H

;千,百位

MOV

R1,#63H

;十,个位

START:

MOV

A,R1

ACALL

DELAY

DEC

A

MOV

R7,A

ACALL

OUTPUT

MOV

P1,A

MOV

B,R7

MOV

R1,B

CJNE

A,#0H,START;低位循环

MOV

A,#63H

MOV

R7,A

ACALL

OUTPUT

MOV

P1,A

MOV

B,R7

MOV

R1,B

MOV

A,R0

MOV

R7,A

DEC

A

ACALL

OUTPUT

MOV

P0,A

MOV

B,R7

MOV

R0,B

CJNE

A,#0H,START

;高位循环

SJMP

$;原地踏步

ADDDONE:MOV

P0,#00H

MOV

P1,#00H

MOV

R0,#00H

;千,百位

MOV

R1,#00H

;十,个位

MOV

R0,#0H

START1:

MOV

A,R1

ACALL

DELAY

INC

A

MOV

R7,A

ACALL

OUTPUT

MOV

P1,A

MOV

B,R7

MOV

R1,B

CJNE

A,#99H,START1

;低位循环

MOV

A,#0H

MOV

R7,A

ACALL

OUTPUT

MOV

P1,A

MOV

B,R7

MOV

R1,B

MOV

A,R0

INC

A

MOV

R6,A

ACALL

OUTPUT

MOV

P0,A

MOV

B,R6

MOV

R0,B

CJNE

A,#99H,START1

;高位循环

SJMP

$;原地踏步

OUTPUT:MOV

B,#0AH;转化为BCD码

DIV

AB

SWAP

A

ORL

A,B

RET

DELAY:MOV

R3,#32H;循环次数

LOOP:MOV

R4,#14H;循环次数

LOOP1:MOV

R5,#0FAH;循环次数

LOOP2:NOP

NOP

DJNZ

R5,LOOP2

DJNZ

R4,LOOP1

DJNZ

R3,LOOP

RET

END

六、

程序测试方法与结果、软件性能分析

1)

分段函数测试

分别令X=10、30、50测试个分段函数,再使用X=20、40测试分界点,其对应结果如下:

X=40时,得到X,Y存入片外RAM

X=20时,

X=30时,

X=40时,Y的高位存入片外RAM

2002H,低位存入2001H

X=50时,Y的高位存入片外RAM

2002H,低位存入2001H

2)、电子时钟测试

当P3.0为高电平时,不记时,如图:

当P3.7为低电平时

计时开始,其计时效果如下:

由于小时等待时间太长,故在此不再截图显示

3)、4位十进制加、减1计数:

当P3.7为低电平时执行加一计数

P0输出千位和百位

P1输出十位和各位

当P3.7为高电平时执行减一计数

P0输出千位和百位

P1输出十位和各位

七、思考题

1.

1.实现多分支结构程序的主要方法有哪些?举例说明。

答:实现方法大致如下:

1.

1.使用条件转移指令实现,如DJNZ,JNC……

2.

2.使用分支表法,如分支地址表、转移指令表、地址偏移量表。

2.

2.在编程上,十进制加1计数器与十六进制加1计数器的区别是什么?怎样用十进制加法指令实现减1计数?

答:十进制加一后需要在计算结果的基础上进行修正,运用DA指令;而十六进制加一指令所得结果即为最终结果,无需进行修正。

写十进制加法指令时,首先将结果与#0相加,即ADD

A

,#0;

然后运用DA

A指令,修正A为十进制,最后再执行减一操作,即DEC

A。如此便可得到结果。

八、心得与体会

本次实验主要进行了分支程序的设计实验,并涉及到了函数的多分支,与子函数间的嵌套,加深了我们对如何运用子函数进行程序的分支的方法。其中,分支函数的实现过程不是很复杂,但是电子时钟的24小时制程序设计需要对多级函数的嵌套有深刻的理解,在这个程序的设计过程中,的确锻炼了我们对于子函数、延时程序、系统频率等相关概念有了多的了解。在电子时钟设计中,要指出的是,程序在考虑一些延时的循环函数时,一些耗时比较少的指令没有加入计算,这就导致了,程序在执行过程中会出现一定的误差,在所难免,但总体而言,精确度还算比较高,满足了设计的要求。

总而言之,本次实验在自己一人的努力下,基本完成了实验任务,岁耗时较长,但有其自己的效果,也提高了我通过单片机实现一些小型功能的能力,这些对以后的学习必将大有裨益!

篇3:《程序设计艺术与方法》课程实验报告

《程序设计艺术与方法》课程实验报告 本文关键词:设计艺术,课程,实验,程序,方法

《程序设计艺术与方法》课程实验报告 本文简介:《程序设计艺术与方法》课程实验报告一实验名称STL的熟悉与使用姓名系院专业信息工程系班级物联网一班学号实验日期指导教师成绩一、实验目的和要求1.(1)掌握C++中STL的容器类使用。(2)掌握C++中STL的算法类的使用。二、实验预习内容Vector,list可当作列表使用的数据结构,它们都是动态增

《程序设计艺术与方法》课程实验报告 本文内容:

《程序设计艺术与方法》课程实验报告

实验名称

STL的熟悉与使用

系院专业

信息工程系

物联网一班

实验日期

指导教师

一、实验目的和要求

1.(1)掌握C++中STL的容器类使用。(2)掌握C++中STL的算法类的使用。

二、实验预习内容

Vector,list可当作列表使用的数据结构,它们都是动态增长的。

1.vector表示一段连续的内存区域每个元素被顺序储存在这段内存中。对vector的随即访问效率很高。但是在任意位置而不是在vector末尾插入元素则效率很低,因为它需要把待插入元素的右边的每个元素都拷贝一遍。类似的删除任一个而不是vector的最后一个元素效率低。

2list表示非连续的内存区域并通过一对指向首尾元素的指针双向进行遍历在list的任意位置插入和删除元素的效率都很高,指针必须被赋值但不需要用拷贝元素来实现移动,另一方面它对随机访问的支持并不好访问一个元素需要遍历中间的元素,另外每个元素还有俩不能给个指针的额外空间开销。

3泛型算法让编写一般化并可重复使用的算法,其效率与指针对某特定数据类型而设计的算法相同。泛型即是指具有在多种数据类型上皆可操作的含义,与模板有些相似。STL巨大而且可以扩充,它包含很多计算机基本算法和数据结构,而且将算法与数据结构完全分离,其中算法是泛型的,不与任何特定数据结构或对象类型系在一起。

三、实验项目摘要

1.

练习vector

和list

的使用。

定义一个空的vector,元素类型为int,生成10

个随机数插入到vector

中,用迭代

器遍历vector

并输出其中的元素值。在vector

头部插入一个随机数,用迭代器遍历vector

并输出其中的元素值。用泛型算法find

查找某个随机数,如果找到便输出,否则将此数

插入vector

尾部。用泛型算法sort

将vector

排序,用迭代器遍历vector

并输出其中的元

素值。删除vector

尾部的元素,用迭代器遍历vector

并输出其中的元素值。将vector

空。定义一个list,并重复上述实验,并注意观察结果

2

练习泛型算法的使用。

定义一个vector,元素类型为int,插入10

个随机数,使用sort

按升序排序,输出

每个元素的值,再按降叙排序,输出每个元素的值。练习用find

查找元素。用min

max

找出容器中的最小元素个最大元素,并输出。

四、实验结果与分析(源程序及相关说明)

1.

练习vector

和list

的使用:

#include

#include

#include

#include

#include

using

namespace

std;

vector

myV;

bool

sortup(int

v1,int

v2)

{

return

v1::iterator

it1;

for

(it1=myV.begin();it1!=myV.end();it1++)

{

coutmax)max=(*it1);

cout

#include

//#inclued

using

namespace

std;

typedef

list

lin;

int

value[]={2,4,6,1,8};

void

print(lin

lin::iterator

lit;//定义一个迭代器

for(lit=l.begin();lit!=l.end();lit++)

coutv2;

}

int

main(){

lin

lin2;

lin2.push_front(3);

lin2.push_front(4);

lin2.insert(lin2.begin(),value,value+5);

cout

/*声明常量N存储行和列*/

#define

N

8

#define

NUM

8

/*声明全局变量,h[N][N]控制盘格,H[N][N]控制输出,n[N]存储每一步的纵坐标,count用于计数。/

int

h[N][N],n[N],H[N][N];

int

count=0;

/*声明函数void

tryit(int,int)尝试符合条件的方法*/

void

tryit(int,int);

/*声明函数void

outputArray(int[][N])输出数组*/

void

outputArray(int[][N]);

main()

{

int

x=0,y=0,i,j;

/*初始化为零*/

for(i=0;i=0i=0)

tryit(x-1,n[x-1]+1);

else

tryit(0,0);

}

/*尝试下一格*/

else

tryit(x,y+1);

}

}

}

}

/*定义函数void

outputArray(int[][N])输出数组*/

void

outputArray(int

h[][N])

{

int

i,j;

for(i=0;ica-x)

//如果b中的水大于a中的剩余容积,就把a灌满//

{

y-=ca-x;

x=ca;

printf(“pour

B

A/n“);

}

else

//如果b中的水小于a中的剩余容积,那么把b中的水全加入a//

{

x+=y;

y=0;

printf(“pour

B

A/n“);

}

if(y==cc)

//如果b中的水已经和cc相等,那就结束//

{

break;

}

if(ca==x)

//如果a中的水满了,就把a倒空//

{

x=0;

printf(“empty

A/n“);

}

}

}

else

{

while(1)

{

if(x==0)

{

x=ca;

printf(“fill

A/n“);

}

if(x>cb-y)

//如果a中的水大于b中的剩余容积,就把b灌满//

{

x-=cb-y;

y=cb;

printf(“pour

A

B/n“);

}

else

//如果a中的水小于b中的剩余容积,那么把a中的水全加入b//

{

y+=x;

x=0;

printf(“pour

A

B/n“);

}

if(y==cc)

//如果b中的水已经和cc相等,那就结束//

{

break;

}

if(y==cb)

//如果b中的水满了,就把b倒空//

{

y=0;

printf(“empty

B/n“);

}

}

}

}

printf(“success/n“);

}

return

0;

}

运行截图:

实验名称

计算几何算法的实现

系院专业

信息工程系

物联网一班

实验日期

指导教师

一、实验目的和要求

1.理解线段的性质、叉积和有向面积。

2.掌握寻找凸包的算法。

3.综合运用计算几何和搜索中的知识求解有关问题。

二、实验预习内容

凸包:是一组点集中的子集,这一子集形成的凸多边形可以将点集中所有的点都围住,并且这一凸边形的面积是最小的。

一种寻找凸包的算法:打包法

首先,我们找出点集中最下方的点,如果这样的点不止一个,就选用

最左边的点(如P0)。显然,这个点(P0)是凸包子集中的一个点。可以设想在P0

处拴了一根

皮筋的一端,另一端放在和P0

成水平位置的右侧。现在,将皮筋,沿逆时针方向转动,首先会

碰到P1,这样就找到了另一个凸包子集中的点。以P1

为中心,做和P0

一样的事,会发现,我

们将碰到P3,又一个凸包的点。我们可以一直这样做下去,直到再一次遇到P0,凸包就被找出

来了。具体而言,在第一次找到P0

点之后,以P0

为每个矢量的起点,其它的点为矢量的终点,

来比较任意两个矢量的转角,就可以对余下的点进行按极角排序

三、实验项目摘要

1

将讲义第三章第三节中的凸包代码上机运行并检验结果。

2完成讲义第三章的课后习题,上机运行并检验结果。

3思考:

判线段相交时,如果有个线段的端点在另一条线段上,注意可能与另一条线段上的

端点重合,思考这样的情况。

4房间最短路问题:

给顶一个内含阻碍墙的房间,求解出一条从起点到终点的最最短路径。房间的边界

固定在x=0,x=10,y=0

和y=10。起点和重点固定在(0,5)和(10,5)。房间里还有0

到18

墙,每个墙有两个门。输入给定的墙的个数,每个墙的x

位置和两个门的y

坐标区间,

输出最短路的长度

四、实验结果与分析(源程序及相关说明)

3.思考:

用跨立方法,跨立的含义是:如果一条线段的一个端点在一条直线的一边,另一个端点在这条直线的另一端,我们就说这条线段跨立在这条直线上。线段相交满足且只需满足如下两个条件就可以了:1

两条线段相互跨立;2

一条线段的一个端点在另一条线段上。如果两线段相交,则两线段必然相互跨立对方。若p1p2跨立p3p4

,则矢量

(

p1

–p3

)

和(

p2

-

p1

)位于矢量(

p4

p3

)的两侧,即(

p1

–p3)

×

(

p4-

p3

)

(

p2

p3

)

×

(

p4

–p3

)

0。当(

p1

–p3

)

×

(

p4–p3

)

=

0

时,说明(

p1

p3

)

(

p4

p3

)共线,但是因为已经通过快速排斥试验,所以

p1

一定在线段

p3p4上;同理,(

p4

p3

)

×(p2

p3

)

=

0

说明

p2

一定在

p3p4上。所以判断p1p2跨立Q1Q2的依据是:(

p1

p3

)

×

(

p4

p3

)

(

p4

p3

)

×

(

p2–p3

)

>=

0。同理判断Q1Q2跨立P1P2的依据是:(

p3

-

p1

)

×

(

p2

-

p1

)

(

p2

-

p1

)

×

(

p4

-

p1

)

>=

0。代码中函数bool

segment_intersect()用于判断p1、p2构成的线段和p3、p4构成的线段是否相交。可以看出共五种情况两线段是相交的,反之就输出“The

two

are

Not

intersected!”

4.房间最短路问题:

#include

#include

#include

innclude

using

namespace

std;

typedef

pair

POINT;//线段

double

direction(POINT

p,POINT

p1,POINT

p2){

POINT

v1,v2;

v1.first=p2.first-p1.first;

v1.second=p2.second-p1.first;

v2.first=p1.first-p.first;

v2.second=p1.second-p.second;

return

v1.first*v2.second-v1.second*v2.second;}

bool

on_segment(POINT

p,POINT

p1,POINT

p2){

double

min_x=p1.firstp2.first?p1.first:p2.first;

double

min_y=p1.secondp2.second?p1.second:p2.second;

if(p.first>=min_x

if(d==0

if(d=

=0

return

false;

}

void

find_convex_hull(vector

int

k=0;

for(int

i=0;iconvex_hull;

do{

convex_hull.push_back(point[0]);

startPoint=point[0];

point.erase(point.begin());

sort(point.begin(),point.end(),sortByPolorAngle);

if(point[0]==convex_hull[0])break;

point.push_back(convex_hull[convex_hull.size()-1]);

}while(1);

for(int

j=0;j

pv;

double

x,y;

int

i;

cout:“>x>>y;

pv.push_back(make_pair(x,y));

}

cout<

find_convex_hull(pv);

system(“Pause“);

return

0;

}

运行截图:

    以上《分支与循环程序设计实验-报告》范文由一流范文网精心整理,如果您觉得有用,请收藏及关注我们,或向其它人分享我们。转载请注明出处 »一流范文网»最新范文»分支与循环程序设计实验-报告
‖大家正在看...
设为首页 - 加入收藏 - 关于范文吧 - 返回顶部 - 手机版
Copyright © 一流范文网 如对《分支与循环程序设计实验-报告》有疑问请及时反馈。All Rights Reserved