文档库 最新最全的文档下载
当前位置:文档库 › 课程设计4

课程设计4

课程设计4
课程设计4

题目:查找和排序

内容:题目:查找和排序日期: 2014年11月5日姓名:学号: 920351

1、哈希表设计

一.实习目的

树和图是两种非线性数据结构,通过本次课程设计,熟悉它们的特性,应用树和图解决具体问题。

二.问题描述

针对某个集体中人名设计一个哈希表,使得平均查找长度不超过R,并完成相应的建表和查表程序。

三.需求分析

假设人名为中国人姓名的汉语拼音形式。待填入哈希表的人名共有30个,取平均查找长度的上限为2。哈希函数用除留余数法构造,用线性探测再散列法或链地址法处理冲突。四.概要设计

(1)、针对某个集体中的人名设计一个哈希表,使得平均查找长度不超过R,完成相应的建立和查表程序。

(2)、人名为汉语拼音形式,最长不超过19个字符。

(3)、假设待填入哈希表的人名有30个,平均查找长度的上限为2。哈希表用除留余数法构造,用伪随机探测在散列法处理冲突。

(4)、在输入人名过程中能自动识别非法输入,并给与非法输入的反馈信息要求重新输入。

(5)、找成功时,显示姓名及关键字,并计算和输出查找成功的平均查找长度。

五.详细设计(给出算法的伪码描述)

1 .存储结构设计

typedef struct

{ char *py; //名字的拼音

int k; //拼音所对应的整数

}NAME;

typedef struct //哈希表

{ char *py; //名字的拼音

int k; //拼音所对应的整数

int si; //查找长度

}HASH;

2 .主要算法设计

(1)姓名(结构体数组)初始化

名字以拼音的形式够成字符串,将字符串的各个字符所对应的ASCII码相加,所得

的整数做为哈希表的关键字。

void InitNameList()

{ char *f;

int r,s0,i;

NameList[0].py, "lgwlkk");

NameList[1].py, "menfg");

NameList[2].py, "duanxp");

NameList[3].py, "tianjjiu");

NameList[4].py, "liuguangwei");

NameList[5].py, "caixm");

NameList[6].py, "liujh");

NameList[7].py, "liukk");

NameList[8].py, "fanwd");

NameList[9].py, "fanweidong");

NameList[10].py, "fanxie");

NameList[11].py, "tanyiwen");

NameList[12].py, "lixu");

NameList[13].py, "renjh");

NameList[14].py, "lizhuquan");

NameList[15].py, "youhy");

NameList[16].py, "zhanwl");

NameList[17].py, "tangyaozh");

NameList[18].py, "xiayj");

NameList[19].py, "jingminrui");

NameList[20].py, "wanger");

NameList[21].py, "sandong");

NameList[22].py, "liboxian");

NameList[23].py, "tianshu");

NameList[24].py, "chouyuyan");

NameList[25].py, "liuerwei");

NameList[26].py, "liusanwei");

NameList[27].py, "wukang");

NameList[28].py, "mixing");

NameList[29].py, "lishi");

for(i=0;i

{

s0=0;

f=NameList[i].py;

for(r=0;*(f+r)!='\0';r++)

/* 方法:将字符串的各个字符所对应的ASCII码相加,所得的整数做为哈希表的关

键字*/

s0=*(f+r)+s0;

NameList[i].k=s0;

}

(2) 建立哈希表

(1)用除留余数法构建哈希函数

(2)用伪随机探测再散列法处理冲突

void CreateHashList()

{ int i;

for(i=0; i

{ HashList[i].py="";

HashList[i].k=0;

HashList[i].si=0;

}

for(i=0;i

{ int sum=0;

int adr=(NameList[i].k)%M; //哈希函数

int d=adr;

if(HashList[adr].si==0) //如果不冲突

{ HashList[adr].k=NameList[i].k;

HashList[adr].py=NameList[i].py;

HashList[adr].si=1;

}

else //冲突

{ do

{ d=(d+NameList[i].k%10+1)%M; //伪随机探测再散列法处理冲突

sum=sum+1; //查找次数加1

}while (HashList[d].k!=0);

HashList[d].k=NameList[i].k;

HashList[d].py=NameList[i].py;

HashList[d].si=sum+1;

}

}

}

(3) 查找哈希表

在哈希表中进行查找,输出查找的结果和关键字,并计算和输出查找成功的平均查找

长度

void FindList() //查找

{ char name[20]={0};

int s0=0,r,sum=1,adr,d;

printf("请输入姓名的拼音:");

scanf("%s",name);

for(r=0;r<20;r++) //求出姓名的拼音所对应的整数(关键字)

s0+=name[r];

adr=s0%M; //使用哈希函数

d=adr;

if(HashList[adr].k==s0) //分3种情况进行判断

printf("\n姓名:%s 关键字:%d 查找长度为: 1",HashList[d].py,s0);

else if (HashList[adr].k==0)

printf("无此记录!");

else

{ int g=0;

do

{ d=(d+s0%10+1)%M; //伪随机探测再散列法处理冲突

sum=sum+1;

if(HashList[d].k==0)

{ printf("无此记录! ");

g=1;

}

if(HashList[d].k==s0)

{ printf("\n姓名:%s 关键字:%d 查找长度为:%d",HashList[d].py,s0,sum);

g=1;

}

}while(g==0);

}

}

(4) 显示哈希表

显示哈希表的的格式:

\n地址\t关键字\t\t搜索长度\tH(key)\t 姓名\n

void Display()

{ int i;

float average=0;

printf("\n地址\t关键字\t\t搜索长度\tH(key)\t 姓名\n"); //显示的格式

for(i=0; i<50; i++)

{ printf("%d ",i);

printf("\t%d ",HashList[i].k);

printf("\t\t%d ",HashList[i].si);

printf("\t\t%d ",HashList[i].k%M);

printf("\t %s ",HashList[i].py);

printf("\n");

}

for(i=0;i

average+=HashList[i].si;

average/=NAME_NO;

printf("\n平均查找长度:ASL(%d)=%f \n",NAME_NO,average);

}

(5) 主函数设计

void main()

{ char ch1;

InitNameList();

CreateHashList ();

do

{ printf("D. 显示哈希表\nF. 查找\nQ. 退出\n请选择:");

cin>>&ch1;

switch(ch1)

{

case 'D':Display(); cout<

case 'F':FindList();cout<

case 'Q':exit(0);

}

cout<<"come on !(y/n):";

cin>>&ch1;

}while(ch1!='n');

}

六.测试分析

白盒测试:

查看代码完整性:较为完整

黑盒测试:

结构是否完整:结构完整。

七.附录:测试数据

查找“lgwlkk”

查找:“liboxian”

八.附C语言实现源码

#include

#include

using namespace std;

#define HASH_LENGTH 50 //哈希表的长度#define M 47 //随机数

#define NAME_NO 30 //人名的个数

typedef struct

{ char *py; //名字的拼音

int k; //拼音所对应的整数

}NAME;

NAME NameList[HASH_LENGTH]; //全局变量NAME

typedef struct //哈希表

{ char *py; //名字的拼音

int k; //拼音所对应的整数

int si; //查找长度

}HASH;

HASH HashList[HASH_LENGTH]; //全局变量HASH

void InitNameList() //姓名(结构体数组)初始化

{ char *f;

int r,s0,i;

for (i=0; i

{

NameList[i].py = new char[64];

NameList[i].py[0] = 0;

}

NameList[0].py, "lgwlkk");

NameList[1].py, "menfg");

NameList[2].py, "duanxp");

NameList[3].py, "tianjjiu");

NameList[4].py, "liuguangwei");

NameList[5].py, "caixm");

NameList[6].py, "liujh");

NameList[7].py, "liukk");

NameList[8].py, "fanwd");

NameList[9].py, "fanweidong");

NameList[10].py, "fanxie");

NameList[11].py, "tanyiwen");

NameList[12].py, "lixu");

NameList[13].py, "renjh");

NameList[14].py, "lizhuquan");

NameList[15].py, "youhy");

NameList[16].py, "zhanwl");

NameList[17].py, "tangyaozh");

NameList[18].py, "xiayj");

NameList[19].py, "jingminrui");

NameList[20].py, "wanger");

NameList[21].py, "sandong");

NameList[22].py, "liboxian");

NameList[23].py, "tianshu");

NameList[24].py, "chouyuyan");

NameList[25].py, "liuerwei");

NameList[26].py, "liusanwei");

NameList[27].py, "wukang");

NameList[28].py, "mixing");

NameList[29].py, " lishi");

for(i=0;i

{

s0=0;

f=NameList[i].py;

for(r=0;*(f+r)!='\0';r++)

/* 方法:将字符串的各个字符所对应的ASCII码相加,所得的整数做为哈希表的关键字*/

s0=*(f+r)+s0;

NameList[i].k=s0;

}

}

void CreateHashList() //建立哈希表

{

int i;

for(i=0; i

{

HashList[i].py=new char[64];

HashList[i].py[0] = 0;

HashList[i].k=0;

HashList[i].si=0;

}

for(i=0;i

{

int sum=0;

int adr=(NameList[i].k)%M;

//哈希函数

int d=adr;

if(HashList[adr].si==0) //如果不冲突

{

HashList[adr].k=NameList[i].k;

HashList[adr].py=NameList[i].py;

HashList[adr].si=1;

}

else //冲突

{

while (HashList[d].k!=0)

{

d=(d+NameList[i].k%10+1)%M; //伪随机探测再散列法处理冲突

sum=sum+1; //查找次数加1

};

HashList[d].k=NameList[i].k;

HashList[d].py=NameList[i].py;

HashList[d].si=sum+1;

}

}

}

void FindList() //查找

{

string name;

int s0=0,r,sum=1,adr,d;

cout<<"请输入姓名的拼音:"<

cin>>name;;

for(r=0;r<20;r++) //求出姓名的拼音所对应的整数(关键字)

s0+=name[r];

adr=s0%M; //使用哈希函数

d=adr;

if(HashList[adr].k==s0) //分3种情况进行判断

cout<<"姓名:"<

else if (HashList[adr].k==0)

cout<<"无此记录!"<

else

{

int g=0;

while(g==0)

{

d=(d+s0%10+1)%M; //伪随机探测再散列法处理冲突

sum=sum+1;

if(HashList[d].k==0)

{

cout<<"无此记录!"<

g=1;

}

if(HashList[d].k==s0)

{

cout<<"姓名:"<

g=1;

}

};

}

}

void Display() // 显示哈希表

{

int i;

float average=0;

cout<<"\n地址\t关键字\t\t搜索长度\tH(key)\t 姓名\n"; //显示的格式

for(i=0; i<50; i++)

{

cout<

cout<<"\t"<

cout<<"\t\t"<

cout<<"\t\t"<<(HashList[i].k%M)<<" ";

cout<<"\t "<

cout<<"\n";

}

for(i=0;i

average+=HashList[i].si;

average/=NAME_NO;

cout<<"平均查找长度:ASL("<

}

int main()

{

char x;

InitNameList();

CreateHashList ();

cout<<" **********************************************"<>x)

{

if(x=='d')

{

Display();

cout<

}

else if(x=='f')

{

FindList();

cout<

}

else break;

}

for (int i=0; i

{

Delete NameList[i].py; //释放

Delete HashList[i].py; //释放

}

return 0;

}

九.附程序运行结果截图程序运行:

选择:显示哈希表:

选择:查找

2、内部排序算法比较

一.实习目的

树和图是两种非线性数据结构,通过本次课程设计,熟悉它们的特性,应用树和图解决具体问题。

二.问题描述

各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间。试通过随机的数据比较各算法的关键字比较次数和关键字移动次数,以取得直观感受。三.需求分析

(1)、对以下6种常用的内部排序算法进行对比:直接插入排序;希尔排序;起泡排序;快速排序;简单选择排序;堆排序;

(2)、待排序表的表长不少于100;其中的数据要用伪随机数产生程序产生;至少要用5组不同的输入数据作比较;对比的指标为关键字比较次数和关键字移动次数(1次关键字交换计为3次移动)。

(3)、测试数据由随机函数产生。

四.概要设计

五.详细设计(给出算法的伪码描述)

六.测试分析

白盒测试:

查看代码完整性:较为完整

黑盒测试:

结构是否完整:结构完整

七.使用说明

按程序的提示输入数据,程序自动给出各种排序算法的比较次数和移动次数。如果输入数据超出范围,程序会有提示,并继续。

八.附录:测试数据

表长为:10000的显示结果:

数据超出提示:

九.附C语言实现源码

#include

#include

#include

#include

#define LIST_INIT_SIZE 10000 int bj1,yd1,n;

clock_t start_t,end_t; typedef struct

{

int key;

}ElemType;

typedef struct

{

ElemType *elem;

int length;

}SqList;

void addlist(SqList &L)

{

int i;

a: printf("请输入待排序的表长(10000>=表长>=100):"); scanf("%d",&n);

printf("********************************************\n"); if(n>10000)

{

printf("超出范围重新输入!!!\n");

goto a;

}

L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));

if(!L.elem)exit(0);

L.length=0;

for(i=1;i

{

b: L.elem[i].key=rand();

if(L.elem[i].key>30000)goto b;

++L.length;

}

}

void SelectSort(SqList &L)//选择排序

{

start_t=clock();

int i,j,k,bj=0,yd=0;

for(i=1;i

{

k=i;

for(j=i+1;j

{

bj++;

if(L.elem[j].key

}

if(i!=k)

{

L.elem[0].key=L.elem[i].key;

L.elem[i].key=L.elem[k].key;

L.elem[k].key=L.elem[0].key;

yd+=3;

}

}

end_t=clock();

printf("比较次数为:%d 移动次数为:%d\n",bj,yd); printf("排序用时为:%f\n",float(end_t-start_t)/CLK_TCK); }

void qipao(SqList &L)//起泡排序

{

start_t=clock();

int i=1,j,bj=0,yd=0;

while(i

{

for(j=1;j

{

bj++;

if(L.elem[j].key>L.elem[j+1].key)

{

L.elem[0].key=L.elem[j].key;

L.elem[j].key=L.elem[j+1].key;

L.elem[j+1].key=L.elem[0].key;

yd+=3;

}

}

i++;

}

end_t=clock();

printf("比较次数为:%d 移动次数为:%d\n",bj,yd); printf("排序用时为:%f\n",float(end_t-start_t)/CLK_TCK); }

void InsertSort(SqList &L)//直接插入排序

{

start_t=clock();

int i,j,yd=0,bj=0;

for(i=2;i<=L.length;i++)

{

if(L.elem[i].key

{

L.elem[0].key=L.elem[i].key;

yd++;

j=i-1;

bj++;

while(L.elem[0].key

{

L.elem[j+1].key=L.elem[j].key;

j--;

yd++;

bj++;

}

L.elem[j+1].key=L.elem[0].key;

yd++;

}

}

end_t=clock();

printf("比较次数为:%d 移动次数为:%d\n",bj,yd); printf("排序用时为:%f\n",float(end_t-start_t)/CLK_TCK); }

void xier(SqList &L)//希尔排序

{

start_t=clock();

int i,d=L.length/2,j,w=0,k,yd=0,bj=0;

while(w

{

w=1;

for(i=w;i

{

k=i;

for(j=i+d;j

{

if(L.elem[i].key>L.elem[j].key)

{

k=j;

bj++;

}

}

if(i!=k)

{

L.elem[0].key=L.elem[i].key;

L.elem[i].key=L.elem[k].key;

L.elem[k].key=L.elem[0].key;

yd+=3;

}

w++;

}

d=d/2;

w=1;

}

end_t=clock();

printf("比较次数为:%d 移动次数为:%d\n",bj,yd); printf("排序用时为:%f\n",float(end_t-start_t)/CLK_TCK); }

void BeforeSort()

{

yd1=0,bj1=0;

}

void display(int m,int n)

{

printf("比较次数为:%d 移动次数为:%d\n",m,n); }

int Partition(SqList &L,int low,int high)//快速排序

{

int pivotkey;

L.elem[0]=L.elem[low];

yd1++;

pivotkey=L.elem[low].key;

while (low

{

yd1++;

while(low=pivotkey)

--high;

L.elem[low]=L.elem[high];

bj1++;

yd1++;

while (low

++low;

L.elem[high]=L.elem[low];

bj1++;

yd1++;

}

L.elem[low]=L.elem[0];

yd1++;

return low;

}

void QSort(SqList &L,int low,int high)

{

int pivotloc;

if(low

{

pivotloc=Partition(L,low,high);

QSort(L,low,pivotloc-1);

QSort(L,pivotloc+1,high);

}

}

void QuickSort(SqList &L)

{

start_t=clock();

BeforeSort();

QSort(L,1,L.length);

display(yd1,bj1);

end_t=clock();

printf("排序用时为:%f\n",float(end_t-start_t)/CLK_TCK);

}

void Merge(ElemType R[],ElemType R1[],int low,int m,int high)//堆排序{

int i=low, j=m+1, k=low;

while(i<=m&&j<=high)

{

if(R[i].key<=R[j].key)

{

bj1++;

R1[k]=R[i];

yd1++;

i++;

k++;

}

else

{

bj1++;

R1[k]=R[j];

yd1++;

j++;

k++;

}

}

while(i<=m)

{

R1[k]=R[i];

yd1++;

i++;

k++;

}

while(j<=high)

R1[k]=R[j];

yd1++;

j++;

k++;

}

}

void MergePass(ElemType R[],ElemType R1[],int length, int n) {

int i=0,j;

while(i+2*length-1

{

Merge(R,R1,i,i+length-1,i+2*length-1);

i=i+2*length;

}

if(i+length-1

Merge(R,R1,i,i+length-1,n-1);

else

for(j=i;j

R1[j]=R[j];

}

void MSort(ElemType R[],ElemType R1[],int n)

{

int length=1;

while (length

{

MergePass(R,R1,length,n);

length=2*length;

MergePass(R1,R,length,n);

length=2*length;

}

}

void MergeSort(SqList &L)

{

start_t=clock();

BeforeSort();

MSort(L.elem,L.elem,L.length);

display(yd1,bj1);

end_t=clock();

printf("排序用时为:%f\n",float(end_t-start_t)/CLK_TCK); }

void main()

{

SqList L;

addlist(L);

printf("起泡排序: \n");

qipao(L);

printf("直插排序: \n");

InsertSort(L);

printf("选择排序: \n");

SelectSort(L);

printf("希尔排序: \n");

xier(L);

printf("快速排续: \n");

QuickSort(L);

printf("堆排序: \n");

MergeSort(L);

printf(" \n");

printf("各种排序方法比较结果如上,按任意键回车退出。\n"); scanf("%d",&n);

}

十.附程序运行结果截图

操作系统课程设计

课程设计报告 2015~2016学年第一学期 操作系统综合实践课程设计 实习类别课程设计 学生姓名李旋 专业软件工程 学号130521105 指导教师崔广才、祝勇 学院计算机科学技术学院 二〇一六年一月

- 1 -

- 2 -

一、概述 一个目录文件是由目录项组成的。每个目录项包含16B,一个辅存磁盘块(512B)包含32个目录项。在目录项中,第1、2字节为相应文件的外存i节点号,是该文件的内部标识;后14B为文件名,是该文件的外部标识。所以,文件目录项记录了文件内、外部标识的对照关系。根据文件名可以找到辅存i节点号,由此便得到该文件的所有者、存取权、文件数据的地址健在等信息。UNIX 的存储介质以512B为单位划分为块,从0开始直到最大容量并顺序加以编号就成了一个文件卷,也叫文件系统。UNIX中的文件系统磁盘存储区分配图如下: 本次课程设计是要实现一个简单的模拟Linux文件系统。我们在内存中开辟一个虚拟磁盘空间(20MB)作为文件存储器,并将该虚拟文件系统保存到磁盘上(以一个文件的形式),以便下次可以再将它恢复到内存的虚拟磁盘空间中。文件存储空间的管理可采用位示图方法。 二、设计的基本概念和原理 2.1 设计任务 多用户、多级目录结构文件系统的设计与实现。可以实现下列几条命令login 用户登录 logout 退出当前用户 dir 列文件目录 creat 创建文件 delete 删除文件 open 打开文件 close 关闭文件 - 3 -

read 读文件 write 写文件 mkdir 创建目录 ch 改变文件目录 rd 删除目录树 format 格式化文件系统 Exit 退出文件系统 2.2设计要求 1) 多用户:usr1,usr2,usr3,……,usr8 (1-8个用户) 2) 多级目录:可有多级子目录; 3) 具有login (用户登录)4) 系统初始化(建文件卷、提供登录模块) 5) 文件的创建:create (用命令行来实现)6) 文件的打开:open 7) 文件的读:read8) 文件的写:write 9) 文件关闭:close10) 删除文件:delete 11) 创建目录(建立子目录):mkdir12) 改变当前目录:cd 13) 列出文件目录:dir14) 退出:logout 新增加的功能: 15) 删除目录树:rd 16) 格式化文件系统:format 2.3算法的总体思想 - 4 -

汇编与微机原理课程设计报告

微机接口课程设计报告 (题目:模拟自动门) 指导老师郭兰英 班级2015240204

目录 一概述 (1) 1.1 课程设计名称 (1) 1.2 课程设计要求 (1) 1.3 课程设计目的 (1) 二设计思想 (1) 三实施方案 (2) 3.1 获得传感器和“门”的状态 (2) 3.2 驱动步进电机和点阵模块 (2) 3.3 实现硬件延时 (3) 四硬件原理 (3) 4.1 中断控制器8259 (4) 4.2并行接口8255 (4) 4.3 定时/计数器8254 (5) 4.4 点阵LED显示屏 (5) 4.5 步进电机 (6) 4.6 红外距离传感器 (7) 五软件流程 (8) 六程序运行结果及分析 (11) 6.1 开门状态 (11) 6.2 关门状态 (12) 6.3 关门操作进行时中断到开门操作 (14)

6.4特殊状态 (15) 七个人感想 (16) 八附录 (18)

一、概述 1.1课程设计名称 模拟自动门 1.2课程设计要求 1)用汇编语言编程完成硬件接口功能设计。 2)硬件电路基于80x86微机接口。 3)程序功能包含:步进电机转动、点阵显示开关门、传感器检测是否有人、8254延时。 4)传感器检测有人时开门,门全开后延时几秒关门,若关门时检测到有人,立刻开门。 1.3课程设计目的 通过本课程设计,让学生对微机系统有一个较面的理解,对典型数字接口电路的应用技术有一个较深入的掌握,并对应用系统进行硬件原理和软件编程进行分析、设计和调试,达到基本掌握简单微型计算机应用系统软硬件的设计方法,提高项目开发能力的目的。要求同学分组完成课题,写出课程设计说明书,画出电路原理图,说明工作原理,编写设计程序及程序流程图。 二、设计思想 本程序主要功能是模拟商场等公共场所的自动门,实现有物体靠近并被传感器检测到时发生一系列变化的效果,模拟实现开门关门的功能。 为了尽量模拟真实场景下的自动门状态变化,本程序主要可以实现以下功能: 1、当传感器可检测范围内检测到物体,并且“门”为“关”的状态,立即“打开门”,即用一系列的硬件动作模拟自动门打开的动作和状态。 2、当“门”完全打开后一段时间后,传感器范围内检测不到物体时,立即“关闭门”, 用一系列的硬件动作模拟自动门关闭的动作和状态。

课程设计的目的与作用

1课程设计的目的与作用 1.1课程设计的目的 学习了数字电子技术的理论知识,重点在于达到理论实际相结合的学习目标,切实要求学生的实际运用能力。考虑到电子电路设计自动化也是目前电子技术发展的一个重要趋势,针对课程的要求对学生进行综合训练的一个实践教学环节。从应用的要求出发,除了扼要介绍它们的电路图原理外,着重介绍器件的主要技术性能,典型应用或者连接方法。 1.2课程设计的作用 1. 对设计电路进行理论分析、计算 2. 在multisim环境下仿真电路功能,修改相应参数,分析结果的变化情况 3. 掌握电子产品的制作和调试方法,提高实践动手能力,培养工程实践观念 2. 设计任务 2.1 三位二进制减法计数器(无效态:001,110) 2.2 74161构成57进制同步加法计数器并显示 3.三位二进制减法计数器的设计 1.状态图 3.1状态图 2.选择触发器,求时钟方程、状态方程

①选择触发器 由于JK触发器功能齐全、使用灵活,在这里选用3个CP下降沿触发的边沿JK触发器。 ②求时钟方程 采用同步方案,故取 CP0=CP1=CP2=CP CP是整个要设计的时序电路的输入时钟脉冲。 ③求状态方程 确定约束项 从图3.1给出的状态图可以看出,还有001、011两个代码状态没有出现,显然他们是没有使用的无效状态,其对应的最小项、是约束项。 次态Q 2n+1Q 1 n+1Q n+1的卡诺图 Q 2 n+1的卡诺图

n+1的卡诺图 Q 1 n+1的卡诺图 Q 图3.2.1 显然,由图3.2.1所示各卡诺图便可以容易地得到=() =+ = + ④求驱动方程 ==1 ==

操作系统课程设计报告书

题目1 连续动态内存管理模拟实现 1.1 题目的主要研究内容及预期达到的目标 (1)针对操作系统中内存管理相关理论进行设计,编写程序并进行测试,该程序管理一块虚拟内存。重点分析三种连续动态内存分配算法,即首次适应算法、循环首次适应算法和最佳适应算法。 (2)实现内存分配和回收功能。 1.2 题目研究的工作基础或实验条件 (1)硬件环境:PC机 (2)软件环境:Windows XP,Visual C++ 6.0 1.3 设计思想 首次适应算法的实现:从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法的目的在于减少查找时间。为适应这种算法,空闲分区表中的空闲分区要按地址由低到高进行排序。该算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区,在高址空间保留大的空闲区。 循环首次适应算法的实现:在分配内存空间时,不再每次从表头开始查找,而是从上次找到空闲区的下一个空闲开始查找,直到找到第一个能满足要求的的空闲区为止,并从中划出一块与请求大小相等的内存空间分配给作业。该算法能使内存中的空闲区分布得较均匀。 最佳适应算法的实现:从全部空闲区中找到能满足作业要求的、且最小的空闲分区,这种方法能使碎片尽量小。为适应此算法,空闲分区表中的空闲分区要按从小到大进行排序,从表头开始查找第一个满足要求的自由分配。 1.4 流程图 内存分配流程图,如图1-1所示。

图1-1 内存分配流程图内存回收流程图,如1-2所示。

