Разобрать код программы и выявить ошибки - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Начал работать с С , немогу разобрать код, почему не работает? Заранее спасибо, за помощь + к карме
Листинг программы
  1. 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)
  2. {
  3. /* u*df/dx + w*df/dz =sum {m,l} uzxt1{m,l}*fi{m,l}t;
  4. lp=0 -- f=u; lp=1 -- f=w; lp=2 -- f= C(T);
  5. uzxt1{m,l,2}=-1 :
  6. 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)
  7. uzxt1{m,l,2}=1 :
  8. fi (t)=(uzxt1{m,l,0}*exp(*(uzxt1{m,l,4}*t)+uzxt1{m,l,1}*exp(uzxt1{m,l,5}*t). */
  9. 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;
  10. float *ay, *c, *d, *az, *nxt, *u0, *tzx0, *e, *f, r1, r2, r3, g1, g2, g3, g4, g5, ggu, c0;
  11. ay=(float *)calloc(20,sizeof(float));
  12. az=(float *)calloc(80,sizeof(float));
  13. c=(float *)calloc(20,sizeof(float));
  14. d=(float *)calloc(20,sizeof(float));
  15. e=(float *)calloc(20,sizeof(float));
  16. f=(float *)calloc(20,sizeof(float));
  17. nxt=(float *)calloc(80,sizeof(float));
  18. u0=(float *)calloc(80,sizeof(float));
  19. tzx0=(float *)calloc(80,sizeof(float));
  20. if ( tzx0!=NULL && u0!=NULL && c!=NULL && d!=NULL && e!=NULL && f!=NULL && nxt!=NULL && az!=NULL && ay!=NULL )
  21. {
  22. n3=n*n;
  23. lp1=lp*n*n;
  24. n4=n*n*n;
  25. nl=4;
  26. for (m=0;m<n;m++)
  27. { mli=m*n*n;
  28. ml=8*m*n;
  29. lm=m*n;
  30. for (l=0;l<n;l++)
  31. { ggu=*(gs+lm+lp1+l);
  32. lnj=l*n*n;
  33. c0=0.;
  34. for (n1=0;n1<nl;n1++)
  35. { k1=n1*n;
  36. n2=6*n1;
  37. for (l1=0;l1<nl;l1++)
  38. { l2=6*l1;
  39. nl1=8*(n*n1+l1);
  40. for (k=0;k<nl-1;k++)
  41. { k2=6*k;
  42. k3=8*(n*n1+k);
  43. ki=k*n;
  44. for (j=0;j<nl-1;j++)
  45. { j2=6*j;
  46. j3=8*(n*k+j);
  47. if ( lp==0 )
  48. { r1=*(uml+k1+mli+l1)*(*(a+ki+lnj+j));
  49. r2=*(uml+n4+k1+mli+l1)*(*(a+n4+ki+lnj+j));
  50. for (i=0;i<8;i++)
  51. { *(c+i)=*(uzx+nl1+i);
  52. *(d+i)=*(uzx+j3+i); }
  53. /* 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); */
  54. pftgt (e,c,d,0);
  55. for (i=0;i<8;i++)
  56. { *(c+i)=*(wzx+nl1+i);
  57. *(d+i)=*(uzx+j3+i); }
  58. pftgt (ay,c,d,0);
  59. for (i=0;i<3;i++)
  60. { *(e+i)*=r1;
  61. *(ay+i)*=r2; }
  62. for (i=0;i<6;i++) *(e+6+i)=*(ay+i);
  63. pslf1(ay,e,2,3,0);
  64. }
  65. if ( lp==1 )
  66. { r1=*(uml+k1+mli+l1)*(*(a+ki+lnj+j));
  67. r2=*(uml+n4+k1+mli+l1)*(*(a+n4+ki+lnj+j));
  68. for (i=0;i<8;i++)
  69. { *(c+i)=*(uzx+nl1+i);
  70. *(d+i)=*(wzx+j3+i); }
  71. /* 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); */
  72. pftgt (e,c,d,0);
  73. for (i=0;i<8;i++)
  74. { *(c+i)=*(wzx+nl1+i);
  75. *(d+i)=*(wzx+j3+i); }
  76. pftgt (ay,c,d,0);
  77. for (i=0;i<3;i++)
  78. { *(e+i)*=r1;
  79. *(ay+i)*=r2; }
  80. for (i=0;i<6;i++) *(e+6+i)=*(ay+i);
  81. pslf1(ay,e,2,3,0);
  82. }
  83. if ( lp==2 )
  84. { r1=*(uml+k1+mli+l1)*(*(a+ki+lnj+j));
  85. r2=*(uml+n4+k1+mli+l1)*(*(a+n4+ki+lnj+j));
  86. for (i=0;i<8;i++)
  87. { *(c+i)=*(uzx+nl1+i);
  88. *(d+i)=*(tzx+j3+i); }
  89. /* 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); */
  90. pftgt (e,c,d,0);
  91. for (i=0;i<8;i++)
  92. { *(c+i)=*(wzx+nl1+i);
  93. *(d+i)=*(tzx+j3+i); }
  94. pftgt (ay,c,d,0);
  95. for (i=0;i<3;i++)
  96. { *(e+i)*=r1;
  97. *(ay+i)*=r2; }
  98. for (i=0;i<6;i++) *(e+6+i)=*(ay+i);
  99. pslf1(ay,e,2,3,0);
  100. }
  101. for (i=0;i<6;i++) *(az+j2+i)=*(ay+i);
  102. } /* j */
  103. /* printf("\n\t m=%u l=%u n1=%u l1=%u k=%u",m,l,n1,l1,k); */
  104. pslf1(ay,az,nl-1,3,0);
  105. for (i=0;i<6;i++) *(nxt+k2+i)=*(ay+i);
  106. } /* k */
  107. /* printf("\n\tm=%u l=%u n1=%u l1=%u ",m,l,n1,l1); */
  108. pslf1(ay,nxt,nl-1,3,0);
  109. for (i=0;i<6;i++) *(tzx0+l2+i)=*(ay+i);
  110. } /* l1 */
  111. /* printf("\n\tm=%u l=%u n1=%u n2=%u",m,l,n1,n2); */
  112. pslf1(ay,tzx0,nl,3,0);
  113. for (i=0;i<6;i++) *(u0+n2+i)=*(ay+i);
  114. } /* n1 */
  115. /* printf("\n\tm=%u l=%u",m,l); */
  116. pslf1(ay,u0,nl,3,0);
  117. *d=1;
  118. *(d+1)=ggu;
  119. yprv2 (ay,d,c,0,0);
  120. if ( lp==0 ) r2=*(gu+lm+l);
  121. if ( lp==1 )
  122. { r2=*(gw+lm+l);
  123. c0=-r2; }
  124. if ( lp==2 )
  125. { c0=*(gt+lm+l);
  126. r2=*(gt+lm+n3+l); }
  127. orig2 (d,c,0,0);
  128. l2=8*l;
  129. *(uzxt+ml+l2)=r2;
  130. *(uzxt+ml+l2+1)=ggu;
  131. *(d+2)+=c0;
  132. for (j=0;j<6;j++) *(uzxt+ml+l2+j+2)=*(d+j);
  133. /* orig3(d,ay,ggu,1); */
  134. } /* l */
  135. printf("\n\t uzxt1 -- array uzxt(ml=%u;%u,%u)\n",ml,m,n);
  136. for (i=0;i<n;i++)
  137. { l2=8*i;
  138. for (k=0;k<8;k++)
  139. printf("%10.3g",*(uzxt+ml+l2+k)); PRN; }
  140. PRN;
  141. } /* m */
  142. free(tzx0); free(u0);
  143. free(nxt);
  144. free(d); free(c);
  145. free(f); free(e);
  146. free(az);free(ay);
  147. return(1);
  148. }
  149. else
  150. { printf("\n no memory for arrays in nlf1\n");
  151. return(-1); }
  152. }
  153.  
  154. float tmlk1 (float *slz, float *slx, float *gt, float t, float z, float x, int n)
  155. {
  156. /* TT^(1)(x,z,t)=TT^(0)(x,z,t)+
  157. 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)] */
  158. int m, k, n1, mk;
  159. float zz, xx, r1, r2, tts, ttx;
  160. tts=0.;
  161. n1=n+n;
  162. for (m=0;m<n;m++)
  163. {
  164. zz=cos(*(slz+n1+m)*z);
  165. ttx=0.;
  166. for (k=0;k<n;k++)
  167. { mk=8*(m*n+k);
  168. xx=cos(*(slx+k+n1)*x);
  169. r2=*(gt+mk+4)+(*(gt+mk))*exp(-(*(gt+mk+1))*t);
  170. if (*(gt+mk+5) == -1 )
  171. r1=exp(*(gt+mk+6)*t)*(*(gt+mk+2)*sin(*(gt+mk+7)*t)+(*(gt+mk+3))*cos(*(gt+mk+7)*t));
  172. else
  173. r1=exp(*(gt+mk+6)*t)*(*(gt+mk+2)*sinh(*(gt+mk+7)*t)+(*(gt+mk+3))*cosh(*(gt+mk+7)*t));
  174. /* r1=*(gt+mk+2)*exp(*(gt+mk+6)*t)+(*(gt+mk+3))*exp(*(gt+mk+7)*t); */
  175. ttx+=(r1+r2)*xx;
  176. }
  177. tts+=ttx*zz;
  178. }
  179. return(tts);
  180. }
  181. float umlk1 (float *slz, float *slx, float *gt, float un, float t, float z, float x, int n)
  182. {
  183. /* 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)] */
  184. int m, l, k1, mk;
  185. float zz, xx, r1, r2, uts, utx;
  186. uts=0.;
  187. for (m=0;m<n;m++)
  188. {
  189. zz=(sin(*(slz+m)*z)-(*(slz+m))/un*cos(*(slz+m)*z));
  190. utx=0.;
  191. for (l=0;l<n;l++)
  192. {
  193. mk=8*(l+m*n);
  194. xx=sin(*(slx+l)*x);
  195. r2=*(gt+mk+4)+(*(gt+mk))*exp(-(*(gt+mk+1))*t);
  196. if (*(gt+mk+5) == -1 )
  197. r1=exp(*(gt+mk+6)*t)*(*(gt+mk+2)*sin(*(gt+mk+7)*t)+(*(gt+mk+3))*cos(*(gt+mk+7)*t));
  198. else
  199. r1=exp(*(gt+mk+6)*t)*(*(gt+mk+2)*sinh(*(gt+mk+7)*t)+(*(gt+mk+3))*cosh(*(gt+mk+7)*t));
  200. /* r1=*(gt+mk+2)*exp(*(gt+mk+6)*t)+(*(gt+mk+3))*exp(*(gt+mk+7)*t); */
  201. utx+=xx*(r1+r2);
  202. }
  203. uts+=zz*utx;
  204. }
  205. return(uts);
  206. }
  207. float wmlk1 (float *slz, float *slx, float *gt, float t, float z, float x, int n)
  208. {
  209. /* w^(1)(x,z,t) */
  210. int m, k, l, mk;
  211. float zz, xx, r1, r2, tts, ttx;
  212. tts=0.;
  213. for (m=0; m<n; m++)
  214. { zz=cos(*(slz+n+m)*z);
  215. ttx=0.;
  216. for (l=0;l<n;l++)
  217. {
  218. mk=8*(l+m*n);
  219. xx=cos(*(slx+l+n)*x);
  220. r2=*(gt+mk+4)+(*(gt+mk))*exp(-(*(gt+mk+1))*t);
  221. if (*(gt+mk+5) == -1 )
  222. r1=exp(*(gt+mk+6)*t)*(*(gt+mk+2)*sin(*(gt+mk+7)*t)+(*(gt+mk+3))*cos(*(gt+mk+7)*t));
  223. else
  224. r1=exp(*(gt+mk+6)*t)*(*(gt+mk+2)*sinh(*(gt+mk+7)*t)+(*(gt+mk+3))*cosh(*(gt+mk+7)*t));
  225. /* r1=*(gt+mk+2)*exp(*(gt+mk+6)*t)+(*(gt+mk+3))*exp(*(gt+mk+7)*t); */
  226. ttx+=xx*(r1+r2);
  227. }
  228. tts+=ttx*zz;
  229. }
  230. return(tts);
  231. }
  232. int grf0mlk (float *slz, float *slx, float *ut, float *gs, float *u, int n, int lp)
  233. {
  234. FILE *fcl;
  235. int i, k, l, m, l1, l2, n2, nz;
  236. float t, x, z, un, dt, dx, dz, *umlk;
  237. nz=2*n;
  238. n2=nz*nz;
  239. un=*(u+10);
  240. umlk=(float *)calloc(n2+1,sizeof(float));
  241. if ( umlk!=NULL )
  242. {
  243. dx=*u/nz;
  244. dz=*(u+1)/nz;
  245. t=1.;
  246. z=0;
  247. dt=0.2;
  248. for (l=0;l<nz;l++)
  249. { l2=l*nz;
  250. x=0.;
  251. for (k=0;k<nz;k++)
  252. { if ( lp==0 ) *(umlk+l2+k)=umlk0 (slz, slx, ut, gs, un, t, z, x, n);
  253. if ( lp==1 ) *(umlk+l2+k)=wmlk0 (slz, slx, ut, gs, t, z, x, n);
  254. if ( lp==2 ) *(umlk+l2+k)=tmlk0 (slz, slx, ut, gs, t, z, x, n);
  255. x=x+dx;
  256. }
  257. z=z+dz;
  258. }
  259. 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);
  260. for (l=0;l<nz;l++)
  261. { l2=l*nz;
  262. for (k=0;k<nz;k++)
  263. printf("%8.3g%c",*(umlk+l2+k), ( k%n==n-1 ) ? '\n' : ' ');
  264. PRN; }
  265. if ( lp==0 ) fcl = fopen("gduzx0.dat","w");
  266. if ( lp==1 ) fcl = fopen("gdwzx0.dat","w");
  267. if ( lp==2 ) fcl = fopen("gdtzx0.dat","w");
  268. for (i=0; i<n2; i++) fprintf(fcl,"%g,",*(umlk+i));
  269. fclose(fcl);
  270. x=2.;
  271. z=0.;
  272. for (m=0;m<nz;m++)
  273. { t=0;
  274. n2=m*n;
  275. l2=m*nz;
  276. for (l=0;l<nz;l++)
  277. { if ( lp==0 ) *(umlk+l2+l)=umlk0 (slz, slx, ut, gs, un, t, z, x, n);
  278. if ( lp==1 ) *(umlk+l2+l)=wmlk0 (slz, slx, ut, gs, t, z, x, n);
  279. if ( lp==2 ) *(umlk+l2+l)=tmlk0 (slz, slx, ut, gs, t, z, x, n);
  280. t=t+dt;
  281. }
  282. z=z+dz;
  283. }
  284. printf("\n\t uml0(z,x=%5.2f,t) lp=%u -- array uml0(%u,%u)\n",x,lp,nz,nz);
  285. for (m=0; m<nz; m++)
  286. { n2=m*nz;
  287. for (l=0; l<nz; l++)
  288. printf("%8.3g%c",*(umlk+n2+l), ( l%n==n-1 ) ? '\n' : ' ');
  289. PRN;
  290. }
  291. if ( lp==0 ) fcl = fopen("gduzt0.dat","w");
  292. if ( lp==1 ) fcl = fopen("gdwzt0.dat","w");
  293. if ( lp==2 ) fcl = fopen("gdtzt0.dat","w");
  294. for (i=0; i<n2; i++) fprintf(fcl,"%g,",*(umlk+i));
  295. fclose(fcl);
  296. z=2.;
  297. x=0.5;
  298. for (m=0;m<nz;m++)
  299. { t=0;
  300. n2=m*n;
  301. l2=m*nz;
  302. for (l=0;l<nz;l++)
  303. { if ( lp==0 ) *(umlk+l2+l)=umlk0 (slz, slx, ut, gs, un, t, z, x, n);
  304. if ( lp==1 ) *(umlk+l2+l)=wmlk0 (slz, slx, ut, gs, t, z, x, n);
  305. if ( lp==2 ) *(umlk+l2+l)=tmlk0 (slz, slx, ut, gs, t, z, x, n);
  306. t=t+dt;
  307. }
  308. x=x+dx;
  309. }
  310. printf("\n\t uml0(x,t,z=%5.2f) lp=%u -- array uml0(%u,%u)\n",z,lp,nz,nz);
  311. for (m=0; m<nz; m++)
  312. { n2=m*nz;
  313. for (l=0; l<nz; l++)
  314. printf("%8.3g%c",*(umlk+n2+l), ( l%n==n-1 ) ? '\n' : ' ');
  315. PRN;
  316. }
  317. if ( lp==0 ) fcl = fopen("gduxt0.dat","w");
  318. if ( lp==1 ) fcl = fopen("gdwxt0.dat","w");
  319. if ( lp==2 ) fcl = fopen("gdtxt0.dat","w");
  320. for (i=0; i<n2; i++) fprintf(fcl,"%g,",*(umlk+i));
  321. fclose(fcl);
  322. free(umlk);
  323. return(1);
  324. }
  325. else
  326. { printf("\n no memory for umlk in grf0mlk\n");
  327. return(-1); }
  328. }
  329. int grfmlk (float *slz, float *slx, float *ut, float *u, int n, int lp)
  330. {
  331. FILE *fcl;
  332. int i, k, l, m, l1, l2, n2, nz;
  333. float t, x, z, un, dt, dx, dz, *umlk;
  334. nz=2*n;
  335. n2=nz*nz;
  336. un=*(u+10);
  337. umlk=(float *)calloc(n2+1,sizeof(float));
  338. if ( umlk!=NULL )
  339. {
  340. /* printf("\n\t array ut(%u,%u,8)\n",n,n);
  341. for (m=0; m<n; m++)
  342. { n2=8*m*n;
  343. for (l=0; l<n; l++)
  344. { l2=8*l;
  345. for (i=0;i<8;i++) printf("%10.3g",*(ut+n2+l2+i));
  346. PRN; }
  347. }
  348. ... дополнения

Решение задачи: «Разобрать код программы и выявить ошибки»

textual
Листинг программы
  1.  float tmlk1 (float *slz, float *slx, float *gt,  float t, float z, float x, int n);
  2.  float umlk1 (float *slz, float *slx, float *gt, float un, float t, float z, float x, int n);
  3.  float wmlk1 (float *slz, float *slx, float *gt, float t, float z, float x, int n);
  4.  int grf0mlk (float *slz, float *slx, float *ut, float *gs, float *u, int n, int lp);
  5.  int grfmlk (float *slz, float *slx, float *ut, float *u, int n, int lp);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.75 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы