Advertisement
greannmhar

вычигем 4

Dec 5th, 2023 (edited)
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.98 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct otr {
  5.     double a;
  6.     double b;
  7. };
  8.  
  9. int compare(struct otr* n, struct otr* m); // 1 если н левее м, -1 если м левее н,
  10. int compare(struct otr* n, struct otr* m)
  11. {
  12.     if (n->a <= m->a)
  13.     {
  14.         return 1;
  15.     }
  16.     return -1;
  17. }
  18.  
  19. void BubbleSort(struct otr* data, int N);
  20.  
  21. void BubbleSort(struct otr* data, int N) {
  22.     for (int k = 0; k < N - 1; k++) {
  23.         for (int q = 0; q < N - k - 1; q++) {
  24.             if (compare(data + q, data + q + 1) == -1) {
  25.                 struct otr tmp = data[q];
  26.                 data[q] = data[q + 1];
  27.                 data[q + 1] = tmp;
  28.             }
  29.         }
  30.     }
  31. }
  32. int main(void)
  33. {
  34.     FILE* file;
  35.     struct otr* arr; //исходный массив
  36.     int n; // количество отрезков
  37.     double in1, in2;
  38.     struct otr f; // отрезок который проверяем
  39.     struct otr u; //обьединение отрезков
  40.     if ((file = fopen("in.txt", "rt")) == NULL)
  41.     {
  42.         printf("Can't open input file!\n");
  43.         return -1;
  44.     }
  45.     if (fscanf(file, "%d", &n) != 1)
  46.     {
  47.         printf("Cannot read the number of otrezki!\n");
  48.         return -1;
  49.     }
  50.  
  51.     if (fscanf(file, "%d%d", &f.a, &f.b) != 2)
  52.     {
  53.         printf("Can't read important otrezok!\n");
  54.         return -1;
  55.     }
  56.  
  57.     if ((arr = (struct otr*) malloc(sizeof(struct otr) * n)) == NULL)
  58.     {
  59.         printf("Cannot allocate memory!\n");
  60.         return -1;
  61.     }
  62.    
  63.     for (int k = 0; k < n; k++) {
  64.         if (fscanf(file, "%d%d", &in1, &in2) != 2)
  65.         {
  66.             free(arr);
  67.             printf("Can't read other otrezki!\n");
  68.             return -1;
  69.         }
  70.         if (in1 > in2)
  71.         {
  72.             printf("incorrect otrezok in input!!\n");
  73.             free(arr);
  74.             fclose(file);
  75.             return -1;
  76.         }
  77.         if (in1 != in2) // проверка что отрезок не вырожденный
  78.         {
  79.             arr[k].a = in1;
  80.             arr[k].b = in2;
  81.         }
  82.     }
  83.     BubbleSort(arr, n);
  84.     u = arr[0];
  85.     for (int i = 1; i < n; i++) //обьединяем отрезки
  86.     {
  87.         if (u.b >= arr[i].a && u.b <= arr[i].b)
  88.         {
  89.             u.b = arr[i].b;
  90.         }
  91.         else if (u.b < arr[i].a) //не смогли обьеденить
  92.         {
  93.             if (f.a >= u.a && f.b <= u.b) //проверяем, вдруг данный отрезок уже попал в обьединение
  94.             {
  95.                 printf(" is in joined otrezki_1\n");
  96.                 break;
  97.             }
  98.             u.a = arr[i].a; // запустили обьединение заново
  99.             u.b = arr[i].b;
  100.         }
  101.  
  102.     }
  103.     if (f.a >= u.a && f.b <= u.b)
  104.     {
  105.         printf("is in joined otrezki\n");
  106.     }
  107.     else
  108.     {
  109.         printf("is NOT in joined otrezki\n");
  110.     }
  111.    
  112.     fclose(file);
  113.     free(arr);
  114.     return -1;
  115. }
  116.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement