标题:总是循环前期正确,后期错误,请指教
只看楼主
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
结帖率:93.94%
已结贴  问题点数:30 回复次数:14 
总是循环前期正确,后期错误,请指教
    DNA链:AACACCATGGTGTTTCAAAATGG…….(只有A、T、C、G共4个字符)
    8模体即8个字符(如TGTTTCAA,其不是核小体结合模体,因无CG),只要其至少含1个CG,其就是核小体结合模体;147个字符共有140个8模体;
目的:以DNA链第9个碱基/字符为统计起点、以252为统计窗口,分别统计252大小的窗口内拥有最大核小体结合模体个数和最大G+C含量的147个字符的起止点,并以两个区间的平均起止点作为核小体定位起点与终点;以前述定位核小体定位终点加9为下一次统计起点,以252为统计窗口,按上述要求确定下一个核小体定位起点与终点;重复上述过程,直到得到DNA链的全部核小体定位起点与终点。
    以下是我的程序,但总是前十几个循环输出正确,后面的循环输出错误(无故某量突然变为零),请各位大侠指教!
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#define N 210000        //N指序列长度
FILE *fp,*qqq,*aaa,*ss;
struct motif
{
char str[300];
int qi,zhi;
}lead[1600];
void main()
{
 fp=fopen("E:\\EGFR.txt", "rt");
 qqq=fopen("E:\\核小体位置1.txt","wt");
 aaa=fopen("E:\\连接序列位置.txt","wt");
 ss=fopen("E:\\jian.txt","wt");
         
 int i,a=9,b=260,c=0,j,m,h,z=0;
 int f1=0,f2=0,f3=0,ave1=0,sum[160];
 float num=0;
 for(j=0;j<160;j++)
 sum[j]=0;   
 
 
 if(a<N)                //    1
 {
 i=0;
 fseek(fp,(a-1),0);
 while (a<=b)      //  11行  
 {                  
 lead[z].str[i]=fgetc(fp);   
 i++;
 a++;
 }
 
   for(j=0;j<106;j++)     //205bp长,146bp为窗口,故循环59次
   {
     for(m=j;m<=j+146;m++)
       if(lead[z].str[m]=='C'||lead[z].str[m]=='G')    //   
        sum[j]++;      //统计185(n-1)-10到185n+10区间内每146bp窗口内的核小体结合模体的个数
       if(sum[j]>f1)
       {
         f1=sum[j];     //寻找每146bp内最大的G+C个数
         f2=j+1+8;      //确定拥有最大G+C个数的146bp窗口的起点
       }        
   }
   for(j=0;j<160;j++)
   sum[j]=0;
   f1=0;
   for(j=0;j<106;j++)     //205bp长,146bp为窗口,故循环59次
   {
     for(m=j;m<=j+140;m++)    //之所以写成139,是因为147bp长的序列含有140个8模体,由于从0开始,故为139
       if(lead[z].str[m]=='C'&&lead[z].str[m+1]=='G'||lead[z].str[m+1]=='C'&&lead[z].str[m+2]=='G'||lead[z].str[m+2]=='C'&&lead[z].str[m+3]=='G'
           ||lead[z].str[m+3]=='C'&&lead[z].str[m+4]=='G'||lead[z].str[m+4]=='C'&&lead[z].str[m+5]=='G'||lead[z].str[m+5]=='C'
           &&lead[z].str[m+6]=='G'||lead[z].str[m+6]=='C'&&lead[z].str[m+7]=='G')    //   
        sum[j]++;      //统计185(n-1)-10到185n+10区间内每146bp窗口内的核小体结合模体的个数
       if(sum[j]>f1)
       {
         f1=sum[j];     //寻找每146bp内最大的核小体结合模体个数个数
         f3=j+1+8;      //确定拥有最大G+C个数的146bp窗口的起点
       }  
   }
   
}      
 for(j=0;j<160;j++)
   sum[j]=0;
   
   
   ave1=(f2+f3)/2;   //平均起点
   lead[z+1].qi=ave1+146+9;  //下一个搜索窗口的起点
   lead[z+1].zhi=ave1+146+260;   //下一个搜索窗口的终点
   
   fprintf(qqq,"%d\t%d\n",ave1,ave1+146);    //核小体平均起止点
   fprintf(aaa,"%d\t%d\n",1,ave1-1);    //连接序列起止点
   fprintf(aaa,"%d\t",ave1+146+1);   //下一个连接序列的起点
   fprintf(ss,"搜索起点=%d\t搜索终点=%d\t核小体起点1=%d\t核小体起点2=%d\n",lead[z].qi,lead[z].zhi,f2,f3);
   ave1=0,f1=0,f2=0,f3=0;     //需全部置零,否则下面易出问题
 




 for(z=1;z<60;z++)
 {
 if(lead[z].qi<N)               //       2
 {
 i=0;
 fseek(fp,(lead[z].qi-1),0);
 while (lead[z].qi<=lead[z].zhi)      //  11行  
 {                  
 lead[z].str[i]=fgetc(fp);   
 i++;
 lead[z].qi++;
 }
 c=lead[z].qi-252;
 printf("c=%d\n",c);
   for(j=0;j<106;j++)     //205bp长,146bp为窗口,故循环59次
   {
     for(m=j;m<=j+146;m++)
       if(lead[z].str[m]=='C'||lead[z].str[m]=='G')    //   
        sum[j]++;      //统计185(n-1)-10到185n+10区间内每146bp窗口内的核小体结合模体的个数
       if(sum[j]>f1)
       {
         f1=sum[j];     //寻找每146bp内最大的G+C个数
         f2=c+j+1;      //确定拥有最大G+C个数的146bp窗口的起点,减252是因为while语句中的a增加了252
       }        
   }
   for(j=0;j<160;j++)
   sum[j]=0;
   f1=0;
   for(j=0;j<106;j++)     //205bp长,146bp为窗口,故循环59次
   {
     for(m=j;m<=j+140;m++)    //之所以写成139,是因为147bp长的序列含有140个8模体,由于从0开始,故为139
       if(lead[z].str[m]=='C'&&lead[z].str[m+1]=='G'||lead[z].str[m+1]=='C'&&lead[z].str[m+2]=='G'||lead[z].str[m+2]=='C'&&lead[z].str[m+3]=='G'
           ||lead[z].str[m+3]=='C'&&lead[z].str[m+4]=='G'||lead[z].str[m+4]=='C'&&lead[z].str[m+5]=='G'||lead[z].str[m+5]=='C'
           &&lead[z].str[m+6]=='G'||lead[z].str[m+6]=='C'&&lead[z].str[m+7]=='G')   
        sum[j]++;      //统计185(n-1)-10到185n+10区间内每146bp窗口内的核小体结合模体的个数
       if(sum[j]>f1)
       {
         f1=sum[j];     //寻找每146bp内最大的核小体结合模体个数个数
         f3=c+j+1;      
       }  
   }
   for(j=0;j<160;j++)
   sum[j]=0;
   
   
   
   ave1=(f2+f3)/2;
   lead[z+1].qi=ave1+146+9;
   lead[z+1].zhi=ave1+146+260;
   fprintf(qqq,"%d\t%d\n",ave1,ave1+146);    //核小体平均起止点
   fprintf(aaa,"%d\n%d\t",ave1-1,ave1+146+1);   //本核小体的终点和下一个核小体的起点
   fprintf(ss,"搜索起点=%d\t搜索终点=%d\t搜索起点c=%d\t核小体起点1=%d\t核小体起点2=%d\n",lead[z].qi-252,lead[z].zhi,c,f2,f3);
   ave1=0,f1=0,f2=0,f3=0,c=0;
}      
   
 }


}
搜索更多相关主题的帖子: 起点 统计 
2017-01-17 17:39
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
得分:0 
下述是部分结果:看核小体起点2,总是无故变零,不知为何?
请各位大侠指教!!!
谢谢
搜索起点=0    搜索终点=0    核小体起点1=9    核小体起点2=24
搜索起点=171    搜索终点=422    搜索起点c=171    核小体起点1=254    核小体起点2=173
搜索起点=368    搜索终点=619    搜索起点c=368    核小体起点1=473    核小体起点2=369
搜索起点=576    搜索终点=827    搜索起点c=576    核小体起点1=643    核小体起点2=640
搜索起点=796    搜索终点=1047    搜索起点c=796    核小体起点1=841    核小体起点2=836
搜索起点=993    搜索终点=1244    搜索起点c=993    核小体起点1=1092    核小体起点2=1018
搜索起点=1210    搜索终点=1461    搜索起点c=1210    核小体起点1=1213    核小体起点2=1240
搜索起点=1381    搜索终点=1632    搜索起点c=1381    核小体起点1=1486    核小体起点2=1487
搜索起点=1641    搜索终点=1892    搜索起点c=1641    核小体起点1=1685    核小体起点2=1646
搜索起点=1820    搜索终点=2071    搜索起点c=1820    核小体起点1=1884    核小体起点2=1889
搜索起点=2041    搜索终点=2292    搜索起点c=2041    核小体起点1=2139    核小体起点2=2120
搜索起点=2284    搜索终点=2535    搜索起点c=2284    核小体起点1=2327    核小体起点2=2387
搜索起点=2512    搜索终点=2763    搜索起点c=2512    核小体起点1=2618    核小体起点2=2513
搜索起点=2720    搜索终点=2971    搜索起点c=2720    核小体起点1=2779    核小体起点2=2788
搜索起点=2938    搜索终点=3189    搜索起点c=2938    核小体起点1=2979    核小体起点2=2939
搜索起点=3114    搜索终点=3365    搜索起点c=3114    核小体起点1=3141    核小体起点2=3178
搜索起点=3314    搜索终点=3565    搜索起点c=3314    核小体起点1=3362    核小体起点2=3315
搜索起点=3493    搜索终点=3744    搜索起点c=3493    核小体起点1=3562    核小体起点2=3599
搜索起点=3735    搜索终点=3986    搜索起点c=3735    核小体起点1=3769    核小体起点2=3736
搜索起点=3907    搜索终点=4158    搜索起点c=3907    核小体起点1=4013    核小体起点2=3961
搜索起点=4142    搜索终点=4393    搜索起点c=4142    核小体起点1=4247    核小体起点2=4245
搜索起点=4401    搜索终点=4652    搜索起点c=4401    核小体起点1=4474    核小体起点2=4459
搜索起点=4621    搜索终点=4872    搜索起点c=4621    核小体起点1=4720    核小体起点2=4710
搜索起点=4870    搜索终点=5121    搜索起点c=4870    核小体起点1=4888    核小体起点2=4871
搜索起点=5034    搜索终点=5285    搜索起点c=5034    核小体起点1=5101    核小体起点2=0
搜索起点=2705    搜索终点=2956    搜索起点c=2705    核小体起点1=2779    核小体起点2=2788
搜索起点=2938    搜索终点=3189    搜索起点c=2938    核小体起点1=2979    核小体起点2=2939
搜索起点=3114    搜索终点=3365    搜索起点c=3114    核小体起点1=3141    核小体起点2=3178
搜索起点=3314    搜索终点=3565    搜索起点c=3314    核小体起点1=3362    核小体起点2=3315
搜索起点=3493    搜索终点=3744    搜索起点c=3493    核小体起点1=3562    核小体起点2=3599
搜索起点=3735    搜索终点=3986    搜索起点c=3735    核小体起点1=3769    核小体起点2=3736
搜索起点=3907    搜索终点=4158    搜索起点c=3907    核小体起点1=4013    核小体起点2=3961
搜索起点=4142    搜索终点=4393    搜索起点c=4142    核小体起点1=4247    核小体起点2=4245
搜索起点=4401    搜索终点=4652    搜索起点c=4401    核小体起点1=4474    核小体起点2=4459
搜索起点=4621    搜索终点=4872    搜索起点c=4621    核小体起点1=4720    核小体起点2=4710
搜索起点=4870    搜索终点=5121    搜索起点c=4870    核小体起点1=4888    核小体起点2=4871
搜索起点=5034    搜索终点=5285    搜索起点c=5034    核小体起点1=5101    核小体起点2=0
搜索起点=2705    搜索终点=2956    搜索起点c=2705    核小体起点1=2779    核小体起点2=2788
搜索起点=2938    搜索终点=3189    搜索起点c=2938    核小体起点1=2979    核小体起点2=2939
搜索起点=3114    搜索终点=3365    搜索起点c=3114    核小体起点1=3141    核小体起点2=3178
2017-01-17 17:41
ICU
Rank: 4
等 级:业余侠客
威 望:2
帖 子:92
专家分:268
注 册:2017-1-14
得分:0 
会不会超过了int数据类型长度导致溢出?毕竟32767不是一个很大的数
2017-01-17 20:10
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
得分:0 
    各位大侠,那该如何处理?
    谢谢!!
   
EGFR.rar (52.6 KB)

    附件是一个基因序列,或A、T、C、G的字符序列。
2017-01-18 10:43
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
得分:0 
    请各位大侠不吝赐教!
    困扰良久,望排忧解疑,不胜感激!
    此题乃生物信息课题,望各位多多帮助!!
    谢谢!!
2017-01-18 16:11
zbjzbj
Rank: 12Rank: 12Rank: 12
来 自:郑州
等 级:贵宾
威 望:52
帖 子:620
专家分:3020
注 册:2011-4-22
得分:5 
题意有点费解,程序代码也很难读.
尤其逻辑表达式,既难读,也易出错。

是学生课程课题还是工程应用课题?如果是工程应用课题,请你把课题完整一下。

2017-01-18 17:44
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
得分:0 
    各位大侠好,我的详细目的及内容解释见下述内容,请各位多多帮助!!
    这个问题困惑我很久!具体程序及结果错误显示见一楼和二楼!
   
    名词解释:
    1、DNA链:AACACCATGGTGTTTCAAAATGG…….(只有A、T、C、G共4个字符)
    附件为DNA链
EGFR.rar (52.6 KB)

    2、核小体结合模体:8模体即8个字符(如TGTTTCAA,其不是核小体结合模体,因无CG),只要其至少含1个CG,其就是核小体结合模体;147个字符共有140个8模体;
    3、拥有最大核小体结合模体个数的147个字符的起止点:在252个字符的统计窗口内,以1为步长,对每147个字符统计一次其内包含的核小体结合模体个数,并将拥有最大核小体结合模体个数的147个字符的起点与终点输出;
    4、拥有最大G+C含量的147个字符的起止点:在252个字符的统计窗口内,以1为步长,对每147个字符统计一次其内包含的G+C的个数,并将拥有最大G+C个数的147个字符的起点与终点输出;
  
    注意事项:
    1、DNA链一般很长,约2百多万;
    2、核小体是一段基因/字符序列,长147;
    3、为统计拥有最大核小体结合模体个数的147个字符的起止点,在每个252个字符的统计窗口内,要循环106次;

    项目/代码目的:
    以DNA链第9个碱基/字符为统计起点、以252个字符为统计窗口,分别统计252大小的窗口内拥有最大核小体结合模体个数和最大G+C含量的147个字符的起止点,并以两者的平均起止点作为核小体定位起点与终点;以前述核小体定位终点加9为下一次统计起点,仍以252个字符为统计窗口,按上述要求确定下一个核小体定位起点与终点;重复上述过程,直到得到DNA链的全部核小体定位起点与终点。
   

2017-01-18 18:30
zbjzbj
Rank: 12Rank: 12Rank: 12
来 自:郑州
等 级:贵宾
威 望:52
帖 子:620
专家分:3020
注 册:2011-4-22
得分:0 
略懂了一些,但不全懂。如果要完成任务,我觉得可以重写代码,不用c。但是你如果是为了学习c语言,你的代码我还理解不了,帮不了你。
2017-01-19 00:53
zbjzbj
Rank: 12Rank: 12Rank: 12
来 自:郑州
等 级:贵宾
威 望:52
帖 子:620
专家分:3020
注 册:2011-4-22
得分:0 
什么叫G+C?平均除不尽怎么处理?最后一段不够252怎么处理?提供的基因序列就是这样的文本格式?用c++或者c#行不行?用户操作系统是什么?可否图形界面编程?
2017-01-19 01:27
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:5 
以下是引用zhou31146001在2017-1-18 18:30:58的发言:

    各位大侠好,我的详细目的及内容解释见下述内容,请各位多多帮助!!
    这个问题困惑我很久!具体程序及结果错误显示见一楼和二楼!
   
    名词解释:
    1、DNA链:AACACCATGGTGTTTCAAAATGG…….(只有A、T、C、G共4个字符)
    附件为DNA链
    2、核小体结合模体:8模体即8个字符(如TGTTTCAA,其不是核小体结合模体,因无CG),只要其至少含1个CG,其就是核小体结合模体;147个字符共有140个8模体;
    3、拥有最大核小体结合模体个数的147个字符的起止点:在252个字符的统计窗口内,以1为步长,对每147个字符统计一次其内包含的核小体结合模体个数,并将拥有最大核小体结合模体个数的147个字符的起点与终点输出;
    4、拥有最大G+C含量的147个字符的起止点:在252个字符的统计窗口内,以1为步长,对每147个字符统计一次其内包含的G+C的个数,并将拥有最大G+C个数的147个字符的起点与终点输出;
  
    注意事项:
    1、DNA链一般很长,约2百多万;
    2、核小体是一段基因/字符序列,长147;
    3、为统计拥有最大核小体结合模体个数的147个字符的起止点,在每个252个字符的统计窗口内,要循环106次;

    项目/代码目的:
    以DNA链第9个碱基/字符为统计起点、以252个字符为统计窗口,分别统计252大小的窗口内拥有最大核小体结合模体个数和最大G+C含量的147个字符的起止点,并以两者的平均起止点作为核小体定位起点与终点;以前述核小体定位终点加9为下一次统计起点,仍以252个字符为统计窗口,按上述要求确定下一个核小体定位起点与终点;重复上述过程,直到得到DNA链的全部核小体定位起点与终点。
   

细问:
1、TGTTTCAA不是核小体结合模体,TCTGTCAG也不是,TCGTTCAA才是,对吗?
2、最大核小体结合模体,是指在TCGTTCAA、TCGTTCGA和CGTCGACG中,最大核小体结合模体是CGTCGACG?
3、第9个碱基/字符为统计起点、以252个字符为统计窗口,这里的“第9个碱基/字符”、“252个字符”和“统计窗口”具体是指什么?
4、G+C含量,是只针对核小体结合模体统计吗?TCTGTCAG的G+C=4、TCGTTCAA的G+C=3 对吗?

[此贴子已经被作者于2017-1-19 08:02编辑过]

2017-01-19 07:57



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-473665-1-1.html




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

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