Разобрать код программы и выявить ошибки - 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);

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


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

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

12   голосов , оценка 3.75 из 5
Похожие ответы