Bisus

Untitled

Oct 30th, 2019
47
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. void init_array(double *a, int n);
  5. int read_array(const char *name, double *a, int n);
  6.  
  7. int main(int argc, const char *argv[])
  8. {
  9.     double *a;
  10.     int n, res;
  11.     double t;
  12.     char *name = 0;
  13.  
  14.     if( !( (argc==2 || argc==3) && sscanf(argv[1], "%d", &n)==1 ) )// Если первый операнд операции позволяет вычислить ответ, то второй операнд не вычисляется
  15.     {
  16.         printf("Usage %s n [file]\n", argv[0]);
  17.         return 1;
  18.     }
  19.     // n -длина
  20.  
  21.     a = (double *)malloc(n*sizeof(double));
  22.     if( !a )
  23.     {
  24.         printf("Not enough memory!\n");
  25.         return 2;
  26.     }
  27.  
  28.     if( argc==3 ) name = (char *)argv[2];
  29.  
  30.     if( name )
  31.     {
  32.         res = read_array(name, a, n);
  33.         if( res<0 )
  34.         {
  35.             switch(res)
  36.             {
  37.             case -1:
  38.                 printf("Can not open %s\n", name);
  39.                 break;
  40.             case -2:
  41.                 printf("Can not read %s\n", name);
  42.                 break;
  43.             default:
  44.                 printf("Unknown error %d in %s\n", res, name);
  45.             }
  46.         }
  47.         free(a);
  48.         return 2;
  49.     } else
  50.         init_array(a, n);
  51.  
  52.     t = clock();
  53.     //solve(a, n);
  54.     t = (clock() - t)/CLOCKS_PER_SEC;
  55.     //print_array(a, n);
  56.     printf("Elapsed=%.2f\n", t);
  57.     free(a);
  58.  
  59.     return 0;
  60. }
  61.  
  62. void init_array(double *a, int n)
  63. {
  64.     int i;
  65.     for( i = 0; i<n; i++ )
  66.         a[i] = i;
  67. }
  68.  
  69. int read_array(const char *name, double *a, int n)
  70. {
  71.     FILE *fp;
  72.     int i;
  73.  
  74.     if( !(fp = fopen(name, "r") ) )
  75.         return -1;
  76.  
  77.     for( i = 0; i<n; i++ )
  78.     {
  79.         if( fscanf(fp, "%lf", a + i)!=1 )
  80.         {
  81.             fclose(fp);
  82.             return -2;
  83.         }
  84.     }
  85.  
  86.     fclose(fp);
  87.     return 0;
  88.    
  89. }
RAW Paste Data