| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 380 人关注过本帖
标题:请高手解答,处理文件的问题!
只看楼主 加入收藏
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
结帖率:93.94%
收藏
已结贴  问题点数:60 回复次数:9 
请高手解答,处理文件的问题!
一段很长的基因序列,由A、T、C、G四个字符无序组成,现在要测知每种八联体组合(即8个位置,每个位置可有A、T、C、G中的任一个填充,则8个位置共有4^8个八联体组合)在文件(上面已给出)中的出现次数,并据此找到同出现1次、2次、3次……1999次和2000次的八联体组合的个数。
注意:假设这一段基因序列为AGCGTACTAG,则这段序列里有3个八联体,即第一个字符至第八个字符,
第二个字符至第九个字符,第三个字符至第十个字符。

这是我编的程序:
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"ctype.h"
#include"math.h"
int main()
{
char *zf;
int j,sum,pw[2001];
long i;
char ch[4]={'A','T','C','G'},str[8],ls[4^8][8],num[4^8];
FILE *in,*out;
if((in=fopen("E:\\测试文件\\NC_003279.word.txt","r"))==NULL)        //第13行
{
printf("can't open file!\n");
exit(0);
}
if((out=fopen("E:\\测试文件\\NC_003279.word.QS.txt","w"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
for(zf=ch;zf<ch+4;zf++)            //第23行到第57行,因为每个位置都有A、T、C、G四个选择,
八个位置共4^8个组合,所以用8个for循环完成
{
str[0]=*zf;
for(zf=ch;zf<ch+4;zf++)
{
str[1]=*zf;
for(zf=ch;zf<ch+4;zf++)
{
str[2]=*zf;
for(zf=ch;zf<ch+4;zf++)
{
str[3]=*zf;
for(zf=ch;zf<ch+4;zf++)
{
str[4]=*zf;
for(zf=ch;zf<ch+4;zf++)
{
str[5]=*zf;
for(zf=ch;zf<ch+4;zf++)
{
str[6]=*zf;
for(zf=ch;zf<ch+4;zf++)
{
str[7]=*zf;
i=0;
ls[i][8]=str[8];          //把每一种组合都赋予给ls[i][8],共4的8次幂个。
i++;
}
}
}
}           //第53行
}
}
}
}
while(feof(in))            //foof()用来测试文件是否结束
{
fgets(str,8,in);            
fseek(in,sizeof(char),0);          //第61行:把文件位置指针向前移到离文件开头一个字符的字
节处
for(i=0;i<pow(4,8);i++)
{
if(strcmp(str,ls[i])==0)
num[i]+=1;               //把in文件中各种组合出现次数统计出来
break;
}
}
for(j=0;j<=2000;j++)           //第69行
{
for(i=0;i<pow(4,8);i++)
if(j==num[i])
pw[j]+=1;            //计算出出现了j次的组合的个数统计出来
fprintf(out,"%4d\t",pw[j]);
}
fclose(in);
fclose(out);
system("PAUSE");
}
不知哪里出了问题,无法运行,请高手解答,谢谢!!!!!
搜索更多相关主题的帖子: 基因 include 
2013-02-28 15:23
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
收藏
得分:0 
回复 楼主 zhou31146001
忘把文件加上了,现给出文件!
NC_003279.word.rar (4.21 MB)


谢谢各位大侠帮忙!!!!!
2013-02-28 16:16
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
收藏
得分:0 
各位大侠帮帮忙呀
2013-02-28 21:18
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:40 
观望

DO IT YOURSELF !
2013-03-01 10:30
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
我这里vs2010对pow的函数无法编译  建议自己写一个pow函数

DO IT YOURSELF !
2013-03-01 10:35
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
收藏
得分:0 
回复 5楼 wp231957
我又把程序进行了修改,但还是有不对,多多请教,谢谢大神!!!!

#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"math.h"
#define N 65536
void main()
{
int i,j,m,n,p,q,s,t,h=0,num[N]={0},pw[2001]={0};
char ch[4]={'a','t','c','g'},str[8],ls[N][8];
float bili[2001]={0.0};
FILE *in,*out;
if((in=fopen("E:\\测试文件\\NC_003279.word.txt","r"))==NULL)        //第12行
{
printf("can't open file!\n");
exit(0);
}
if((out=fopen("E:\\测试文件\\NC_003279.word.QS.txt","w"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
for(i=0;i<4;i++)             //22行
 for(j=0;j<4;j++)
  for(m=0;m<4;m++)
   for(n=0;n<4;n++)
    for(p=0;p<4;p++)
     for(q=0;q<4;q++)
      for(s=0;s<4;s++)
       for(t=0;t<4;t++)
       {
            ls[h][0]=ch[i];
            ls[h][1]=ch[j];
            ls[h][2]=ch[m];
            ls[h][3]=ch[n];
            ls[h][4]=ch[p];
            ls[h][5]=ch[q];
            ls[h][6]=ch[s];
            ls[h][7]=ch[t];
            h++;
       }
while(feof(in))            //feof()用来测试文件是否结束
{
fgets(str,8,in);            
fseek(in,sizeof(char),0);          //第44行:把文件位置指针向前移到离文件开头一个字符的字节处
for(h=0;h<N;h++)
{
if(strcmp(str,ls[h])==0)
num[h]+=1;                        //把in文件中各种组合出现次数统计出来
break;
}
}
for(i=0;i<=2000;i++)               //第52行
{
for(h=0;h<N;h++)
if(i==num[h])
pw[i]+=1;                      //计算出出现了j次的组合的个数
bili[i]=(float)pw[i]/N;
fprintf(out,"%4f\t%f\t",pw[i],bili[i]);
}
fclose(in);
fclose(out);
}
2013-03-01 11:04
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
编译倒是没问题了  

运行没出现预期效果吗

DO IT YOURSELF !
2013-03-01 11:09
小xiong
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:388
专家分:1722
注 册:2013-2-8
收藏
得分:10 
膜拜,,,
2013-03-01 13:14
yg130
Rank: 2
等 级:论坛游民
帖 子:17
专家分:22
注 册:2013-1-29
收藏
得分:10 
  路过
2013-03-01 13:19
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
收藏
得分:0 
回复 7楼 wp231957
编译没有出现预期效果
我举个简单的例子
比如一段序列是   ATCATCGA   ((说明一下,65536是4的8次幂))   我现在测试二联体,不是八联体了,那么4的2次幂是16,也就是有16种二联体组合,那么在  ATCATCGA这一段序列里我要找到每一种二联体出现的次数(AT2次,TC2次,CA1次,TC1次,TG1次),然后把出现次数相同的而联体个数统计出来(出现一次的二联体有3个,出现2次的有两2个),在接下来用3除16,2除16,得到的结果,即out该是
     出现次数              出现相同次数的二联体个数              概率
        1                          3                          0.187(3/16)
        2                          2                          0.125(2/16)
        3                          0                            0.0
        4                          0                             0.0
        往下依次类推,一直统计到出现次数为2000

但没有出现这样的结果
2013-03-01 14:52
快速回复:请高手解答,处理文件的问题!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026877 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved