标题:怎么样使程序具有通用性
只看楼主
yjm041441055
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2009-11-18
结帖率:0
已结贴  问题点数:20 回复次数:5 
怎么样使程序具有通用性
  我现在有一个c语言程序,意思是利用给定的晶胞坐标得出一个晶体。各方向的晶胞数为x,y,z。我现在能实现自己给定的晶胞数目时的程序,但是怎么样能使程序遇有通用性,让别人也能用,就是不用修改源代码,可以自己给定晶胞数。我现在要实现只能在源程序代码里修改那些x,y,z。请问怎么实现呢?谢谢啦!!!
搜索更多相关主题的帖子: 通用性 
2009-11-18 20:45
yjm041441055
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2009-11-18
得分:0 
以下是引用yjm041441055在2009-11-18 20:45:54的发言:

  我现在有一个c语言程序,意思是利用给定的晶胞坐标得出一个晶体。各方向的晶胞数为x,y,z。我现在能实现自己给定的晶胞数目时的程序,但是怎么样能使程序遇有通用性,让别人也能用,就是不用修改源代码,可以自己 ...
下面是我的程序:
 #define X 4
 #define Y 5
 #define Z 9
 #include  <stdio.h>
 void jingti(float c[][4] ,float d[][4])       //晶体的子程序,其中X,Y,Z为晶体三个方向的晶胞数
{
 int i,j;
 for(i=0;i<12;i++)                  
   {c[i][1]=c[i][1]*7.41;
    c[i][2]=c[i][2]*4.94;
    c[i][3]=c[i][3]*2.54;
   }
 for(i=0;i<12;i++)                  
   {for(j=0;j<4;j++)                  
      d[i][j]=c[i][j];}

 for(i=0;i<12*X-12;i++)                         //x坐标增加
   {d[i+12][0]=d[i][0];
    d[i+12][1]=d[i][1]+7.41;
    d[i+12][2]=d[i][2];
    d[i+12][3]=d[i][3];}

 for(i=0;i<12*X*Y-12*X;i++)                        //y坐标增加
   {d[i+12*X][0]=d[i][0];
    d[i+12*X][2]=d[i][2]+4.94;                 
    d[i+12*X][1]=d[i][1];
    d[i+12*X][3]=d[i][3];}

 for(i=0;i<12*X*Y*Z-12*X*Y;i++)                       //z坐标增加
   {d[i+12*X*Y][0]=d[i][0];
    d[i+12*X*Y][1]=d[i][1];
    d[i+12*X*Y][2]=d[i][2];
    d[i+12*X*Y][3]=d[i][3]+2.54;}
 return;
}
 void c_qiu(float b[][4],int n,float x,float y,float z)              //求C60球指定位置坐标的子程序,x,y,z为指定的球心坐标
{
 float k,l,m;        
 int i;
 k=0.0;
 l=0.0;
 m=0.0;
 for(i=0;i<n;i++)                   //求C60的原始球心
   {k=k+b[i][1];
    l=l+b[i][2];
    m=m+b[i][3];}
 k=k/n;
 l=l/n;
 m=m/n;
 for(i=0;i<n;i++)                    //球心移到(x,y,z)处
   {b[i][1]=b[i][1]+x-k;
    b[i][2]=b[i][2]+y-l;
    b[i][3]=b[i][3]+z-m;}
 return;
 }
 void wadong(float s[][4],float x1,float y1,float z1,float r,float h)    //在晶体上挖去一个圆柱体
{int i;
 for(i=0;i<12*X*Y*Z;i++)                        
   if(((s[i][1]-x1)*(s[i][1]-x1)+(s[i][2]-y1)*(s[i][2]-y1)-r*r)<=1e-6&&s[i][3]>h)
     {s[i][0]=0;
      s[i][1]=0;
      s[i][2]=0;
      s[i][3]=0;}
}
void main()
{
 float a[12][4],s[12*X*Y*Z][4] ,b[60][4];
 int i,j;
 FILE *fp;

 

 fp=fopen("jingbao.xyz","r+");
 for(i=0;i<12;i++)
 {for(j=0;j<4;j++)
    fscanf(fp,"%f",&a[i][j]);
    fprintf(fp,"\n");}
 
 fp=fopen("C60.xyz","r+");
 for(i=0;i<60;i++)
 {for(j=0;j<4;j++)
    fscanf(fp,"%f",&b[i][j]);
    fprintf(fp,"\n");}

 jingti(a,s);                                          //调用晶体坐标的子程序
 wadong(s,15,12,12,7,5);                              //调用挖洞的子程序,调用时可任意设定所挖圆柱体的位置和大小
 c_qiu(b,60,15,12,12);                                 //调用求C60指定位置坐标的子程序,可任意设定球心位置

 fp=fopen("JINGTI.xyz","w+");
 for(i=0;i<2160;i++)
   {for(j=0;j<4;j++)
      fprintf(fp,"%10.6f",s[i][j]);
      fprintf(fp,"\n");}
 for(i=0;i<60;i++)
   {for(j=0;j<4;j++)
      fprintf(fp,"%10.6f",b[i][j]);
      fprintf(fp,"\n");}
 fclose(fp);
}
2009-11-18 21:06
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
得分:6 
you seem have found the answer.
2009-11-18 22:04
yjm041441055
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2009-11-18
得分:0 
不懂啊 您的话?
2009-11-18 22:25
尐傑哭嘞
Rank: 4
来 自:苏州
等 级:业余侠客
帖 子:81
专家分:257
注 册:2009-10-26
得分:6 
学学,不了解

为什么我永远那么倒霉!!!!!!
2009-11-23 13:02
viky2003
Rank: 5Rank: 5
等 级:职业侠客
帖 子:375
专家分:383
注 册:2007-4-11
得分:6 
you seem to have found the answer of the issue.

要练习算法就来http:///!!有挑战哦!!
2009-11-23 22:25



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




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

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