图1-2 内存回收流程图 1.5 主要程序代码 (1)分配内存 void allocate(char z,float l) { int i,k; float ad; k=-1; for(i=0;i= l && free_table[i].flag == 1) if(k==-1 || free_table[i].length

汇编课程设计报告

四川大学计算机学院 学生实验报告 实验名称:汇编课程设计报告 指导教师:唐宁九 姓名:廖偲 学号:0943111209 班级:软件09级一班 日期:20101114

实验报告 班级______________姓名_______________学号_________ 一、实验一:DEBUG基本命令与数据传输指令 二、实验的目的和要求: ? 1.熟练掌握DEBUG的基本调试命令,能够使用DEBUG编写、调试汇编语言程序片段。 ? 2.在理解数据传输指令的基础上按照实验内容中指定的程序片段对程序进行调试和记录; 三、实验的环境: 1.硬件环境:cpu 2.26gHZ、内存2G、显存1G、64位总线笔记本电脑 2.软件环境:win7 32位操作系统、8086/8088指令集系统(在windows系统中)、masm的汇编工具。 四、源程序清单: ?MOV AL, 01H ?MOV SI, 0002H ?LEA SI, [SI] ?MOV BYTE PTR [SI], 80H ?LAHF ?XCHG AL, AH ?SAHF ?XCHG AH, [SI] ?SAHF 五、操作内容: 1.从cmd在debug下进入用A命令进行汇编 格式: A [地址] 功能:从键盘输入汇编程序, 并逐条地把汇编指令翻译成机器代码指令存入对应内存单元。如果不指定汇编地址, 则以CS:IP为地址 2. 反汇编命令U使用 格式: U [地址]/[地址范围] 功能: 将指定地址范围内的机器代码翻译成汇编源程序指令显示出来, 并同时显示地址及代码。 注意: 反汇编时一定确认指令的起始地址, 否则得不到正确的结果。 3.寄存器查看/编辑命令r或r寄存器名称 功能: 显示当前所有寄存器内容, 状态标志及将要执行的下一条指令的地址、代码和汇编指令形式。

PPT课程设计与开发大纲

TTT课程设计与开发 (培训时数:3天) 培训目标: 1.根据客户内部讲师培养、发展、提升的需要,量身定做TTT课程设计与开发培训班,课 程内容由浅入深,呈现阶梯式讲授与演进,满足内部培训师成长的需要; 2.通过3天的专业训练,让内部培训师了解成人学习心理和熟练运用需求分析的技巧,为 课程设计与开发做好基础; 3.帮助内部培训师掌握现代多元化的授课技巧,课程开发与教案设计,道具与游戏设计, PPT制作要求等; 4.掌握培训评估与辅助工具的运用,制定学员的行动指引,将课堂效果转化为行动和实际 授课综合能力。 实施思路: 1.凭借多年的TTT专业培训经验,已经形成了一套TTT的培养思路,并在世界500强实施 和实践,获得了很好的成效和口碑; 2.通过科学的调研工具对现有内部培训师进行分析,找出成长的空间和能力上的差距; 3.设计针对性强的课程内容和作业,同时配以课堂实践、练习和研讨方案,帮助内部培训 师吸收培训内容,获得培训效果的最大化和内部培训师能力转化与提升的最大化; 4.从《内部培训师能力模型》出发设计培训课程,系统提升内部培训师的专业素质。 课程大纲: 一、成人课程设计的4大理论基础 1.成人学习理论 ?成人学习的原理和原则 ?成人学习的吸收曲线和学习时钟理论 2.成人教学理论 ?三角型的教学模式与传统的直线型教学模式 ?教导的二度消化与学习的一度消化

?选择合适的培训策略,达成教学的目的 3.课程设计系统理论 ?课程设计的十要素 4.信息传播理论 ?影响学习的因素与干扰 二、培训需求调研、培训需求分析与培训诊断、培训课程定位 1.学习需求分析 ?培训诊断的层面 ?培训需求分析的步骤 ?掌握培训需求分析的工具 ?熟练运用需求分析的技巧并在针对学员实施培训需求分析 2.教学内容分析 3.学习者分析 ?课堂练习:练习培训需求调查分析 三、结构设计与内容组合 1.5种结构与大纲的设计 2.每种结构的运用场合与优缺点分析 ?案例:递进式结构的运用场合 3.内容的黃金组合指南 ?案例:内容的黃金组合练习 4.每种内容之间的相互关系 ?案例:看视频编写内容 5.是否每种内容都要在课堂上体现 四、课程设计与教案编写 1.课程目标设计 2.教学过程设计 3.知识点的排列和分层次 4.教学目标的分类:

操作系统课程设计报告

操作系统课程设计报告

东莞理工学院 操作系统课程设计报告 学院:计算机学院 专业班级: 13软件工程1班 提交时间: 2015/9/14 指导教师评阅意见: . 项目名称:进程与线程管理功能 一、设计目的 用语言来模拟进程和线程管理系统,加深对进程和线程的理解,掌握对进程和线程各种状态和管理的算法原理。

二、环境条件 系统: WindowsXP、VMWare、Ubuntu Linux 语言:C/C++ 开发工具:gcc/g++、Visual C++ 6.0 三、设计内容 1. 项目背景 计算机的硬件资源有限,为了提高内存的利用率和系统的吞吐量,就要根据某种算法来管理进程和线程的状态从而达到目的。 进程与线程管理功能完成基于优先级的抢占式线程调度功能,完成进程虚拟内存管理功能。 进程与线程管理功能 基本要求:完成基于优先级的抢占式线程调度功能,完成进程虚拟内存管理功能。 提高要求:(增加1项就予以加分) (1) 实现多种线程调度算法; (2)通过“公共信箱”进行通信的机制,规定每一封信的大小为128字节,实现两个用户进程之间通过这个“公共信箱”进行通信。 (3) 实现多用户进程并发的虚拟内存管理功能。

(4) 实现用户进程间通信功能,并用生产者/消费者问题测试进程间通信功能的正确性。 (5) 实现改进型Clock页面置换算法。 (6) 实现Cache功能,采用FIFO替换算法。 2. 扩展内容 实现多种线程调度算法:时间片轮转调度算法 四、人员分工 优先级调度算法:钟德新,莫友芝 时间片轮转调度算法:张德华,袁马龙 设计报告由小组队员共同完成。小组成员设计的代码分工如下:钟德新编写的代码:void Prinft(){ PCB *p; system("cls");//清屏 p=run; //运行队列 if(p!=NULL) { p->next=NULL; } cout<<"当前正在运行的进程:"<procname<<"\t\t"<pri<<"\t"<needOftime<<"\t\t"<runtime<<"\t\t"<state<next; } cout<

操作系统课程设计报告

上海电力学院 计算机操作系统原理 课程设计报告 题目名称:编写程序模拟虚拟存储器管理 姓名:杜志豪.学号: 班级: 2012053班 . 同组姓名:孙嘉轶 课程设计时间:—— 评语: 成绩: 目录 一、设计内容及要求 (4) 1. 1 设计题目 (4) 1.2 使用算法分析: (4)

1. FIFO算法(先进先出淘汰算法) (4) 1. LRU算法(最久未使用淘汰算法) (5) 1. OPT算法(最佳淘汰算法) (5) 分工情况 (5) 二、详细设计 (6) 原理概述 (6) 主要数据结构(主要代码) (6) 算法流程图 (9) 主流程图 (9) Optimal算法流程图 (10) FIFO算法流程图 (10) LRU算法流程图 (11) .1源程序文件名 (11) . 2执行文件名 (11) 三、实验结果与分析 (11) Optimal页面置换算法结果与分析 (11) FIFO页面置换算法结果与分析 (16) LRU页面置换算法结果与分析 (20) 四、设计创新点 (24) 五、设计与总结 (27)

六、代码附录 (27) 课程设计题目 一、设计内容及要求 编写程序模拟虚拟存储器管理。假设以M页的进程分配了N

块内存(N

汇编课程设计报告

汇编课程设计报告

学 号: 课程设计 题目打印水仙花数 学院计算机科学与技术 专业计算机科学与技术 班级 姓名 指导教师

武汉理工大学《汇编语言程序设计》课程设计 2012 年 6 月28 日 课程设计任务书 学生姓名:专业班级: 指导教师:工作单位:计算机科学与技术学院 题目: 打印水仙花数 初始条件: 理论:完成了《汇编语言程序设计》课程, 对微机系统结构和80系列指令系 统有了较深入的理解,已掌握了汇 编语言程序设计的基本方法和技 巧。 实践:完成了《汇编语言程序设计》的4 个实验,熟悉了汇编语言程序的设 计环境并掌握了汇编语言程序的 调试方法。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) 进一步理解和掌握较复杂程序的设计方 法,掌握子程序结构的设计和友好用户界 3

2.1简要分析 2.1.1原理说明 可以用标签来接收三位数,标签的好处在于可以限制输入的位数,并且通过实际输入位数可以直接进行一部分的异常处理。 将数存到标签后,因为是以ASCII码的形式存的,所以需要进行转换,将其变成十六进制数,转换后将数字存到申请的内存字中。在转换成十六进制数的过程中,可以对输入的数进行异常处理,判断是否输入有误。 在输出水仙花数时,设置一个计数器,从100开始循环判断,直到等于用户输入的数为止,依次判断是否为水仙花数,决定是否输出该数。 在输出时,分别取出水仙花数的个、十、百位数,转换成ASCII码再输出。 系统提示是否继续后,程序对用户输入的信息进行判断,若为y或Y则系统回到初始状态,若为n或N则退出系统,若为其他则提示输入错误并重新输入。 2.1.2程序流程图

《小学课程设计与评价》学习资料

小学课程设计与评价 1.课程本质 对于课程本质的理解主要有四种观点:①学科的知识与技能 ②学习者的生活经验 ③社会经验 ④师生间的交流 是什么:学生在教师的指导下的学习与发展 ①内容:学科的知识与技能 ②元素:学生的生活经验与社会经验 ③学生发展是目的 ④师生交流活动的实施形式 2.课程与教学的关系: ·大课程观——教学活动是课程实施的活动 ·从层次上,课程包括课程体系,单门课程,专题课程,课时课程。 3.武士七技:骑马、击剑、打猎、投枪、游泳、下棋、吟诗 4.基础教育的课程改革的主要内容 (1)课程目标更新 ·知识传授——关注学习过程 ·单一过程——均衡性、综合性、选择性 ·应试——生活需要内容 ·结束学习——培养能力 ·评价选拔甄别——促进发展 ·统一管理——国家、地方、学校三级 (2)课程理念的更新 ·从传承文明——为学生发展 ·从知识结构——社会生活 ·从知能传授——知能主动建构 ·从中央集权——中央地方分权 (3)课程结构更新 ·均衡性:各学科学时比较均衡 ·选择性:开设选修课 ·综合性:综合课程,综合实践活动课程 5.课程目标的基本内容: 知识目标、技能目标、能力目标、情感价值与价值观目标 6.课程目标设计的基本要求 (1)注意贯彻课程总目标、学段目标的基本精神 ·课程总目标、学段目标是单元目标、专题目标的灵魂;而单元目标、专题目标是课程总目标、学段目标的支柱。 (2)从教材与学生的实际出发 ·教材是根据课程标准写的,有助于实现目标。要根据学生学习规律、需求、多数学生来制定单元目标或专题目标。 (3)目标应简明、具体、可操作 理解、了解、初步理解、学会……

(最新版)基于51单片机汇编语言的数字钟课程设计报告含有闹钟万毕业论文

单片微型计算机课程设计报告 多功能电子数字钟 姓 名 学

教师 许伟敏 电气二班 林卫

目录 一:概述 (1) 二:设计基本原理简介 (2) 三:设计要求及说明 (3) 四:整体设计方案 (4) 系统硬件电路设计 4 系统软件总流程设计模块划分及分析5 6 五:单模块流程设计 (8) 各模块设计概述、流程图模块源程序集合及注释8 13 六:单模块软件测试 (23) 七:系统检测调试 (24) 硬件电路调试 软件部分烧写调试 八:系统优化及拓展 (26) 九:心得体会 (28)

单片微型计算机课程设计 一、概述 基于汇编语言的电子数字钟概述 课程设计题目:电子数字钟 应用知识简介: ● 51 单片机 单片机又称单片微控制器,它不是完成某一个逻辑功能 的芯片,而是把一个计算机系统集成到一个芯片上。作为嵌 入式系统控制核心的单片机具有其体积小、功能全、性价比高等诸多优点。51 系列单片机是国内目前应用最广泛的单片机之一,随着嵌入式系统、片上系统等概念的提出和普遍接受及应用,51 系列单片机的发展又进入了一个新的阶段。在今后很长一段时间内51 系列单片机仍将占据嵌入式系统产品的中低端市场。 ●汇编语言 汇编语言是一种面向机器的计算机低级编程语言,通常是为特定的计算机或系列计算机专门设计的。汇编语言保持了机器语言的优点,具有直接和简捷的特点,其代码具有效率高实时性强等优点。但是对于复杂的运算或大型程序,用汇编语言编写将非常耗时。汇编语言可以与高级语言配合使用,应用十分广泛。 ● ISP ISP(In-System Programming)在系统可编程, 是当今流行的单片机编程模式,指电路板上的空白元器 件可以编程写入最终用户代码,而不需要从电路板上取 下元器件。已经编程的器件也可以用ISP方式擦除或再 编程。本次课程设计便使用ISP方式,直接将编写好的 程序下载到连接好的单片机中进行调试。 选题 系统功能分析 硬件电路设计 整体流程设计 及模块划分 模块流程设计 模块编 码测试 系统合成调 试编译 下载调试(含硬件电路调试及软件烧写调试) 验收 完成总结报告课程设计流程图↑ 选题目的及设计思想简介: 课程设计是一次难得的对所学的知识进行实践的机会,我希望通过课程设计独立设计一个简单的系统从而达到强化课本知识并灵活运用的目的。电子数字钟是日常生活钟随处可见的简单系统。对电子数字钟的设计比较容易联系实际并进行拓展,在设计中我将力求尽可能跳出课本的样板,从现实生活中寻找设计原型和设计思路,争取有所突破。 如图所示便是我本次课程设计流程图,设计的整个过程运用自顶向下分析、自底向上实现的

操作系统课程设计报告

东莞理工学院 操作系统课程设计报告学院:计算机学院 专业班级:13软件工程1班 提交时间:2015/9/14 指导教师评阅意见: . 项目名称:进程与线程管理功能 一、设计目的 用语言来模拟进程和线程管理系统,加深对进程和线程的理解,掌握对进程和线程各种状态和管理的算法原理。 二、环境条件 系统:WindowsXP、VMWare、Ubuntu Linux 语言:C/C++ 开发工具:gcc/g++、Visual C++ 6.0 三、设计内容 1. 项目背景

计算机的硬件资源有限,为了提高内存的利用率和系统的吞吐量,就要根据某种算法来管理进程和线程的状态从而达到目的。 进程与线程管理功能完成基于优先级的抢占式线程调度功能,完成进程虚拟内存管理功能。 进程与线程管理功能 基本要求:完成基于优先级的抢占式线程调度功能,完成进程虚拟内存管理功能。 提高要求:(增加1项就予以加分) (1) 实现多种线程调度算法; (2)通过“公共信箱”进行通信的机制,规定每一封信的大小为128字节,实现两个用户进程之间通过这个“公共信箱”进行通信。 (3) 实现多用户进程并发的虚拟内存管理功能。 (4) 实现用户进程间通信功能,并用生产者/消费者问题测试进程间通信功能的正确性。 (5) 实现改进型Clock页面置换算法。 (6) 实现Cache功能,采用FIFO替换算法。 2. 扩展内容 实现多种线程调度算法:时间片轮转调度算法 四、人员分工 优先级调度算法:钟德新,莫友芝 时间片轮转调度算法:张德华,袁马龙 设计报告由小组队员共同完成。小组成员设计的代码分工如下: 钟德新编写的代码:void Prinft(){ PCB *p; system("cls");//清屏 p=run; //运行队列 if(p!=NULL) { p->next=NULL; } cout<<"当前正在运行的进程:"<procname<<"\t\t"<pri<<"\t"<needOftime<<"\t\t"<runtime<<"\t\t"<state<next; } cout<procname<<"\t\t"<pri<<"\t"<needOftime<<"\t\t"<runtime<<"\t\t"<state<next; } cout<

《汇编语言》课程设计任务书

学生姓名:专业班级: 指导教师:工作单位:计算机科学与技术学院 题目: 电话号码本编辑和查找程序的设计与实现 初始条件: 理论:完成了《汇编语言程序设计》课程,对微机系统结构和80系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。 实践:完成了《汇编语言程序设计》的4个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言程序的调试方法。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) 进一步理解和掌握较复杂程序的设计方法,掌握子程序结构的设计和友好用户界面的设计。具体的设计任务及要求: 1)建立一个可存放50项的电话号码表,每项包括人名及电话号码两部分; 2)程序可接受输入人名及相应的电话号码,并将他们加入电话号码表中; 3)凡有新的输入后,程序应按人名对电话号码表重新排序; 4)程序可接受需要查找电话号码的人名,并从电话号码表中查出其电话号码,并显示出来。 5)程序采用子程序结构,结构清晰; 6)友好清晰的用户界面,能识别输入错误并控制错误的修改。 在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。 阅读资料: 1)《IBM—PC汇编语言程序设计实验教程》实验2.4 2)《IBM—PC汇编语言程序设计(第2版)》例6.11 时间安排: 设计安排一周:周1、周2:完成系统分析及设计。 周3、周4:完成程序调试,和验收。 周5:撰写课程设计报告。 指导教师签名:年月日 系主任(或责任教师)签名:年月日

