武理约瑟夫环汇编课程设计

发布 2022-10-01 07:54:28 阅读 4985

课程设计。

课程设计任务书。

学生姓名: 专业班级:

指导教师: 工作单位:

题目: 约瑟夫环程序设计。

初始条件:理论:完成了《汇编语言程序设计》课程,对微机系统结构和80系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。

实践:完成了《汇编语言程序设计》的4个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言程序的调试方法。

要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

进一步理解和掌握较复杂程序的设计方法,掌握子程序结构的设计和友好用户界面的设计。具体的设计任务及要求:

1) 有 n个人围成一圈,他们的编号为1到n。第一个人从1开始顺序报数,凡报到m时,该人退出圈子。其后的人再从1开始顺序报数,直到最后的一个人退出圈子为止。

输出依次退出圈子人的序号。n和m的值从键盘输入,且均小于200。

2) 程序采用子程序结构,结构清晰;

3) 友好清晰的用户界面,能识别输入错误并控制错误的修改。

在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。

阅读资料:1)《ibm—pc汇编语言程序设计实验教程》实验2.4

2)《ibm—pc汇编语言程序设计(第2版)》例6.11

时间安排:设计安排一周:周1、周2:完成系统分析及设计。

周3、周4:完成程序调试,和验收。

周5:撰写课程设计报告。

指导教师签名年月日。

系主任(或责任教师)签名年月日。

目录。1. 问题描述及要求4

1.1问题描述4

1.2任务要求4

2.设计说明4

2.1 简要分析4

2.2 概要设计4

2.2.1 主要模块4

2.2.2 主函数结构7

3.算法描述8

3.1 算法描述8

3.2 流程框图9

4.源程序与执行结果10

4.1 源程序10

4.2 执行结果15

4.2.1 测试方法15

4.2.2 测试结果15

5.使用说明16

6.总结17

汇编语言程序设计。

---约瑟夫环程序设计。

1.1问题描述。

有 n个人围成一圈,他们的编号为1到n。第一个人从1开始顺序报数凡报到m时,该人退出圈子。其后的人再从1开始顺序报数,直到最后的一个人退出圈子为止。

输出依次退出圈子人的序号。n和m的值从键盘输入,且均小于200。

1.2任务要求。

1) 程序采用子程序结构,结构清晰;

2) 友好清晰的用户界面,能识别输入错误并控制错误的修改。

2.1 简要分析。

要正确、友好地完成用汇编语言设计约瑟夫环,我们应该完成以下几个功能:

1) 相关的交互提示用语。

2) 定义的数据段中包含0-200

3) 编号数n的输入。

4) 标志数m的输入。

5) 输入设置为只允许输入三位数字,其余均不显示。

6) 显示的结果是所有的退出序列,并使用箭标连接。

2.2 概要设计。

2.2.1 主要模块。

1)变量的定义。

data segment

table label word

count = 1

rept 200

dw count

count = count + 1

endm print1 db 'please input the number of the people(less than 200):$

print2 db 'please the flag:$'

mess db '-

data ends

2)编号数n输入的处理。

n1:mov ah,07h

int 21h

cmp al,'0'

jb n1cmp al,'9'

ja n1mov dl,al

mov ah,02h

int 21h

mov ah,0

sub al,30h

mov cx,ax

mov bx,cx

n2:mov ah,07h

int 21h

cmp al,'0'

jb n2cmp al,'9'

ja n2mov dl,al

mov ah,02h

int 21h

mov ah,0

sub al,30h

mov dx,10

mul dx

mov cx,ax

mov ax,bx

mov bx,100

mul bx

add cx,ax

n3:mov ah,07h

int 21h

cmp al,'0'

jb n3cmp al,'9'

ja n3mov dl,al

mov ah,02h

int 21h

mov ah,0

sub al,30h

mov dx,ax

add cx,dx

push cx

mov ax,cx

mov cx,2

mul cx

mov bp,ax

mov ax,[si+bp]

mov ax,0ffh

mov [si+bp],ax

call ctrl

lea dx,print2

mov ah,09h

int 21h

call ctrl

3)标志数m的输入处理。

n4:mov ah,07h

int 21h

cmp al,'0'

jb n4cmp al,'9'

ja n4mov dl,al

mov ah,02h

int 21h

mov ah,0

sub al,30h

mov cx,ax

mov bx,cx

n5:mov ah,07h

int 21h

cmp al,'0'

jb n5cmp al,'9'

ja n5mov dl,al

mov ah,02h

int 21h

mov ah,0

sub al,30h

mov dx,10

mul dx

mov cx,ax

mov ax,bx

mov bx,100

mul bx

add cx,ax

n6:mov ah,07h

int 21h

cmp al,'0'

jb n6cmp al,'9'

ja n6mov dl,al

mov ah,02h

int 21h

mov ah,0

sub al,30h

mov dx,ax

add cx,dx

mov di,cx

2.2.2 主函数结构。

start:

mov ax,data

mov ds,ax

lea si,table

mov bx,0

mov dx,0;

call print

求解思路】我们知道第一个人(编号一定是m%n-1) 出列之后,剩下的n-1个人组成了一个新的约瑟夫环。

以编号为k=m%n的人开始):

k k+1 k+2 ..n-2, n-1, 0, 1, 2, .k-2

并且从k开始报0。

现在我们把他们的编号做一下转换:

k --0k+1 --1

k+2 --2

k-2 --n-2

k-1 --n-1

变换后就完完全全成为了(n-1)个人报数的子问题。

假如我们知道这个子问题的解:例如x是最终的胜利者,那么根据上面这个表把这个x变回去不刚好就是n个人情况的解吗?!!变回去的公式很简单,可以推出来为:x' =x+k)%n

如何知道(n-1)个人报数的问题的解?对,只要知道(n-2)个人的解就行了。(n-2)个人的解呢?当然是先求(n-3)的情况 --这显然就是一个倒推问题!

下面写递推公式:

令f[i]表示i个人玩游戏报m退出最后胜利者的编号,最后的结果自然是f[n]

f[1]=0;

f[i]=(f[i-1]+m)%i; (i>1)

有了这个公式,我们要做的就是从1-n顺序算出f[i]的数值,最后结果是f[n]。因为实际生活中编号总是从1开始,我们输出f[n]+1

由于是逐级递推,不需要保存每个f[i],程序也是异常简单:

翻译成c语言如下**所示。

int main()

int n, m, i, s=0;

scanf("%d%d", n, &m);

for (i=2; i <=n; i++)

s=(s+m)%i;

printf ("the winner is %d", s+1);

数据结构约瑟夫环课程设计报告

滁州学院数学系。课程设计报告。设计名称 约瑟夫环。姓名 杨凤武。小组成员 卢琼,周丽,杨凤武。专业班级 09信息与计算科学一班。指导老师 袁万莲。设计时间 2010 2011学年度第二学期 指导教师评语 指导教师签名。年月日。一 课程设计目的。1 掌握循环链表的建立。2 熟悉循环链表的操作。3 加深...

数据结构课程设计报告约瑟夫环

课程设计报告。课程设计名称 数据结构课程设计。课程设计题目 约瑟夫环。院 系 电信学院。专业 计算机应用科学。目录。1 课程设计介绍 1 1.1 课程设计内容 1 1.2 课程设计要求 1 2 课程设计原理 2 2.1 课设题目粗略分析 2 2.2 原理图介绍 3 2.2.1 功能模块图 3 2.2...

汇编课程设计

直流电机调速系统设计。摘要。脉宽调制的全称为 pulse widthmodulator 简称pwm 直流电机调速器就是调节直流电动机速度的设备,由于直流电动机具有低转速大力矩的特点,是交流电动机无法取代的,因此调节直流电动机速度的设备 直流调速器,由于它的特殊性能 常被用于直流负载回路中 灯具调光或...