用C语言编程实现逻辑函数化简,急!急!

根据Q-M逻辑函数化简法用C语言编程来实现,,,,急用!!!!!谢了!!!要完整的程序!!!... 根据Q-M逻辑函数化简法用C语言编程来实现,,,,急用!!!!!谢了 !!!要完整的程序!!! 展开
 我来答
像我这样的牛人
2009-05-27 · TA获得超过307个赞
知道答主
回答量:301
采纳率:0%
帮助的人:0
展开全部
现有一链表,有若干个结点,没个结点有ID[ N]的数组ID[0]存着ID 数组中存的数字的长度,
比如:
结点P1-> ID[0]=2 是 3 14
结点P2 ->ID[0]=2 是 14 15
结点P3-> ID[0]=2 是 15 22
可以用下面的表描述
14 15
P1 1
P2 1 1
P3 1
注:P->ID[0]为2的n次,肯定是2,4,8,16,32,………..这样的数字
注: 14 15 是针对的数字,在这里,P2,P1并p3都可以“覆盖” 14 15两个数字,
但是 很明显P2单独一个可以“覆盖”14 15 两个针对数字,
所以,我们的算法就是要找出可以 满足“覆盖”并且项数最少的单个 P_或者项数最少的组合!

还有,表里每个列都会有两个或两个以上的1的,因为,由Q-M方法化简,前面的步骤已经将一个1的列过滤了的!

又如:

结点P1 ID[0]=2 是 13 14
结点P2 ID[0]=4 是 14 15 22 24
结点P3 ID[0]=2 是 14 16
结点P4 ID[0]=2 是 13 16

13 14 15 16
P1 1 1
P2 1 1
P3 1 1
P4 1 1

P1并P3; P2并P4
都是满足条件的算法结果。

------------------------------------------------------------ ----------------------------------------------------------
以上其实是Q-M方法化简逻辑函数的最后一步,由前面的算法产生的PN的链表的长度是不确定的(也就是P1,P2,P3,………具体个数,每次针对不同逻辑函数会有不同的个数)
13 14 15 16 这样的针对项的个数也不确定的,(也就是针对项的具体个数,每次针对不同逻辑函数也会有不同的个数)

本人的算法,写到此处后,对于这个问题暂时找不到合适的有技巧的方法 去解决,希望大家共同合作,给我点意见,思路,或者伪代码,都可以,本人是学C 的是类C 的伪码更好一点,谢谢,诸位!!
况德曜yb
2009-06-10 · 超过23用户采纳过TA的回答
知道答主
回答量:234
采纳率:0%
帮助的人:91.6万
展开全部
main()
{int i=0,j,num;
float NUM;
float m,n,p,q; /*m=a,n=c,p=g,q=t*/

float ta,tg,tc,tt;
float A,C,G,T;
float b,e; /***********定义变量************/

float TA,TG,TC,TT;
//char string1[80]="tcttcagatgtaacacttaaggctatcctc"; /***********这个在程序中没有用到************/
//char string2[80]="attgtacgtcgatcg";

char string[][80]={"tcttcagatgtaacacttaaggctatcctc",
"attgtacgtcgatcg",
"attgtacgtcgatcg attgtacgtcgatcg", /***********新的序列添加到这里************/
"" /***********以空字符串为结束************/
};

FILE*fp;
fp=fopen("69.txt","w");
for (j=0;j<string[j][0];j++) /*********这里改一下 判断************/
{
i=m=n=p=q=num = 0;
while(string[j][i]!='\0') /*to count the total*/
{ num++;

i++;
}

for(i=0;i<num;i++)
{
switch(string[j][i])
{ /*to count a g c t*/
case 'a':m++;break;
case 'g':n++;break;
case 'c':p++;break;
case 't':q++;break;
default:break;
}
}
A=m/num;G=n/num;C=p/num;T=q/num;
if((G+C)!= 0) /***********计算是否有非0的除数************/
b=100*(G-C)/(G+C);
else
b = 0;
if((A+T))
e=100*(A-T)/(A+T);
else
e = 0;
fprintf(fp,"A=%f,G=%f,C=%f,b=%f,\n,e=%f,T=%f",A,G,C,T,b,e); /***********写文件************/
for(i=0;i<num-1;i++)
{ /*to count aa ag ac at*/
switch(string[j][i])
{

case 't': switch(string[j][i+1])
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式