学生姓名:专业班级: 指导教师:工作单位:计算机科学与技术学院 题目: 乐曲程序的设计与实现 初始条件: 理论:完成了《汇编语言程序设计》课程,对微机系统结构和80系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。 实践:完成了《汇编语言程序设计》的4个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言程序的调试方法。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) 进一步理解和掌握程序直接控制I/O方式,掌握计算机发声程序的设计。具体的设计任务及要求:1.采用位触发方式编写程序,使计算机发出音响并演奏乐曲(例如《两只老虎》等)。 1)进一步理解程序直接控制I/O方式和位触发方式控制声音的工作原理。 2)一首乐曲是由不同频率和节拍的音调组成,因此控制脉冲的频率和持续时间是编写乐曲程序的关键。根据已知的音符频率对照表,设置乐曲的频率表和节拍时间表; 3)编写程序并调试通过。 2.了解定时器的工作原理,掌握利用定时器产生声音的方法,使计算机演奏乐曲(例如《两只老虎》等)。编写程序并调试通过。 在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。 阅读资料: 1)《IBM—PC汇编语言程序设计实验教程》3.1节 2)《IBM—PC汇编语言程序设计(第2版)》10.4节,10.5节 时间安排: 设计安排一周:周1、周2:完成系统分析及设计。 周3、周4:完成程序调试,和验收。 周5:撰写课程设计报告。 指导教师签名:年月日 系主任(或责任教师)签名:年月日

操作系统课程设计报告

东莞理工学院 操作系统课程设计报告 学院:计算机学院 专业班级:13软件工程1班 提交时间:2015/9/14 指导教师评阅意见: . 项目名称:进程与线程管理功能 一、设计目的 用语言来模拟进程和线程管理系统,加深对进程和线程的理解,掌握对进程和线程各种状态和管理的算法原理。 二、环境条件

系统:WindowsXP、VMWare、Ubuntu Linux 语言:C/C++ 开发工具:gcc/g++、Visual C++ 6.0 三、设计内容 1. 项目背景 计算机的硬件资源有限,为了提高内存的利用率和系统的吞吐量,就要根据某种算法来管理进程和线程的状态从而达到目的。 进程与线程管理功能完成基于优先级的抢占式线程调度功能,完成进程虚拟内存管理功能。 进程与线程管理功能 基本要求:完成基于优先级的抢占式线程调度功能,完成进程虚拟内存管理功能。 提高要求:(增加1项就予以加分) (1) 实现多种线程调度算法; (2)通过“公共信箱”进行通信的机制,规定每一封信的大小为128字节,实现两个用户进程之间通过这个“公共信箱”进行通信。 (3) 实现多用户进程并发的虚拟内存管理功能。 (4) 实现用户进程间通信功能,并用生产者/消费者问题测试进程间通信功能的正确性。 (5) 实现改进型Clock页面置换算法。 (6) 实现Cache功能,采用FIFO替换算法。

2. 扩展内容 实现多种线程调度算法:时间片轮转调度算法 四、人员分工 优先级调度算法:钟德新,莫友芝 时间片轮转调度算法:张德华,袁马龙 设计报告由小组队员共同完成。小组成员设计的代码分工如下:钟德新编写的代码:void Prinft(){ PCB *p; system("cls");//清屏 p=run; //运行队列 if(p!=NULL) { p->next=NULL; } cout<<"当前正在运行的进程:"<procname<<"\t\t"<pri<<"\t"<needOftime<<"\t\t"<runtime<<"\t\t"<state<next; } cout<procname<<"\t\t"<pri<<"\t"<needOftime<<"\t\t"<runtime<<"\t\t"<state<next; } cout<procname<<"\t\t"<pri<<"\t"<needOftime<<"\t\t"<runtime<<"\t\t"<state<

操作系统(一个小型操作系统的设计与实现)课程设计

南通大学计算机科学与技术学院操作系统课程设计报告 专业: 学生姓名: 学号: 时间:

操作系统模拟算法课程设计报告 设计要求 将本学期三次的实验集成实现: A.处理机管理; B.存储器管理; C.虚拟存储器的缺页调度。 设计流程图 主流程图 开始的图形界面 处理机管理存储器管理缺页调度 先来先服务时 间 片 轮 转 首 次 适 应 法 最 佳 适 应 法 先 进 先 出 L R U 算 法

A.处理机调度 1)先来先服务FCFS N Y 先来先服务算法流程 开始 初始化进程控制块,让进程控制块按进程到达先后顺序让进程排队 调度数组中首个进程,并让数组中的下一位移到首位 计算并打印进程的完成时刻、周转时间、带权周转时间 其中:周转时间 = 完成时间 - 到达时间 带权周转时间=周转时间/服务时间 更改计时器的当前时间,即下一刻进程的开始时间 当前时间=前一进程的完成时间+其服务时间 数组为空 结束

2)时间片轮转法 开始 输入进程总数 指针所指的进程是 否结束 输入各进程信息 输出为就绪状态的进程的信息 更改正在运行的进程的已运行时间 跳过已结束的程序 结束 N 指向下一个进程 Y 如果存在下一个进程的话 Y N 输出此时为就绪状态的进程的信息 时间片轮转算法流程图

B.存储器管理(可变式分区管理) 1)首次适应法 分配流程图 申请xkb内存 由链头找到第一个空闲区 分区大小≥xkb? 大于 分区大小=分区大小-xkb,修改下一个空闲区的后向指针内容为(后向指针)+xkb;修改上一个空闲区的前向指针为(前向指针)+xkb 将该空闲区从链中摘除:修改下一个空闲区的后向地址=该空闲区后向地址,修改上一个空闲区的前向指针为该空闲区的前向指针 等于 小于延链查找下 一个空闲区 到链尾 了? 作业等待 返回是 否 登记已分配表 返回分配给进程的内存首地址 开始

汇编语言课程设计报告

课程设计报告 课程名称课题名称 汇编语言程序设计 1.显示彩色菱形 2.显示系统当前时间 专业 班级 学号 姓名 指导教师 年月日

课程设计任务书 课程名称汇编语言程序设计 课题 1.显示彩色菱形 2.显示系统当前时间专业班级 学生姓名 学号 指导老师 审批 任务书下达日期年月日 任务完成日期年月日

一、设计内容与设计要求 1.设计内容:通过本周的课程设计,学生能够巩固所学的基础知识,并能 够使学生更加熟练运用汇编程序设计语言来掌握综合汇编程序设计的方法和过程,以及为设计其它应用软件提供帮助,进而提高学生的软件设计能力。 (1)、编制一计算比赛成绩的程序,要求完成以下功能: a、9 名评委,每个评委给分范围为 0~100(整数); b、9名评委给分中,去掉一个最高分和一个最低分,剩余7 名评委的平均分即为参赛者的得分(精确到小数点二位); c、将得分在光标位置处显示出来。 (2) 、编制一程序,要求接收从键盘输入的一个班的学生成绩,并存放于30 字的 grade 数组中,各数据的格式为: 学号,成绩 1,成绩 2,?,成绩 5 然后根据 grade 中的学生成绩,把学生名次填入rank 数据组中,并显示出来,格式为:学号,名次 (3)、利用 INT 1CH(大约每秒中断 18.2 次)编写一个中断驻留程序,要求在屏幕的右 上角显示计算机中当前系统时间,显示格式为 时:分: 秒:1/100 秒 (4)、输入一个菱形的两条对角线长,在屏幕上用‘ * ’号画出一个彩色的菱形。 (5)、设置图形方式并显示彩条,要求: 选择背景色为蓝色,调色板为0,然后每行显示一种颜色,每四行重复一次, 一直到整个屏幕都显示出彩条 2.设计要求: 掌握结构化程序设计的主体思想,以自顶向下逐步求精的方法编制程序解决一 些实际的问题,为将来编写软件积累一些典型的案例处理经验。 (1)、设计正确,方案合理。 (2)、界面友好,使用方便。 (3)、程序精炼,结构清晰。 (4)、设计报告 5000 字以上,含程序设计说明,用户使用说明,源程序清单及程序框图。 (5)、上机演示。 (6)、按学号顺序选课题号,并在规定的时间内独自完成相关课题的汇编源程序编

课程标准及课程设计

《单片机与接口技术》课程标准 一、课程信息 课程名称:单片机与接口技术课程类型:电气自动化专业核心课 课程代码:0722072 授课对象:电气自动化专业 学分:6 先修课:电路基础、电子技术、微机原理 学时:108 后续课:传感器及检测技术、微机控制技术,智 能仪表技术 制定人:严其艳制定时间:2009年7月 二、课程性质 《单片机与接口技术》是现代电子工程领域一门飞速发展的技术,其在教学及产业界的技术推广仍然是当今科学技术发展的热点。学习单片机并掌握其设计应用技术已经成为电子类学生必须掌握的一门技术,也是现代工科学生就业的一个基本条件。《单片机与接口技术》是我院电气自动化的主要专业核心课之一。该课程实践性强,既要掌握概念,又要动手编程,上机调试运行。通过本课程的理论教学与实验教学,使学生正确理解单片机的基本概念、基本原理,掌握单片机程序设计和接口应用的基本方法,并能综合运用单片机的软、硬件技术分析实际问题,为工业生产、科学研究和实验设备等领域的单片机应用和开发打下良好的基础。该课程对应的岗位群为机电一体化产品、电子产品生产与研发岗位,主要为从事机电产品、电子产品的生产与研发企业培养具有单片机应用产品设计、分析、调试和创作能力的高素质技能型人才。 三、课程设计 1、课程目标设计 (1)能力目标 总体目标:课程总目标是使学生具有单片机系统编程和设计的知识与技能、具备较高的职业素质,具有调试单片机系统程序和设计最小单片机系统的能力,能解决程序调试和系统设计中遇到的问题,能胜任单片机产品调试员、单片机产品技术支持、单片机软件开发师、单片机硬件开发师和单片机设计师等岗位工作。 具体目标: 1、会对所学知识进行整合,能够根据设计要求独立编写程序,并能在实践工作中熟练进行单片机程序和系统电路的调试;掌握各种接口电路的分析方法和理论知识。 2、能熟练进行单片机程序和系统电路的调试,并能独立设计单片机系统电路并能编写相应程序,同时还可以对以单片机为核心的设备进行维护。 3、通过项目实践,培养爱岗敬业、热情主动的工作态度;养成遵守操作规程,分析工

操作系统课程设计报告

操作系统课程设计实验报告 实验名称:进程控制 姓名/学号: 一、实验目的 学习、理解和掌握Linux与windows的进行控制系统调用的功能,熟悉主要的几个系统调用命令的格式和如何利用系统调用命令进行编程。通过学习,理解如何创建一个进程、改变进程执行的程序、进程和线程终止以及父子进程的同步等,从而提高对进程和线程控制系统调用的编程能力。 二、实验内容 设计并实现Unix的“time”命令。“mytime”命令通过命令行参数接受要运行的程序,创建一个独立的进程来运行该程序,并记录程序运行的时间。 三、实验环境 CPU: Inter ×2 2.10GHz RAM: 3.00GB Windows 7 旗舰版 Linux Ubuntu 10.04 编译: VS2010 四、程序设计与实现 4.1进程控制系统的调用 4.1.1 windows进程控制调用程序中使用的数据结构及主要符号说明 SYSTEMTIME starttime,endtime; //进程开始时间和结束时间 PROCESS_INFORMATION pi //该结构返回有关新进程及 //其主线程的信息 STARTUPINFO si //该结构用于指定新进程的主窗口特性4.1.2 linux进程控制调用程序中使用的数据结构及主要符号说明 struct timeval starttime,endtime //进程开始时间和结束时间 pid_t pid //进程标志符

4.2 程序流程图 图1 windows进程控制调用图2 linux进程控制调用程序运行流程图程序运行流程图 五、实验结果和分析 5.1 windows实验结果和分析

计算机操作系统课程设计

计算机操作系统课程设计 班级:计091-1 姓名: 学号: 使用语言:C++ 指导老师: 学院:

一、系统要求 1、实验目的 通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。 2、实验内容 为linux系统设计一个简单的二级文件系统。要求做到以下几点: (1)可以实现下列几条命令(至少4条); login 用户登陆 dir 列文件目录 create 创建文件 delete 删除文件 open 打开文件 close 关闭文件 read 读文件 write 写文件 (2)列目录时要列出文件名、物理地址、保护码和文件长度; (3)源文件可以进行读写保护。

二、系统分析 1、设计思想 本文件为二级文件系统,即要实现对文件的增删改查,同时又具备登陆系统、注册用户的功能,各个用户之间的文件系统互不干扰。 本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件。另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。 系统采用结构体来存储用户、文件目录、文件数据内容: 0 48*5 48*5+44*50 48*5+44*50+264*200 每个分区都是由结构体组成,每个个去的结构体的个数由格式化系统是决定。

整个系统的编码构成主要分为: Allstruct.h 定义了每个分区的结构体; Mysys.h 声明了对系统操作的各种方法;Myuserfile.h 声明了对文件操作的各种方法; Mymain.cpp 整个系统的主函数,操作入口; Mysys.cpp 包含了mysys.h,实现了操作系统的各种方法;Myuserfile.cpp 包含了myuserfile.h,实现了操作文件的各种方法; 2、主要数据结构 Allstruct.h文件的内容: struct s_user //用户区结构体 { long isuse; //是否使用 char name[20]; //用户名 char psd[20]; //密码 long address; //目录地址 };

相关文档