Guest User

Untitled

a guest
May 13th, 2018
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.16 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. /*
  5.  * Заданы два файла целых чисел f1 и f2.Найти в файле f2 число, самое близкое по величине к максимальному значению файла f1
  6.  *
  7.  */
  8.  
  9. void skip_error(FILE *fp, const char *err_msg, const char *file_name)
  10. {
  11.     int k;
  12.     fpos_t err_pos;
  13.    
  14.     if (fgetpos(fp, &err_pos) == 0)
  15.         fprintf(stderr, "%s %s| offset: %ld\n", err_msg, file_name, err_pos);
  16.    
  17.     while ((k = fgetc(fp)) != ' ' && k != '\n' && k != EOF);
  18. }
  19.  
  20. int main(int argc, char **argv)
  21. {  
  22.     /* проверка входных аргуметов */
  23.     if (argc != 3)
  24.     {
  25.         fprintf(stderr, "Usage: %s <f1> <f2>\n", argv[0]);
  26.         return 1;
  27.     }
  28.    
  29.     /* пытаемся открыть входные файлы */
  30.     FILE *f1, *f2;
  31.     if ((f1 = fopen(argv[1], "r")) == NULL)
  32.     {
  33.         perror(argv[1]);
  34.         return 2;
  35.     }
  36.    
  37.     if ((f2 = fopen(argv[2], "r")) == NULL)
  38.     {
  39.         fclose(f1);
  40.         perror(argv[2]);
  41.         return 3;
  42.     }
  43.    
  44.     /* проверка входных данных в файле f1 и присвоение начального значения max */
  45.     int max;
  46.     if (fscanf(f1, "%d", &max) != 1)
  47.     {
  48.         fprintf(stderr, "%s: input data error\n", argv[1]);
  49.         return 4;
  50.     }
  51.    
  52.     /* ищем мах в файле f1 */
  53.     int val;
  54.     while (1)
  55.     {
  56.         int ret = fscanf(f1, "%d", &val);
  57.         if (ret == EOF)
  58.             break;
  59.        
  60.         if (ret != 1)
  61.         {
  62.             skip_error(f1, "wrong data in", argv[1]);
  63.             continue;
  64.         }
  65.         if (val > max)
  66.             max = val;
  67.     }
  68.     fclose(f1);
  69.    
  70.    
  71.     /* проверка входных данных в файле f2 и присвоение начального значения fmax */
  72.     int fmax;
  73.     if (fscanf(f2, "%d", &fmax) != 1)
  74.     {
  75.         fprintf(stderr, "%s: input data error\n", argv[2]);
  76.         return 5;
  77.     }
  78.    
  79.     /* ищем самое близкое по величине к максимальному */
  80.     while (1)
  81.     {
  82.         int ret = fscanf(f2, "%d", &val);
  83.         if (ret == EOF)
  84.             break;
  85.        
  86.         if (ret != 1)
  87.         {
  88.             skip_error(f2, "wrong data in", argv[2]);
  89.             continue;
  90.         }
  91.         if (abs(max - val) <= abs(max - fmax))
  92.             fmax = val;
  93.     }
  94.     fclose(f2);
  95.     printf("res: %d\n", fmax);
  96.    
  97.     return 0;
  98. }
Advertisement
Add Comment
Please, Sign In to add comment