Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- struct otr {
- double a;
- double b;
- };
- int compare(struct otr* n, struct otr* m); // 1 если н левее м, -1 если м левее н,
- int compare(struct otr* n, struct otr* m)
- {
- if (n->a <= m->a)
- {
- return 1;
- }
- return -1;
- }
- void BubbleSort(struct otr* data, int N);
- void BubbleSort(struct otr* data, int N) {
- for (int k = 0; k < N - 1; k++) {
- for (int q = 0; q < N - k - 1; q++) {
- if (compare(data + q, data + q + 1) == -1) {
- struct otr tmp = data[q];
- data[q] = data[q + 1];
- data[q + 1] = tmp;
- }
- }
- }
- }
- int main(void)
- {
- FILE* file;
- struct otr* arr; //исходный массив
- int n; // количество отрезков
- double in1, in2;
- struct otr f; // отрезок который проверяем
- struct otr u; //обьединение отрезков
- if ((file = fopen("in.txt", "rt")) == NULL)
- {
- printf("Can't open input file!\n");
- return -1;
- }
- if (fscanf(file, "%d", &n) != 1)
- {
- printf("Cannot read the number of otrezki!\n");
- return -1;
- }
- if (fscanf(file, "%d%d", &f.a, &f.b) != 2)
- {
- printf("Can't read important otrezok!\n");
- return -1;
- }
- if ((arr = (struct otr*) malloc(sizeof(struct otr) * n)) == NULL)
- {
- printf("Cannot allocate memory!\n");
- return -1;
- }
- for (int k = 0; k < n; k++) {
- if (fscanf(file, "%d%d", &in1, &in2) != 2)
- {
- free(arr);
- printf("Can't read other otrezki!\n");
- return -1;
- }
- if (in1 > in2)
- {
- printf("incorrect otrezok in input!!\n");
- free(arr);
- fclose(file);
- return -1;
- }
- if (in1 != in2) // проверка что отрезок не вырожденный
- {
- arr[k].a = in1;
- arr[k].b = in2;
- }
- }
- BubbleSort(arr, n);
- u = arr[0];
- for (int i = 1; i < n; i++) //обьединяем отрезки
- {
- if (u.b >= arr[i].a && u.b <= arr[i].b)
- {
- u.b = arr[i].b;
- }
- else if (u.b < arr[i].a) //не смогли обьеденить
- {
- if (f.a >= u.a && f.b <= u.b) //проверяем, вдруг данный отрезок уже попал в обьединение
- {
- printf(" is in joined otrezki_1\n");
- break;
- }
- u.a = arr[i].a; // запустили обьединение заново
- u.b = arr[i].b;
- }
- }
- if (f.a >= u.a && f.b <= u.b)
- {
- printf("is in joined otrezki\n");
- }
- else
- {
- printf("is NOT in joined otrezki\n");
- }
- fclose(file);
- free(arr);
- return -1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement