Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Timama
10 / 10 / 9
Регистрация: 30.03.2016
Сообщений: 163
1

Объединение и пересечение двух массивов

27.04.2016, 14:52. Просмотров 1013. Ответов 1
Метки нет (Все метки)

доброго времени суток, нужна помощь со следующим кодом.
void BuildGroup(int** group, int* count)
функция получающая от пользователя размер группы, создающая динамическую группу, и получающая данные( если даные повторяються то она попросит занести их снова). и в конце возвращает группу.
int* Union(int* group1, int size1, int* group2, int size2, int* sizeUnion)
получает две группы, и возвращает ихнее обьеденение.
int* Intersection(int* group1, int size1,int* group2,int size2, int* sizeInter)
получает вде группы и возвращает из пересечение.
заранее спасибо.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2016, 14:52
Ответы с готовыми решениями:

Объединение двух массивов
Здравствуйте, нужна помощь с программой на Си. "Даны два массива х и y, элементы каждого из...

Объединение двух упорядоченных массивов
Даны массив A из N целых элементов массив B из M целых элементов. Оба массива упорядочены по...

Определить объединение двух полей. Первое поле – массив из двух байт, второе – слово
Помогите написать программу( лучше с комментариями чтобы разобраться) Определить объединение из...

Пересечение двух множеств
Даны 2 множества (натуральных чисел от 0 до 31) A и B. Необходимо сравнить элементы двух множеств...

Пересечение двух прямых. Угол и точка пересечения. Графика в консоли
Пересечение двух прямых. Угол и точка пересечения...

1
Timama
10 / 10 / 9
Регистрация: 30.03.2016
Сообщений: 163
29.04.2016, 00:00  [ТС] 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Сделал сам) можно закрывать.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
 
void BuildGroup(int** group, int* count) {/*func to buld a array*/
    int size, flag = 0, *arr = NULL,i,j;/*a size of array,the array to check a equel parameters, flag is for true or false*/
    scanf("%d", &size);
    while (flag != 1) {/*if we have true, exit*/
        if (size == 0) {/*the Empty set*/
            printf("Empty Set\n");/*it will be show with 0*/
            flag = 1;/*need to exit from the loop*/
            *group = (int*)calloc(flag, sizeof(int));/*dinamic memory management*/
            if (!*group) {/*check if dinamic memory managment is falce*/
                printf("ERROR!Not Enough memory!\n");
                exit(1);/*exit from the program*/
            }
        }
        else {
            *group = (int*)calloc(size, sizeof(int));/*dinamic memory management*/
            if (!*group) {/*check if dinamic memory managment is falce*/
                printf("ERROR!Not Enough memory!\n");
                exit(1);/*exit from the program*/
            }
            arr = (int*)calloc(size, sizeof(int));/*temp array*/
            if (!arr) {/*check it*/
                printf("ERRPR!Not Enough memonty!\n");
                exit(1);
            }
            printf("Enter a group: ");
            flag = 1;
            for (i = 0; i < size; i++)
            {
                scanf("%d", &(*group)[i]);/*enter a array*/
                arr[i] = (*group)[i];/*for the check a equel parameters*/
                for (j = 0; j < i; j++)/*loop to check a equel parameters*/
                {
                    if (i == 0) {/*because we it's first number on the array*/
                        break;
                    }/*exit from the loop*/
                    if ((*group)[i] == arr[j]) {/*if parameters are equel*/
                        printf("Wrong Input,Try Again\n");/*the user enter a wrong input*/
                        flag = 0;/*so flag is flase*/
                        free(arr);/*delete a array*/
                        free(*group);/*delete a array*/
                        break;/*exit from the loop*/
                    }
                    else
                        flag = 1;/*if input is corrent, so flag is true*/
                }
                if (flag == 0) {
                    getchar(stdin);
                    break;/*exit*/
                }
            }
        }
    }
    free(arr);/*delete temp array*/
    *count = size;/*the size of the new array*/
}
 
int* Union(int* group1, int size1, int* group2, int size2, int* sizeUnion) {
    int count=size1+size2,j=0,i=0,k=0,flag=0,*UnionArr=NULL,size;
    if (size1 == 0) {/*if we have a Empty set*/
        *sizeUnion = size2;/*A union 0 = A*/
        return group2;
    }
    else if (size2 == 0) {
        *sizeUnion = size2;/*B union 0 = B*/
        return group1;
        }
    else {
        size = (size1 >= size2) ? size1 : size2;/*if size1>size2,size = size1,else size=size2*/
        for (i = 0; i < size; i++)/*loop to check a equel parameters*/
        {
            if (size == size1) {/*if the bigest array is group1*/
                for (j = i - 1; j < size2; j++)/*check a group2*/
                {
                    if (group1[i] != group2[j])/*if parameters are different, up the j*/
                        continue;
                    else
                        count--;/*esle down a sum of number of parameters of two groups*/
                }
            }
            else if (size == size2) {/*if the bigest array is group2*/
                for (j = i - 1; j < size2; j++)
                {
                    if (group2[i] != group1[j])
                        continue;
                    else
                        count--;
                }
            }
        }
        UnionArr = (int*)calloc(count, sizeof(int));/*build union array*/
        flag = 0;/*true false parameter*/
        if (size == size1) {/*if bigest array is group1*/
            for (i = 0; i < size1;i++)/*loop to add parameters for union array*/
            {
                UnionArr[i] = group1[i];/*coppy a bigest group to Union*/
            }
            for (j = 0; j < size2; j++)/*check a parameters of smallest group*/
            {
                for (k = j - 1; k < size1; k++)/*check a parameters of Union*/
                {
                    if (group2[j] == UnionArr[k]) {/*if the parameters are equel, flag is false, and exit from the loop*/
                        flag = 0;
                        break;
                    }
                    else
                        flag = 1;
                }
                if (flag == 1) {
                    UnionArr[i] = group2[j];
                    i++;
                }
            }
        }
        else if (size == size2) {/*if bigest array is group1*/
            for (i = 0; i < size2;i++)/*loop to add parameters for union array*/
            {
                UnionArr[i] = group2[i];/*coppy a bigest group to Union*/
            }
            for (j = 0; j < size1; j++)/*check a parameters of smallest group*/
            {
                for (k = j - 1; k < size2; k++)/*check a parameters of Union*/
                {
                    if (group1[j] == UnionArr[k]) {/*if the parameters are equel, flag is false, and exit from the loop*/
                        flag = 0;
                        break;
                    }
                    else
                        flag = 1;
                }
                if (flag == 1) {
                    UnionArr[i] = group1[j];
                    i++;
                }
            }
        }
        *sizeUnion = count;
        return UnionArr;
    }
}
 
int* Intersection(int* group1, int size1, int* group2, int size2, int* sizeInter) {
    int size,count=0,*InterArr = NULL, i, j,k=0,flag=0;
    if (size1 == 0) {/*if we have a empty set*/
        *sizeInter = size1+1;/*to output a 0*/
        return group1;/*A inter 0 = 0*/
    }
    else if (size2 == 0) {
        *sizeInter = size2+1;
        return group2;/*B inter 0 = 0*/
    }
    else {
        size = (size1 >= size2) ? size1 : size2;/*if size1>size2,size = size1,else size=size2*/
        if (size == size1) {/*the bigest size*/
            for (i = 0; i < size; i++)
            {
                for (j = 0; j < size2; j++)
                {
                    if (group1[i] == group2[j])/*if the parameters are equel*/
                        count++;/*up*/
                }
            }
        }
        else if (size == size2) {/*the bigest size*/
            for (i = 0; i < size; i++)
            {
                for (j = 0; j < size1; j++)
                {
                    if (group2[i] == group1[j])
                        count++;
                }
            }
        }
        InterArr = (int*)calloc(count, sizeof(int));/*build new array*/
        if (size == size1) {
            for (i = 0; i < size2; i++)
            {
                for (j = 0; j < size1; j++)
                {
                    if (group1[j] == group2[i]) {
                        InterArr[k] = group1[j];
                        k++;
                    }
                }
            }
        }
        else if (size == size2) {
            for (i = 0; i < size1; i++)
            {
                for (j = 0; j < size2; j++)
                {
                    if (group2[j] == group1[i]) {
                        InterArr[k] = group2[j];
                        k++;
                    }
                }
            }
        }
        *sizeInter = count;
        return InterArr;
    }
}
 
int main() {
    int *group1 = NULL,*group2=NULL, size1, size2, sizeUnion,*UnionArr=NULL,*InterArr=NULL,sizeInter;
    printf("Enter a size of first group: ");
    BuildGroup(&group1, &size1);
    printf("Enter a size of second group: ");
    BuildGroup(&group2, &size2);
    UnionArr = Union(group1, size1, group2, size2, &sizeUnion);
    printf("The Union of the groups is:{ ");
    for (int i = 0; i < sizeUnion; i++)
    {
        printf("%d ", UnionArr[i]);
    }
    printf("}\n");
    InterArr=Intersection(group1,size1,group2,size2,&sizeInter);
    printf("The Inetsection of the groups is:{ ");
    for (int i = 0; i < sizeInter; i++)
    {
        printf("%d ", InterArr[i]);
    }
    printf("}\n");
    return 0;
}

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.04.2016, 00:00

Найти пересечение двух ОТРЕЗКОВ каждый из которых ограничен двумя точками
Написал подобную программу для нахождения пересечения прямых а для пересечения отрезков не понимаю...

Объединение двух строк
Всем привет! Прошу прощения за мою тупость, но вопрос такой: Необходимо отправить вот такой...

Объединение двух множеств
Помогите! Нужно сделать объединение двух множеств. Вот код, но я не пойму откуда ноль #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru