home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / C-SSP.ARJ / TAB2.C < prev    next >
Encoding:
Text File  |  1984-08-12  |  2.4 KB  |  94 lines

  1.    tab2(x,y,bux,blx,nix,buy,bly,niy,lca,sumx,sumy,
  2.         xm,ym,sdx,sdy,no,freq,iop)
  3.  
  4.       /* performs a two-way classification for two variables in     */
  5.       /* two observation arrays of the frequency, percent frequency */
  6.       /* and other statistics (sjm,mean,standard deviation of each  */
  7.       /* variable) over given class intervals.                      */
  8.  
  9.       int iop,lca,nix,niy,no;
  10.       float x[],y[],bux,blx,buy,bly,*sumx,*sumy,*xm,*ym,*sdx,*sdy,
  11.             freq[];
  12.  
  13.    {
  14.       int i,ij,j,k;
  15.       float nixm1,niym1,sintx,sinty,ssx,ssy,tnix,tniy,testx,testy,tno;
  16.       extern double fabs(),sqrt();
  17.  
  18.  
  19.       for(j = 0; j <= nix-1; j++)
  20.       {
  21.        for(i = 0; i <= niy-1; i++)
  22.        {
  23.         ij = j + (i * lca);
  24.         freq[ij] = 0.;
  25.        }
  26.       }
  27.       tniy = niy;
  28.       tnix = nix;
  29.       sintx = fabs(bux - blx)/(tnix - 2.);
  30.       sinty = fabs(buy - bly)/(tniy - 2.);
  31.       tno = no;
  32.       *sumx = 0.;
  33.       *sumy = 0.;
  34.       ssx = 0.;
  35.       ssy = 0.;
  36.  
  37.       for(i = 0; i <= no-1; i++)
  38.       {
  39.       *sumx = *sumx + x[i];
  40.       *sumy = *sumy + y[i];
  41.       ssx = ssx + x[i]*x[i];
  42.       ssy = ssy + y[i]*y[i];
  43.       }
  44.       *xm = *sumx/tno;
  45.       *ym = *sumy/tno;
  46.       *sdy = sqrt((ssy-(*sumy**sumy)/tno)/(tno - 1.));
  47.       *sdx = sqrt((ssx -( *sumx**sumx)/tno)/(tno - 1.));
  48.       niym1 = niy - 1;
  49.       nixm1 = nix - 1;
  50.  
  51.       for( k = 0; k <= no-1; k++)
  52.       {
  53.        testx = blx;
  54.        for(j = 0; j <= nixm1-1; j++)
  55.        {
  56.         testy = bly;
  57.         ij = j;
  58.         if (x[k] >= testx) goto txl;
  59.  
  60.         for(i = 1; i <= niym1; i++)
  61.         {
  62.          ij = j + (i-1) * lca;
  63.          if (y[k] < testy) goto fij;
  64.          testy = testy + sinty;
  65.         }
  66.         ij = j + (niy - 1) * lca;
  67.         goto fij;
  68. txl:    testx = testx + sintx;
  69.        }                                /* end of j */
  70.       for(i = 1; i <= niym1; i++)
  71.       {
  72.        ij = (nixm1) + ((i-1) * lca);
  73.        if (y[k] < testy) goto fij;
  74.        testy = testy + sinty;
  75.       }
  76.       ij = (niym1) * lca + nixm1;
  77. fij:  freq[ij] = freq[ij] + 1.;
  78.       }      /*  end of k (outer) */
  79.       if (iop != 2) return;
  80.  
  81.       tno = no;
  82.       tno = 1. / tno;
  83.  
  84.       for(j = 0; j <= nixm1; j++)
  85.       {
  86.        for(i = 0; i <= niym1; i++)
  87.        {
  88.         ij = j + i * lca;
  89.         if (freq[ij] != 0.)
  90.          freq[ij] = 100. * freq[ij] * tno;
  91.        }
  92.       }
  93.    }
  94.