Объединение двух множеств - C (СИ)
Формулировка задачи:
Помогите! Нужно сделать объединение двух множеств. Вот код, но я не пойму откуда ноль
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #include <locale.h>
- #define KU 11
- int search(int B[],int A)
- {
- int i;
- for(i=1;i<KU;i++)
- if (B[i]==A) return 1;
- return 0;
- }
- void vvod(int *KA, int A[KU])
- {
- int j;
- printf("Введите кол-во элементов множества: \n");
- scanf("%i",KA);
- printf("Введите элементы множества: \n");
- for (j=1;j<*KA;j++){
- scanf("%i",&A[j]);
- }
- }
- void obedenenie(int A[KU],int B[KU],int C[KU],int KA,int KB,int *p)
- {
- int j,i;
- *p=KB;
- for(i=1;i<*p;i++){
- C[i]=B[i];
- }
- for(j=1;j<KA;j++){
- if(search(C,A[j])==0)
- {
- (*p)++;
- C[*p]=A[j];
- }
- }
- }
- int main()
- {
- setlocale (LC_CTYPE,"");
- int A[KU],B[KU],i,j,KA,KB,p,C[KU],F;
- vvod(&KA,A);
- vvod(&KB,B);
- obedenenie(A,B,C,KA,KB,&p);
- for(i=1;i<=p;i++)
- printf("%i ",C[i]);
- return 0;
- }
Решение задачи: «Объединение двух множеств»
textual
Листинг программы
- #include <stdio.h>
- #define KU 11
- int* union_set(int* f1, int* l1, int* f2, int* l2, int* ds){
- int* p = ds;
- while((f1 != l1) && (f2 != l2)){
- if(*f1 < *f2)
- *p++ = *f1++;
- else {
- if(*f1 == *f2)
- ++f1;
- *p++ = *f2++;
- }
- }
- while(f1 != l1)
- *p++ = *f1++;
- while(f2 != l2)
- *p++ = *f2++;
- return p;
- }
- int main(void){
- int* p, *e;
- int sc[KU * 2];
- int sa[] = { 1, 3, 4, 5, 8 };
- int sb[] = { 0, 1, 2, 5, 6, 7, 8, 9 };
- e = union_set(sa, sa + sizeof(sa)/sizeof(sa[0]),
- sb, sb + sizeof(sb)/sizeof(sb[0]), sc);
- for(p = &sc[0]; p != e; ++p)
- printf("%d ", *p);
- return 0;
- }
Объяснение кода листинга программы
- Включаем заголовочный файл
для возможности работы с функциями ввода-вывода - Определяем константу KU равную 11, которая будет использоваться в дальнейшем в коде
- Функция union_set принимает пять аргументов: указатели на первые и последние элементы двух множеств и указатель на первое пустое место в результирующем множестве
- В функции union_set происходит объединение двух множеств в третье. Результатом работы функции является указатель на первый элемент после объединенного множества
- В цикле while происходит сравнение и перемещение элементов из первого и второго множеств в третье до тех пор, пока не будут использованы все элементы одного из множеств
- Если текущие элементы первого и второго множеств равны, то они пропускаются и происходит переход к следующим элементам
- После завершения цикла while, в результирующее множество добавляются оставшиеся элементы из первого и второго множеств
- В функции main создается массив из KU * 2 элементов для хранения объединенного множества
- Задаются два множества: sa и sb. Множество sa содержит элементы { 1, 3, 4, 5, 8 }, а множество sb содержит элементы { 0, 1, 2, 5, 6, 7, 8, 9 }
- Вызывается функция union_set для объединения множеств sa и sb в результирующее множество sc
- Результат объединения выводится на экран с помощью цикла for и функции printf
- Возвращаемое значение функции main равно 0, что означает успешное выполнение программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д