用C语言编程实现逻辑函数化简,急!急!
根据Q-M逻辑函数化简法用C语言编程来实现,,,,急用!!!!!谢了!!!要完整的程序!!!...
根据Q-M逻辑函数化简法用C语言编程来实现,,,,急用!!!!!谢了 !!!要完整的程序!!!
展开
2个回答
展开全部
现有一链表,有若干个结点,没个结点有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 的伪码更好一点,谢谢,诸位!!
比如:
结点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 的伪码更好一点,谢谢,诸位!!
展开全部
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])
{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])
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询