Advertisement
Guest User

Untitled

a guest
Dec 5th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.72 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. void init_matrix(double*a, int m, int n);
  6. double f(int i, int j);
  7. int solve(int*a, int m, int n);
  8. int read_matrix (const char *filename, int *a, int m, int n);
  9. void print_matrix(const char *filename, int*a, int m, int n);
  10.  
  11.  
  12. int solve(int*a, int m, int n)
  13. {
  14.   int J = -1;
  15.   int i = 0, j = 0, k = 0, bias = 0;
  16.   double sum, f = 0;
  17.   for(int j = 0; j < n; j++)
  18.   {
  19.     for(int i = 0; i < m; i++)
  20.     {
  21.       f += a[i*n+j];
  22.     }
  23.   }
  24.  
  25.   f /= (m*n);
  26.  
  27.   for(int j = 0; j < n; j++)
  28.   {
  29.      for(int i = 0; i < m; i++)
  30.      {
  31.         printf("a[k] = %d\n", a[i*n+j]);
  32.         if(a[i*n+j] == f)
  33.         {
  34.             J = j;
  35.             break;
  36.         }
  37.      }
  38.      if(J >= 0) break;
  39.      
  40.   }
  41.        
  42.   if(J >= 0)
  43.   {
  44.       for(k = 0; k < (m*(n - 1)); k++)
  45.       {
  46.           printf("a[k] = %d\n", a[k]);
  47.           if((k + bias) %n ==J) bias++;
  48.           a[k] = a[k+bias];
  49.       }
  50.   }
  51.  
  52.   return J;
  53. }
  54.  
  55. int read_matrix (const char *filename, int *a, int m, int n)
  56. {
  57.   FILE *fp;
  58.   int i, j;
  59.  
  60.   if (!(fp = fopen (filename, "r")))
  61.   {
  62.     return -1;
  63.   }
  64.  
  65.   for (i = 0; i < m; i++)
  66.   {
  67.     for (j = 0; j < n; j++)
  68.     {
  69.       if (fscanf (fp, "%d", a + i * n + j) != 1)
  70.       {
  71.         fclose (fp);
  72.         return -2;
  73.       }
  74.     }
  75.   }
  76.   fclose (fp);
  77.   return 0;
  78. }
  79.  
  80. void print_matrix(const char *filename, int*a, int m, int n)
  81. {
  82.   FILE *fp;
  83.   int i, j;
  84.  
  85.   fp = fopen (filename, "w");
  86.  
  87.   for(i=0; i<m; i++)
  88.   {
  89.     for(j=0; j<n; j++) fprintf(fp, "%d ", a[i*n+j]);
  90.     fprintf(fp, "\n");
  91.   }
  92.   fclose(fp);
  93. }
  94.  
  95. int main(int argc, const char* argv[])
  96. {
  97.   int*a;
  98.   int n,m, read, res;
  99.   const char*filename;
  100.   const char*filename2;
  101.  
  102.   if(argc!=5)
  103.   {
  104.       printf("\n\nARGS ERR\n\n");
  105.       return -1;
  106.   }
  107.  
  108.   if(!(n = atoi(argv[2])))
  109.   {
  110.       printf("\n\nN ERR\n\n");
  111.       return -2;
  112.   }
  113.    
  114.   if(!(m = atoi(argv[1])))
  115.   {
  116.       printf("\n\nM ERR\n\n");
  117.       return -3;
  118.   }
  119.  
  120.   if(!(a = (int*)malloc(m*n*(sizeof(double)))))
  121.   {
  122.       printf("\n\nN ERR\n\n");
  123.       return -4;
  124.   }
  125.  
  126.   filename = argv[3];
  127.   filename2 = argv[4];
  128.   read = read_matrix(filename, a, m, n);
  129.       if(read<0)
  130.       {
  131.           switch(read)
  132.           {
  133.           case -1:
  134.               printf("\n\nERR OPEN\n\n");
  135.               break;
  136.           case -2:
  137.               printf("\n\nERR READ\n\n");
  138.               break;
  139.           default:
  140.               printf("\n\nUnknown err\n\n");
  141.           }
  142.       }
  143.      
  144.       else
  145.       {
  146.           res = solve(a,m,n);
  147.           if(res >= 0) print_matrix(filename2, a, m, n-1);      
  148.           else print_matrix(filename2, a, m, n);
  149.       }
  150.  
  151.   free(a);
  152.   return 0;
  153. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement