有会用java写"生成正交表"代码的吗? 或者同时会C语言和java语言的牛人在吗?

oldfeel 发布于 2013/05/24 02:41
阅读 492
收藏 0

手里有一套用c语言写的生成正交表的代码.无奈小生才疏学浅,只会一点java,请教哪位高手帮忙改写成java语言好吗?

#include <stdio.h>
#include <math.h>
#define N 30
int p;
main()
{int a[N][N/3],b[N][N/3],c[N][N/3],i,m,n,j,k,r,flag[N/5],J,v[N/5],x[N/5],fla[N/5];
 double P,K,M;
 float d[N/3][N/3],e[N],f,*fl;
 FILE *fp;
 int range(int);
 printf("please input the number of experiment,level and cloumn" );
 scanf("%lf%lf",&K,&P);
 scanf("%d",&J);
 k=K;
 p=P;
 M=log(K);
 K=log(P);
 M=M/K;
 m=M;
  for(i=0;i<k;i++)
	 {n=i;
	 for(j=0;j<m;j++)
	  {K=pow(P,M-1-j);
	   r=K;
	   a[i][j]=n/r;
	   c[i][j]=a[i][j];
	   n=n-a[i][j]*r;
	   }
	 }
   for(i=0;i<k;i++)
	 {
	   for(j=0;j<m;j++)
		 printf("%d ",a[i][j]);
	   printf("\n");
	 }
   printf("\n");
  for(i=k-1;i>0;i--)
   {for(n=1;n<p;n++)
	 {flag[1]=0;
	  for(j=0;j<m;j++)
	   b[i][j]=range(n*c[i][j]);

	  for(r=i-1;r>0;r--)
	   {flag[0]=0;
		 for(j=0;j<m;j++)
		  {if(b[i][j]==c[r][j])
			flag[0]++;
		   else
			 break;
		   }
		 if(flag[0]==m)
			{for(j=0;j<p;j++)
			  c[i][j]=0;
			 flag[1]=1;
			 break;
			}

		}
	if(flag[1]) break;
	 }

   }
   n=0,i=0;
   while(n<J)
	 {flag[0]=0;
	   for(;i<k;i++)
		{for(j=0;j<m;j++)
		  if(c[i][j]==0) flag[0]++;
		 if(flag[0]!=m)
			{for(j=0;j<m;j++)
			  b[n][j]=c[i][j];
			 break;
			 }
		 }
		n++;
		i++;
	   }
	for(i=0;i<J;i++)
	  { for(j=0;j<m;j++)
		 printf("%d ",b[i][j]);
		printf("\n");
	  }
	printf("\n");
	for(i=0;i<k;i++)
	  for(n=0;n<J;n++)
	   {c[i][n]=0;
		for(j=0;j<m;j++)
		 c[i][n]=c[i][n]+a[i][j]*b[n][j];
		c[i][n]=1+range(c[i][n]);
		}
	 for(i=0;i<k;i++)
	   { for(j=0;j<J;j++)
		   printf("%d ",c[i][j]);
		 printf("\n");
	   }
   printf("please input the cloumn stand for the factor\n ");
   for(i=0;i<J;i++)
	 scanf("%d",&x[i]);
   printf("please input the result of experiment \n ");
   for(i=0;i<k;i++)
	 scanf("%f",&e[i]);
   f=e[0];
   for(i=1;i<k;i++)
	  f=f+e[i];

   f=f/k;
   for(i=0;i<k;i++)
	{ e[i]=e[i]-f;
	  printf("%f\n",e[i]);
	 }

   for(i=0;i<J;i++)
	 {if(x[i])  v[i]=p-1;
	   else {v[i]=k-1-(p-1)*(J-1);
			n=i;
			}
	  }
	for(j=0;j<J;j++)
	   for(r=1;r<=p;r++)
		   {d[r-1][j]=0;
			 for(i=0;i<k;i++)
			   if(c[i][j]==r)
				 d[r-1][j]=d[r-1][j]+e[i];
			  }

	r=k/p;
	for(i=p;i<2*p;i++)
	  for(j=0;j<J;j++)
	   d[i][j]=d[i-p][j]*d[i-p][j]/r;
	i=2*p;
	for(j=0;j<J;j++)
	  {d[i][j]=0;
		for(r=p;r<2*p;r++)
		  d[i][j]=d[i][j]+d[r][j];
	  }

	for(i=0;i<=2*p;i++)
	 { for(j=0;j<J;j++)
	   printf("%10f ",d[i][j]);
	   printf("\n");
	 }
	for(i=0;i<J;i++)
	  flag[i]=1;
 loop:j=0;
  while(j<4)
   { for(i=0;i<J;i++)
		{ if(i==n || flag[i]==0) continue;
		  f=d[r][i]*v[n]/(d[r][n]*v[i]);
		  fp=fopen("bina","rb");
		  for(m=0;m<15*j+3*(v[n]-1)+v[i];m++)
			 fread(fl,sizeof(float),1,fp);
		  fclose(fp);
		  printf("%f\n",*fl);
		  if(f-*fl<=0)
			{ fla[i]=j;
			  flag[i]=0;
				if(j==0)
				 {v[n]=v[n]+v[i];
				  d[r][n]=d[r][n]+d[r][i];
					goto loop;
				  }
			  }
			}
		j++;
	}
   for(i=0;i<J;i++)
	if(flag[i]!=0 && i!=n)
	   fla[i]=4;
  for(i=0;i<J;i++)
	if(i!=n) printf("%d\n",fla[i]);
  for(i=0;i<J;i++)
   if(i!=n)
	{printf("%d factor ",x[i]);
	 switch(fla[i])
	{ case 0: printf("is no influnce factor\n"); break;
	 case 1: printf("is normal factor\n"); break;
	 case 2: printf("is normal factor\n"); break;
	 case 3: printf("is important factor\n"); break;
	 case 4: printf("is very important factor\n");break;
	 }
   }
 }
 int range(int i)
   {if(i<p)
	 return i;
	else
	 i=range(i-p);
   return i;
   }

  void bsnhk(float a)
  { float *p;
	p=&a;
  }
加载中
0
vvtf
vvtf
好厉害的样子
0
林春晖
林春晖
啥是正交表
返回顶部
顶部