Разобрать код программы и выявить ошибки - C (СИ)
Формулировка задачи:
Начал работать с С , немогу разобрать код, почему не работает?
Заранее спасибо, за помощь + к карме
Листинг программы
- int nlfm (float *uzxt, float *uml, float *a, float *uzx, float *wzx, float *tzx, float *gs, float *gu, float *gw, float *gt, int n, int lp)
- {
- /* u*df/dx + w*df/dz =sum {m,l} uzxt1{m,l}*fi{m,l}t;
- lp=0 -- f=u; lp=1 -- f=w; lp=2 -- f= C(T);
- uzxt1{m,l,2}=-1 :
- fi (t)=exp(-uzxt1{m,l,4}*t)*(uzxt1{m,l,0}*sin(uzxt1{m,l,5}*t)+uzxt1{m,l,1}*cos(uzxt1{m,l,5}*t)
- uzxt1{m,l,2}=1 :
- fi (t)=(uzxt1{m,l,0}*exp(*(uzxt1{m,l,4}*t)+uzxt1{m,l,1}*exp(uzxt1{m,l,5}*t). */
- int i, j, k, l, m, ml, mli, lnj, n1, n2, n3, n4, nl, nl1, k2, ki, k1, k3, j2, j3, l1, l2, lm, li, i2, lp1;
- float *ay, *c, *d, *az, *nxt, *u0, *tzx0, *e, *f, r1, r2, r3, g1, g2, g3, g4, g5, ggu, c0;
- ay=(float *)calloc(20,sizeof(float));
- az=(float *)calloc(80,sizeof(float));
- c=(float *)calloc(20,sizeof(float));
- d=(float *)calloc(20,sizeof(float));
- e=(float *)calloc(20,sizeof(float));
- f=(float *)calloc(20,sizeof(float));
- nxt=(float *)calloc(80,sizeof(float));
- u0=(float *)calloc(80,sizeof(float));
- tzx0=(float *)calloc(80,sizeof(float));
- if ( tzx0!=NULL && u0!=NULL && c!=NULL && d!=NULL && e!=NULL && f!=NULL && nxt!=NULL && az!=NULL && ay!=NULL )
- {
- n3=n*n;
- lp1=lp*n*n;
- n4=n*n*n;
- nl=4;
- for (m=0;m<n;m++)
- { mli=m*n*n;
- ml=8*m*n;
- lm=m*n;
- for (l=0;l<n;l++)
- { ggu=*(gs+lm+lp1+l);
- lnj=l*n*n;
- c0=0.;
- for (n1=0;n1<nl;n1++)
- { k1=n1*n;
- n2=6*n1;
- for (l1=0;l1<nl;l1++)
- { l2=6*l1;
- nl1=8*(n*n1+l1);
- for (k=0;k<nl-1;k++)
- { k2=6*k;
- k3=8*(n*n1+k);
- ki=k*n;
- for (j=0;j<nl-1;j++)
- { j2=6*j;
- j3=8*(n*k+j);
- if ( lp==0 )
- { r1=*(uml+k1+mli+l1)*(*(a+ki+lnj+j));
- r2=*(uml+n4+k1+mli+l1)*(*(a+n4+ki+lnj+j));
- for (i=0;i<8;i++)
- { *(c+i)=*(uzx+nl1+i);
- *(d+i)=*(uzx+j3+i); }
- /* printf("\n\t m=%u l=%u n1=%u l1=%u k=%u j=%u nl1=%u, j3=%u; r1=%8.3g, r2=%8.3g",m,l,n1,l1,k,j,nl1,j3,r1,r2); */
- pftgt (e,c,d,0);
- for (i=0;i<8;i++)
- { *(c+i)=*(wzx+nl1+i);
- *(d+i)=*(uzx+j3+i); }
- pftgt (ay,c,d,0);
- for (i=0;i<3;i++)
- { *(e+i)*=r1;
- *(ay+i)*=r2; }
- for (i=0;i<6;i++) *(e+6+i)=*(ay+i);
- pslf1(ay,e,2,3,0);
- }
- if ( lp==1 )
- { r1=*(uml+k1+mli+l1)*(*(a+ki+lnj+j));
- r2=*(uml+n4+k1+mli+l1)*(*(a+n4+ki+lnj+j));
- for (i=0;i<8;i++)
- { *(c+i)=*(uzx+nl1+i);
- *(d+i)=*(wzx+j3+i); }
- /* printf("\n\t m=%u l=%u n1=%u l1=%u k=%u j=%u nl1=%u, j3=%u; r1=%8.3g, r2=%8.3g",m,l,n1,l1,k,j,nl1,j3,r1,r2); */
- pftgt (e,c,d,0);
- for (i=0;i<8;i++)
- { *(c+i)=*(wzx+nl1+i);
- *(d+i)=*(wzx+j3+i); }
- pftgt (ay,c,d,0);
- for (i=0;i<3;i++)
- { *(e+i)*=r1;
- *(ay+i)*=r2; }
- for (i=0;i<6;i++) *(e+6+i)=*(ay+i);
- pslf1(ay,e,2,3,0);
- }
- if ( lp==2 )
- { r1=*(uml+k1+mli+l1)*(*(a+ki+lnj+j));
- r2=*(uml+n4+k1+mli+l1)*(*(a+n4+ki+lnj+j));
- for (i=0;i<8;i++)
- { *(c+i)=*(uzx+nl1+i);
- *(d+i)=*(tzx+j3+i); }
- /* printf("\n\t m=%u l=%u n1=%u l1=%u k=%u j=%u nl1=%u, j3=%u; r1=%8.3g, r2=%8.3g",m,l,n1,l1,k,j,nl1,j3,r1,r2); */
- pftgt (e,c,d,0);
- for (i=0;i<8;i++)
- { *(c+i)=*(wzx+nl1+i);
- *(d+i)=*(tzx+j3+i); }
- pftgt (ay,c,d,0);
- for (i=0;i<3;i++)
- { *(e+i)*=r1;
- *(ay+i)*=r2; }
- for (i=0;i<6;i++) *(e+6+i)=*(ay+i);
- pslf1(ay,e,2,3,0);
- }
- for (i=0;i<6;i++) *(az+j2+i)=*(ay+i);
- } /* j */
- /* printf("\n\t m=%u l=%u n1=%u l1=%u k=%u",m,l,n1,l1,k); */
- pslf1(ay,az,nl-1,3,0);
- for (i=0;i<6;i++) *(nxt+k2+i)=*(ay+i);
- } /* k */
- /* printf("\n\tm=%u l=%u n1=%u l1=%u ",m,l,n1,l1); */
- pslf1(ay,nxt,nl-1,3,0);
- for (i=0;i<6;i++) *(tzx0+l2+i)=*(ay+i);
- } /* l1 */
- /* printf("\n\tm=%u l=%u n1=%u n2=%u",m,l,n1,n2); */
- pslf1(ay,tzx0,nl,3,0);
- for (i=0;i<6;i++) *(u0+n2+i)=*(ay+i);
- } /* n1 */
- /* printf("\n\tm=%u l=%u",m,l); */
- pslf1(ay,u0,nl,3,0);
- *d=1;
- *(d+1)=ggu;
- yprv2 (ay,d,c,0,0);
- if ( lp==0 ) r2=*(gu+lm+l);
- if ( lp==1 )
- { r2=*(gw+lm+l);
- c0=-r2; }
- if ( lp==2 )
- { c0=*(gt+lm+l);
- r2=*(gt+lm+n3+l); }
- orig2 (d,c,0,0);
- l2=8*l;
- *(uzxt+ml+l2)=r2;
- *(uzxt+ml+l2+1)=ggu;
- *(d+2)+=c0;
- for (j=0;j<6;j++) *(uzxt+ml+l2+j+2)=*(d+j);
- /* orig3(d,ay,ggu,1); */
- } /* l */
- printf("\n\t uzxt1 -- array uzxt(ml=%u;%u,%u)\n",ml,m,n);
- for (i=0;i<n;i++)
- { l2=8*i;
- for (k=0;k<8;k++)
- printf("%10.3g",*(uzxt+ml+l2+k)); PRN; }
- PRN;
- } /* m */
- free(tzx0); free(u0);
- free(nxt);
- free(d); free(c);
- free(f); free(e);
- free(az);free(ay);
- return(1);
- }
- else
- { printf("\n no memory for arrays in nlf1\n");
- return(-1); }
- }
- float tmlk1 (float *slz, float *slx, float *gt, float t, float z, float x, int n)
- {
- /* TT^(1)(x,z,t)=TT^(0)(x,z,t)+
- tt1_{4,m,l}+e^(tt1_{6,m,l}*t)*[tt1_{2,m,l}*sh(tt1_{7,m,l}*t)+tt2_{3,m,l}*ch(tt1_{7,m,l}*t)] */
- int m, k, n1, mk;
- float zz, xx, r1, r2, tts, ttx;
- tts=0.;
- n1=n+n;
- for (m=0;m<n;m++)
- {
- zz=cos(*(slz+n1+m)*z);
- ttx=0.;
- for (k=0;k<n;k++)
- { mk=8*(m*n+k);
- xx=cos(*(slx+k+n1)*x);
- r2=*(gt+mk+4)+(*(gt+mk))*exp(-(*(gt+mk+1))*t);
- if (*(gt+mk+5) == -1 )
- r1=exp(*(gt+mk+6)*t)*(*(gt+mk+2)*sin(*(gt+mk+7)*t)+(*(gt+mk+3))*cos(*(gt+mk+7)*t));
- else
- r1=exp(*(gt+mk+6)*t)*(*(gt+mk+2)*sinh(*(gt+mk+7)*t)+(*(gt+mk+3))*cosh(*(gt+mk+7)*t));
- /* r1=*(gt+mk+2)*exp(*(gt+mk+6)*t)+(*(gt+mk+3))*exp(*(gt+mk+7)*t); */
- ttx+=(r1+r2)*xx;
- }
- tts+=ttx*zz;
- }
- return(tts);
- }
- float umlk1 (float *slz, float *slx, float *gt, float un, float t, float z, float x, int n)
- {
- /* UT^(1)(x,z,t)=ut_{0,m,l}+e^(ut_{3,m,l}*t)*[ut_{1,m,l}*sh(ut_{4,m,l}*t)+ut_{2,m,l}*ch(ut_{4,m,l}*t)] */
- int m, l, k1, mk;
- float zz, xx, r1, r2, uts, utx;
- uts=0.;
- for (m=0;m<n;m++)
- {
- zz=(sin(*(slz+m)*z)-(*(slz+m))/un*cos(*(slz+m)*z));
- utx=0.;
- for (l=0;l<n;l++)
- {
- mk=8*(l+m*n);
- xx=sin(*(slx+l)*x);
- r2=*(gt+mk+4)+(*(gt+mk))*exp(-(*(gt+mk+1))*t);
- if (*(gt+mk+5) == -1 )
- r1=exp(*(gt+mk+6)*t)*(*(gt+mk+2)*sin(*(gt+mk+7)*t)+(*(gt+mk+3))*cos(*(gt+mk+7)*t));
- else
- r1=exp(*(gt+mk+6)*t)*(*(gt+mk+2)*sinh(*(gt+mk+7)*t)+(*(gt+mk+3))*cosh(*(gt+mk+7)*t));
- /* r1=*(gt+mk+2)*exp(*(gt+mk+6)*t)+(*(gt+mk+3))*exp(*(gt+mk+7)*t); */
- utx+=xx*(r1+r2);
- }
- uts+=zz*utx;
- }
- return(uts);
- }
- float wmlk1 (float *slz, float *slx, float *gt, float t, float z, float x, int n)
- {
- /* w^(1)(x,z,t) */
- int m, k, l, mk;
- float zz, xx, r1, r2, tts, ttx;
- tts=0.;
- for (m=0; m<n; m++)
- { zz=cos(*(slz+n+m)*z);
- ttx=0.;
- for (l=0;l<n;l++)
- {
- mk=8*(l+m*n);
- xx=cos(*(slx+l+n)*x);
- r2=*(gt+mk+4)+(*(gt+mk))*exp(-(*(gt+mk+1))*t);
- if (*(gt+mk+5) == -1 )
- r1=exp(*(gt+mk+6)*t)*(*(gt+mk+2)*sin(*(gt+mk+7)*t)+(*(gt+mk+3))*cos(*(gt+mk+7)*t));
- else
- r1=exp(*(gt+mk+6)*t)*(*(gt+mk+2)*sinh(*(gt+mk+7)*t)+(*(gt+mk+3))*cosh(*(gt+mk+7)*t));
- /* r1=*(gt+mk+2)*exp(*(gt+mk+6)*t)+(*(gt+mk+3))*exp(*(gt+mk+7)*t); */
- ttx+=xx*(r1+r2);
- }
- tts+=ttx*zz;
- }
- return(tts);
- }
- int grf0mlk (float *slz, float *slx, float *ut, float *gs, float *u, int n, int lp)
- {
- FILE *fcl;
- int i, k, l, m, l1, l2, n2, nz;
- float t, x, z, un, dt, dx, dz, *umlk;
- nz=2*n;
- n2=nz*nz;
- un=*(u+10);
- umlk=(float *)calloc(n2+1,sizeof(float));
- if ( umlk!=NULL )
- {
- dx=*u/nz;
- dz=*(u+1)/nz;
- t=1.;
- z=0;
- dt=0.2;
- for (l=0;l<nz;l++)
- { l2=l*nz;
- x=0.;
- for (k=0;k<nz;k++)
- { if ( lp==0 ) *(umlk+l2+k)=umlk0 (slz, slx, ut, gs, un, t, z, x, n);
- if ( lp==1 ) *(umlk+l2+k)=wmlk0 (slz, slx, ut, gs, t, z, x, n);
- if ( lp==2 ) *(umlk+l2+k)=tmlk0 (slz, slx, ut, gs, t, z, x, n);
- x=x+dx;
- }
- z=z+dz;
- }
- printf("\n\t umlk0(z,x,t=%5.2f) lp=%u; dx=%7.3g, dz=%7.3g dt=%5.2g -- array uzx1(%u,%u)\n",t,lp,dx,dz,dt,nz,nz);
- for (l=0;l<nz;l++)
- { l2=l*nz;
- for (k=0;k<nz;k++)
- printf("%8.3g%c",*(umlk+l2+k), ( k%n==n-1 ) ? '\n' : ' ');
- PRN; }
- if ( lp==0 ) fcl = fopen("gduzx0.dat","w");
- if ( lp==1 ) fcl = fopen("gdwzx0.dat","w");
- if ( lp==2 ) fcl = fopen("gdtzx0.dat","w");
- for (i=0; i<n2; i++) fprintf(fcl,"%g,",*(umlk+i));
- fclose(fcl);
- x=2.;
- z=0.;
- for (m=0;m<nz;m++)
- { t=0;
- n2=m*n;
- l2=m*nz;
- for (l=0;l<nz;l++)
- { if ( lp==0 ) *(umlk+l2+l)=umlk0 (slz, slx, ut, gs, un, t, z, x, n);
- if ( lp==1 ) *(umlk+l2+l)=wmlk0 (slz, slx, ut, gs, t, z, x, n);
- if ( lp==2 ) *(umlk+l2+l)=tmlk0 (slz, slx, ut, gs, t, z, x, n);
- t=t+dt;
- }
- z=z+dz;
- }
- printf("\n\t uml0(z,x=%5.2f,t) lp=%u -- array uml0(%u,%u)\n",x,lp,nz,nz);
- for (m=0; m<nz; m++)
- { n2=m*nz;
- for (l=0; l<nz; l++)
- printf("%8.3g%c",*(umlk+n2+l), ( l%n==n-1 ) ? '\n' : ' ');
- PRN;
- }
- if ( lp==0 ) fcl = fopen("gduzt0.dat","w");
- if ( lp==1 ) fcl = fopen("gdwzt0.dat","w");
- if ( lp==2 ) fcl = fopen("gdtzt0.dat","w");
- for (i=0; i<n2; i++) fprintf(fcl,"%g,",*(umlk+i));
- fclose(fcl);
- z=2.;
- x=0.5;
- for (m=0;m<nz;m++)
- { t=0;
- n2=m*n;
- l2=m*nz;
- for (l=0;l<nz;l++)
- { if ( lp==0 ) *(umlk+l2+l)=umlk0 (slz, slx, ut, gs, un, t, z, x, n);
- if ( lp==1 ) *(umlk+l2+l)=wmlk0 (slz, slx, ut, gs, t, z, x, n);
- if ( lp==2 ) *(umlk+l2+l)=tmlk0 (slz, slx, ut, gs, t, z, x, n);
- t=t+dt;
- }
- x=x+dx;
- }
- printf("\n\t uml0(x,t,z=%5.2f) lp=%u -- array uml0(%u,%u)\n",z,lp,nz,nz);
- for (m=0; m<nz; m++)
- { n2=m*nz;
- for (l=0; l<nz; l++)
- printf("%8.3g%c",*(umlk+n2+l), ( l%n==n-1 ) ? '\n' : ' ');
- PRN;
- }
- if ( lp==0 ) fcl = fopen("gduxt0.dat","w");
- if ( lp==1 ) fcl = fopen("gdwxt0.dat","w");
- if ( lp==2 ) fcl = fopen("gdtxt0.dat","w");
- for (i=0; i<n2; i++) fprintf(fcl,"%g,",*(umlk+i));
- fclose(fcl);
- free(umlk);
- return(1);
- }
- else
- { printf("\n no memory for umlk in grf0mlk\n");
- return(-1); }
- }
- int grfmlk (float *slz, float *slx, float *ut, float *u, int n, int lp)
- {
- FILE *fcl;
- int i, k, l, m, l1, l2, n2, nz;
- float t, x, z, un, dt, dx, dz, *umlk;
- nz=2*n;
- n2=nz*nz;
- un=*(u+10);
- umlk=(float *)calloc(n2+1,sizeof(float));
- if ( umlk!=NULL )
- {
- /* printf("\n\t array ut(%u,%u,8)\n",n,n);
- for (m=0; m<n; m++)
- { n2=8*m*n;
- for (l=0; l<n; l++)
- { l2=8*l;
- for (i=0;i<8;i++) printf("%10.3g",*(ut+n2+l2+i));
- PRN; }
- }
- ... дополнения
Решение задачи: «Разобрать код программы и выявить ошибки»
textual
Листинг программы
- float tmlk1 (float *slz, float *slx, float *gt, float t, float z, float x, int n);
- float umlk1 (float *slz, float *slx, float *gt, float un, float t, float z, float x, int n);
- float wmlk1 (float *slz, float *slx, float *gt, float t, float z, float x, int n);
- int grf0mlk (float *slz, float *slx, float *ut, float *gs, float *u, int n, int lp);
- int grfmlk (float *slz, float *slx, float *ut, float *u, int n, int lp);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д