模拟电路论文作业程序实现隐含表Word格式.docx

上传人:b****5 文档编号:19248284 上传时间:2023-01-04 格式:DOCX 页数:13 大小:18.77KB
下载 相关 举报
模拟电路论文作业程序实现隐含表Word格式.docx_第1页
第1页 / 共13页
模拟电路论文作业程序实现隐含表Word格式.docx_第2页
第2页 / 共13页
模拟电路论文作业程序实现隐含表Word格式.docx_第3页
第3页 / 共13页
模拟电路论文作业程序实现隐含表Word格式.docx_第4页
第4页 / 共13页
模拟电路论文作业程序实现隐含表Word格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

模拟电路论文作业程序实现隐含表Word格式.docx

《模拟电路论文作业程序实现隐含表Word格式.docx》由会员分享,可在线阅读,更多相关《模拟电路论文作业程序实现隐含表Word格式.docx(13页珍藏版)》请在冰豆网上搜索。

模拟电路论文作业程序实现隐含表Word格式.docx

隐含表法是一种比较传统的方法,更适合于编程实现。

在计算机高速发展的今天,硬件设计越来越复杂,例如从简单的机电产品设计到巨型计算机以至于智能机器人的制造,使其在各方面的应用越来越广泛。

在同步时序电路设计中要求对原始状态表进行化简,以实现电路设计最简,成本最低,人工的方法费时费力并且在状态数很大时很难化简。

本文给出一种用程序化简的方法不但可以适合状态数较大的情况,而且使化简的效率大大地提高提高了工作效率。

正文:

本文是用C语言程序将完全给定的同步时序电路的原始状态表转化为隐含表,一直按隐含表法的解题步骤对隐含表进行化简。

现将根据所给定的完全状态表做出隐含表,然后顺序比较隐含表中所有的状态,将比较结果填入相应的位置上。

比较结果分三种情况。

①第一种是两个状态不等价(输出不同,即不等效),相应的格填1;

②第二种是两个状态等价(输出相同,即等效),相应的格填2;

③第三种情况是状态是否等价取决于是否满足隐含条件(输出相同,状态不全部相同且不交错,即不一定等效。

)第三种情况出现时系统会进一步对它进行比较,直到查明待查状态等效或不等效为止。

本程序从原始状态表出发,根据隐含表法的步骤,完成做出隐含表,顺序比较隐含表,关联比较的步骤,以确定状态之间的等效关系。

具体过程如下:

⑴定义数据结构——使用结构体structotuint保存原始状态表中的数据结构体中的status单元保存状态,effect单元保存输出结果。

使用结构体structhtuint保存隐含表中的数据,结构体中的flag单元的内容作为标记,用来判断是否等效当为1时不等效,为2时等效;

为3时看后继状态是否等效,并用链表保存后继状态。

⑵建立原始状态表——本文通过createtable()函数建立原始状态表。

在函数中要求从键盘输入一个存放原始状态表数据文件的文件名,对文件内容的要求是第一个数据为状态数;

第二个数据为输入变量数;

接着是一个状态;

一个输出间隔出现;

数据之间用空格。

用循环语句将文件中的数据取出保存在otable数组中。

⑶建立隐含表——通过chtable()函数建立隐含表,在函数中对otable数组中的数据进行扫描,确定hidetable数组中的数据,当输出不同时hidetable[i][j].flag1赋于表示不等效;

当输出相同,状态相同或交错时hidetable[i][j].flag2赋于表示等效;

当输出相同,状态不同且不交错,hidetable[i][j].flag3赋于等待判断。

(4)进行比较——通过函数对隐含表进行关联比较,如果出现第一或二种情况直接把状态填入相应的位置。

当出现第三种情况的时候继状态进行处理,按上述继续对第三种情况继续进行关联比较,直到确定状态之间的等效关系。

例如:

一下例题中所给的状态转换表,利用隐含表法的思路对他进行化简体现做隐含表,顺序比较以及关联比较的步骤。

原始状态表

X1X2

Sn

00

01

11

10

A

B

C

D

E

F

G

H

D/0

C/1

G/0

B/1

B/0

F/0

E/1

A/0

(a)隐含表

ABCDEFG

(b)顺序比较

X

AF

BD/AF

DF/AF

DF

BD

BG/AF

DG/AF

BC/AF

BC

BC/DF

ABCDEFG

(c)关联比较

BD/AF/X

DF/AF/X

DF/X

BD/X

DG/AF/X

BG/AF/X

BC/DF/X

最简状态转换表

X1X2

00

B1

D0

G0

B0

A0

E1

Sn+1

具体程序如下:

#include"

math.h"

stdlib.h"

stdio.h"

ctype.h"

#defineNULL0

structotunit

{

charstatus;

inteffect;

};

structcstatus

charchrow;

charchcol;

structcstatus*next;

};

structhtunit

{

intflag;

structcstatus*head;

intvn,sn;

structotunitotable[30][30];

structhtunithidetable[30][30]

main()

createtable();

chtable();

comparehtable();

outputtable();

}

createtable()

FILE*fp;

inti,j,number1,number2;

charch[4],str[20];

printf("

pleaseinputafilename:

"

);

scanf("

%s"

str);

if((fp=fopen(str,"

r"

))==NULL)

printf("

filecan'

topenfile"

exit(0);

fscanf(fp,"

%d%d"

&

sn,&

vn);

for(i=1;

i<

=sn;

i++)

for(j=1;

j<

=exp(vn*log

(2))+1;

j++)

{

fscanf(fp,"

%s%d"

ch,&

number2);

otable[i][j].status=toupper(ch[0]);

otable[i][j].effect=number2;

}

fclose(fp);

chtable()

inti,j,m,flag,flag1;

structcstatus*new,*p;

for(i=2;

=i-1;

{

flag=0;

hidetable[i][j].head=NULL;

for(m=1;

m<

m++)

if(otable[i][m].effect!

=otable[j][m].

effect)flag=1;

if(flag==1)hidetable[i][j].flag=1;

else

if(otable[i][m].status!

=otable[j][m].status)

{

flag=1;

flag1=0;

p=hidetable[i][j].head;

while(p!

=NULL)

if(p->

chrow==otable[i][m].status&

&

p->

chcol==otable[j][m].status||p->

chrow==otable[j][m].status&

chcol==otable[i][m].status)

flag1=1;

p=p->

next;

if(flag1==0)

new=(structcstatus*)malloc(sizeof(structcstatus));

new->

chrow=otable[i][m].status;

chcol=otable[j][m].status;

next=NULL;

if(hidetable[i][j].head==NULL)

hidetable[i][j].head=new;

else

while(p->

next!

p=p->

p->

next=new;

}

if(flag==0)hidetable[i][j].flag=2;

elsehidetable[i][j].flag=3;

comparehtable()

inti,j,n,l,t,flag,flag1;

structcstatus*p,*q,*m,*head,*new;

for(i=2;

for(j=1;

if(hidetable[i][j].flag==3)

{

p=hidetable[i][j].head;

q=p;

n=0;

while(p!

n=n+1;

flag=0;

if(p->

chrow==i+64&

chcol==j+64||p->

chrow==j+64&

chcol==i+64)

{

flag=1;

if(n==1&

next==NULL)

{

hidetable[i][j].flag=2;

m=p;

next;

else

if(n==1)

hidetable[i][j].head=p;

q->

next=p->

p=q->

free(m);

}

if(flag==0)

flag1=0;

while(flag1==0)

flag1=1;

for(i=2;

for(j=1;

if(hidetable[i][j].flag==3)

q=p;

l=p->

chrow-64;

n=p->

chcol-64;

flag=flag++;

if(l<

n)

t=l;

l=n;

n=t;

if(hidetable[l][n].flag==1)

hidetable[i][j].flag=1;

p=NULL;

else

if(hidetable[l][n].flag==2)

if(flag==1&

next==NULL)

if(flag==1)

hidetable[i][j].

head=p->

free(m);

if(hidetable[l][n].flag==3&

flag==1)

p=p->

outputtable()

inti,j;

structcstatus*p;

for(i=2;

for(j=1;

%d"

hidetable[i][j].flag);

while(p!

%c%c"

p->

chrow,p->

chcol);

参考文献:

北京交通大学图书馆数据库

清华大学图书馆数据库

XX文库

C语言程序设计·

谭浩强著

数字电子技术基础·

侯建军主编·

高等教育出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 育儿理论经验

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1