Разобрать код программы и выявить ошибки - 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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д